如何使用C#在Microsoft Word的文本框中使特定单词加粗?

时间:2019-05-23 16:44:32

标签: c# ms-word

我有一个应用程序,它将打印一个.docx文件,该文件具有带有文本的文本框形状。其中某些单词需要加粗。

例如,文本的一部分是“ ...代表并购企业并购,还是呈现...”,而仅“ 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 个答案:

答案 0 :(得分:1)

下面的代码摘录演示了如何循环遍历Word文档中的所有Shapes,检查它是否是以所需字符串开头的文本框(绘图元素),然后在文本框中搜索要加粗的术语并将其加粗

  1. 可以检查Shape.Type以确定它是否是文本框。 Shape.Type是一个 Office 枚举(因为Shape对象是许多Office应用程序所共有的)。所以if (shapeType == Office.MsoShapeType.msoTextBox)

  2. 要挑选文本并设置其格式,最常见的方法是使用Word的Range.Find功能。它使查找和替换格式以及字符串值成为可能。 (提示:启动需要此类操作的项目时,通常最好在Word UI的对话框(Ctrl + H)中进行测试以找出正确的参数组合。)

  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);
        }
    }