vlad781 Ответов: 2

Проблема с программным выравниванием текста в MS Word с помощью языка Си#


using Microsoft.Office.Core;
using Microsoft.Office.Interop.Word;
using Word = Microsoft.Office.Interop.Word;
using System.Reflection;

object oMissing = System.Reflection.Missing.Value;
            object oEndOfDoc = "\\endofdoc"; /* \endofdoc is a predefined bookmark */
            
            //Start Word and create a new document.
            Word._Application oWord;
            Word._Document oDoc;
            oWord = new Word.Application();
            oWord.Visible = true;
            oDoc = oWord.Documents.Add(ref oMissing, ref oMissing,
                ref oMissing, ref oMissing);


Вот тут-то я и столкнулся с проблемой:

//Insert a paragraph at the beginning of the document.
            Word.Paragraph oPara1;
            oPara1 = oDoc.Content.Paragraphs.Add(ref oMissing);
            Word.Range rng = oPara1.Range;
            rng.Font.Size = 14;
            rng.Font.Name = "Arial";
            rng.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
            oPara1.Range.Font.Bold = 1;
            oPara1.Range.Text = "SOCIAL ASSESSMENT";
            oPara1.Format.SpaceAfter = 24;    //24 pt spacing after paragraph.
            oPara1.Range.InsertParagraphAfter();
            
            
            //Insert another paragraph.
            object oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
            Word.Paragraph oPara2;
            oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
            oPara2 = oDoc.Content.Paragraphs.Add(ref oRng);
            oPara2.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
            oPara2.Range.Font.Underline = Word.WdUnderline.wdUnderlineSingle;
            oPara2.Range.Font.Bold = 1;
            oPara2.Range.Text = "Request for Services and Identifying Information";
            oPara2.Format.SpaceAfter = 24;
            oPara2.Range.InsertParagraphAfter();

            //Insert another paragraph.
            Word.Paragraph oPara3;
            oRng = oDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
            oPara3 = oDoc.Content.Paragraphs.Add(ref oRng);
            oPara3.Range.Font.Bold = 0;
            oPara3.Range.Text = "Applicants Name: " + textBox1.Text + " " + textBox7.Text + "\r\n" + "Referred by: "
                + textBox2.Text + "\r\n" + "Request for Evaluation by: " + textBox3.Text + "\r\n" +
                "Reason for Referral: " + textBox4.Text + "\r\n" + "Service Request: " + textBox5.Text
                + "\r\n" + "Clients Primary Language: " + textBox6.Text + "\r\n" +
                "Language of Informant/Advocate: " + textBox8.Text;
            oPara3.Format.SpaceAfter = 24;
            oPara3.Range.InsertParagraphAfter();


Весь документ в конечном итоге выравнивается по левому краю. Как я могу это исправить?

Спасибо,
Влад

manikantaer

Привет
У меня такая же проблема в моем проекте но ваше решение 2 не работает
итак, есть ли другие решения??

2 Ответов

Рейтинг:
14

vlad781

Я смог решить эту проблему сам. Мне нужно было точно указать, какой диапазон выравнивать:

Word.Range rng = oPara1.Range;
rng.Font.Size = 14;
rng.Font.Name = "Arial";
rng.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;


А теперь выровняйте по левому краю следующий абзац:

Word.Range rng2 = oPara2.Range;
rng2.Font.Size = 12;
rng2.Font.Name = "Arial";
rng2.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;



Это центрирует первую строку текста, а остальные выравнивает по левому краю :)


vlad781

Пожалуйста, объясните 1 звезду.

Рейтинг:
1

Rudolf Németh

Я знаю, что это старый и закрытый вопрос, но упомянутое здесь решение мне не помогло.
Поэтому я опубликую здесь решение для ppl, как и я, в надежде, что оно им поможет.

Все, что вам нужно сделать, это установить свойство Alignment после свойства Text (см. код ниже).

// p1 is going to be right aligned
var p1 = document.Paragraphs.Add(System.Reflection.Missing.Value);
p1.Range.Font.Name = "Calibri";
p1.Range.Font.Size = 18;
p1.Range.Text = "right";
p1.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphRight;
p1.Range.InsertParagraphAfter();
// p2 is going to be center aligned
var p2 = document.Paragraphs.Add(System.Reflection.Missing.Value);
p2.Range.Font.Name = "Calibri";
p2.Range.Font.Size = 16;
p2.Range.Text = "center";
p2.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;
p2.Range.InsertParagraphAfter();
// p3 is going to be left aligned
var p3 = document.Paragraphs.Add(System.Reflection.Missing.Value);
p3.Range.Font.Name = "Calibri";
p3.Range.Font.Size = 14;
p3.Range.Text = "left";
p3.Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphLeft;
p3.Range.InsertParagraphAfter();


Вот как это сработало для меня.


Maciej Los

Зачем отвечать на уже заданный вопрос? Какова дополнительная ценность вашего ответа?

Rudolf Németh

Как я уже упоминал, решение мне не помогло, и то, что vlad781 написал в своем ответе afaik, не относится к этой проблеме. Дело было в том, как я уже упоминал, в каком порядке вы устанавливаете значения свойств (вам нужно установить значение свойства alignment после того, как вы установили значение свойства text, а не наоборот). Решение предназначено для таких ppl, как я, которые искали ответ и не нашли его здесь (см. сообщение manikantaers здесь помечено как решение3)