Как сделать определенные слова жирным шрифтом в текстовом поле в Microsoft Word с помощью C #? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть приложение, которое будет печатать файл .docx, который имеет форму текстового поля с текстом.В нем есть определенные слова, которые должны быть выделены жирным шрифтом.

Например, частью текста является "... представитель M & A empresa, o Presente ...", и только "M & A" необходимобудь смелым.

Однако я точно не знаю, как мне это сделать.Я искал в SO, а также на других сайтах, таких как MSDN и т. Д., Но ни один не предоставляет решение.Кто-нибудь может мне помочь?

РЕДАКТИРОВАТЬ: я использую Interop для достижения этой цели.Код, который я сделал до сих пор, выглядит следующим образом:

// opens word app
wordApp = new Microsoft.Office.Interop.Word.Application();
wordApp.Visible = false;

// print dialog for settings input
PrintDialog pd = new PrintDialog();
if (pd.ShowDialog() == DialogResult.OK)
{
    wordApp.ActivePrinter = pd.PrinterSettings.PrinterName;

    // opens the document
    Microsoft.Office.Interop.Word.Document doc = wordApp.Documents.Open(filePath);

    // iterates through each shape in the file
    foreach (Microsoft.Office.Interop.Word.Shape shape in doc.Shapes)
    {
        string shapeName = shape.Name;

        // checks whether the shape is a Text Box
        if (shapeName.StartsWith("Text Box"))
        {
            string shapeText = shape.TextFrame.ContainingRange.Text;

            // checks whether the shape is the one I want to modify 
            // side note: there are more shapes in the file, so I specify it
            if (shapeText.StartsWith("Concedemos"))
            {
                // erases the text, and sets it to a string
                shape.TextFrame.ContainingRange.Text = "";
                shape.TextFrame.ContainingRange.Text = "textSample";
            }
        }
    }

    // prints the file
    wordApp.ActiveDocument.PrintOut();
}

// quits the app
wordApp.Quit();
wordApp = null; 

Заранее спасибо!

1 Ответ

1 голос
/ 25 мая 2019

В приведенном ниже фрагменте кода демонстрируется, как циклически проходить все фигуры в документе Word, проверять, является ли это текстовое поле (элемент чертежа), начинающийся с нужной строки, а затем искать в текстовом поле термин, который должен быть выделен жирным шрифтом, и выделять его жирным шрифтом. .

  1. Можно проверить Shape.Type, чтобы определить, является ли это текстовым полем. Shape.Type - это Enum Office (поскольку объект Shape является общим для многих приложений Office). Итак if (shapeType == Office.MsoShapeType.msoTextBox)

  2. Чтобы выделить текст и отформатировать его, чаще всего лучше всего подходит функциональность Word Range.Find. Позволяет найти и заменить форматирование, а также строковые значения. (Совет: при запуске проекта, который требует такого рода вещей, часто бывает полезно проверить в диалоговом окне (Ctrl + H) в пользовательском интерфейсе Word, чтобы определить правильную комбинацию параметров.)

  3. Чтобы понять, для чего предназначены все параметры Find.Execute, обратитесь к справке или посмотрите на Intellisense (или их комбинацию).

В этом примере важно отметить, что для форматирования целевого текста не указывается Replacement.Text.

foreach (Microsoft.Office.Interop.Word.Shape shape in doc.Shapes)
{
    Office.MsoShapeType shapeType = shape.Type;

    // checks whether the shape is a Text Box
    if (shapeType == Office.MsoShapeType.msoTextBox)
    {
        // checks whether the shape is the one I want to modify 
        // side note: there are more shapes in the file, so I specify it
        if (shapeText.StartsWith("Concedemos"))
        {
            string textToBold = "M&A";
            Word.Range rngTextBox = shape.TextFrame.TextRange;
            Word.Find rngFind = rngTextBox.Find;
            rngFind.Text = textToBold;
            rngFind.Replacement.Font.Bold = -1;
            object oFindStop = Word.WdFindWrap.wdFindStop;
            object oTrue = true;
            object oReplaceAll = Word.WdReplace.wdReplaceAll;
            object missing = System.Type.Missing;
            rngFind.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,
                ref missing, ref missing, ref oFindStop, ref oTrue, ref missing, ref oReplaceAll,
                ref missing, ref missing, ref missing, ref missing);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...