如何使用 C# 互操作替换数字列表中的文本而不更改其在 MS Word 中的顺序

本文关键字:顺序 Word MS 文本 互操作 何使用 替换 数字 列表 | 更新日期: 2023-09-27 18:31:20

我正在替换ms word中数字列表中的文本。当它被替换时,号码列表不起作用。它显示为一个段落。我想在不更改数字列表顺序的情况下替换文本。请帮忙。提前感谢!

newDocument = application.Documents.Open(strFilepath, ref nullobj, ref nullobj, ref nullobj,
        ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj, ref nullobj);
foreach (Paragraph objParagraph in newDocument.Paragraphs)
{
   if (objParagraph.Range.Text.Contains("1st January 2015 to 31st December 2015"))
    {
        objParagraph.Range.Text = objParagraph.Range.Text.Replace("1st January 2015 to 31st December 2015", "1st January 2016 to 31st December 2016");
    }
}

如何使用 C# 互操作替换数字列表中的文本而不更改其在 MS Word 中的顺序

将内容分配给 Paragraph.Range.Text 时,将替换整个段落,包括末尾的段落标记("回车符" = ANSI 13 =/r 或 C# 中的/n)。段落标记不仅是"carridge return",它还带有段落级格式信息,其中包括编号。

尝试使用缩短一个字符的 Range 对象以排除段落标记:

Word.Range rngPara = objParagraph.Range;
//Note: You may need to pass the following params as objects, with ref
//instead of "in the clear", as below.
rngPara.MoveEnd(Word.WdUnit.wdCharacter, -1);
rngPara.Text = "abc";

我注意到您从 ASP.NET 应用程序中自动化MS Word。

Microsoft 目前不建议也不支持从任何无人参与、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)自动化Microsoft Office 应用程序,因为在此环境中运行 Office 时 Office 可能会表现出不稳定的行为和/或死锁。

如果要生成在服务器端上下文中运行的解决方案,则应尝试使用已安全执行无人参与的组件。或者,您应该尝试找到至少允许部分代码在客户端运行的替代方法。如果使用服务器端解决方案中的 Office 应用程序,则该应用程序将缺少成功运行所需的许多功能。此外,您将承担整体解决方案稳定性的风险。有关详细信息,请参阅 Office 服务器端自动化的注意事项一文。

请考虑使用为

服务器端执行设计的任何第三方组件,或者仅使用Open XML SDK。有关详细信息,请参阅欢迎使用 Open XML SDK 2.5 for Office。