使用C#在Word文档中创建删除线

时间:2018-06-25 22:55:03

标签: c# ms-word

我正在尝试创建Word文档,但是某些单词之间的文本应被划掉。我尝试在线寻找解决方案,但唯一能找到的解决方案是:

Set myRange = document.Range(Start:= document.Words(1).Start, _End:= document.Words(3).End)
myRange.Font.StrikeThrough = True

从这里https://msdn.microsoft.com/en-us/vba/word-vba/articles/font-strikethrough-property-word开始使用VBA。不幸的是C#没有任何东西。

有人知道在将所有文本保存到Word文档之前如何在其上添加删除线吗?

我的参考代码:

//input is a StringBuilder received by method  
 try {
            //Create an instance for word app
            Microsoft.Office.Interop.Word.Application winword = new Microsoft.Office.Interop.Word.Application();

            //Set animation status for word application
            winword.ShowAnimation = false;

            //Set status for word application is to be visible or not.
            winword.Visible = false;

            //Create a missing variable for missing value
            object missing = System.Reflection.Missing.Value;

            //Create a new document
            Microsoft.Office.Interop.Word.Document document = winword.Documents.Add(ref missing, ref missing, ref missing, ref missing);


            //adding text to document
            document.Content.SetRange(0, 0);
            document.Content.Text = input.ToString();


            //Save the document
            object filename = @"C:\Users\TempUser\Desktop\temp1.docx";
            document.SaveAs2(ref filename);
            document.Close(ref missing, ref missing, ref missing);
            document = null;
            winword.Quit(ref missing, ref missing, ref missing);
            winword = null;
            Console.WriteLine("Document created successfully!");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }

1 个答案:

答案 0 :(得分:0)

我已从您的代码中提取了相关部分,以使其更容易理解。

我对该示例的假设是,文本应插入文档的末尾,并设置为“删除线”。注意我如何声明一个Word.Range对象,并将文档的主体分配给它。为了了解其工作原理,可将范围想像为选择,但可以有多个范围,并且在文档中不可见。

下一行将范围“折叠”到其端点-就像按向右箭头一样。如果您没有折叠范围,则分配给它的文本将取代文档中的内容(例如,将选择内容过分键入)。然后将文本分配给Range并应用删除线。

请注意,在旧的Word Basic中,“ true”和“ false”不是用于设置字体修饰的概念。 Word的对象模型仍然使用这些旧的Word Basic命令。在幕后,他们仍然使用-1表示true,使用0表示false(有时使用1表示其他)。为了方便起见,VB语言可以使用已添加到对象模型中的“伪布尔”设置(true / false),但C#不会“看到”它们,因此您需要-1表示true。

    //adding text to document
    object oCollapseEnd = Word.WdCollapseDirection.wdCollapseEnd;
    Word.Range rng = document.Content;
    rng.Collapse(ref oCollapseEnd);
    rng.Text = input.ToString();
    rng.Font.Strikethrough = -1;  // 0 for false