c#替换word内容不改变word格式

  • 字体大小、颜色不变,插入的线条,页面不变。
  • 替换的结果保存到新建word文件内,不改变原有word文件。

该回答引用ChatGPT
代码如下,如果运行报错,或者不懂的可以回复我

using System;
using System.IO;
using Microsoft.Office.Interop.Word;

namespace WordReplace
{
    class Program
    {
        static void Main(string[] args)
        {
            string inputFileName = @"C:\input.docx";
            string outputFileName = @"C:\output.docx";
            string searchText = "替换文本"; // 要替换的文本
            string lineText = "插入线条"; // 插入的带有线条的文本

            // 创建 Word 应用程序对象
            Application app = new Application();

            // 打开文档
            Document doc = app.Documents.Open(inputFileName);

            // 遍历文档中的所有段落
            foreach (Paragraph para in doc.Paragraphs)
            {
                // 在段落中查找要替换的文本
                int found = para.Range.Text.IndexOf(searchText);
                while (found >= 0)
                {
                    // 获取要替换文本的位置
                    Range range = para.Range;
                    range.Start = found + para.Range.Start;
                    range.End = range.Start + searchText.Length;

                    // 插入带有线条的文本
                    range.Text = lineText;

                    // 格式化新文本
                    range.Font.Size = para.Range.Font.Size;
                    range.Font.Color = para.Range.Font.Color;
                    range.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;
                    range.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleSingle;

                    // 继续查找下一个要替换的文本
                    found = para.Range.Text.IndexOf(searchText, found + 1);
                }
            }

            // 保存文档为新文件
            doc.SaveAs2(outputFileName);

            // 关闭文档和 Word 应用程序对象
            doc.Close();
            app.Quit();
        }
    }
}


可以用Aspose.Word 这个操作word文档,我这边有详细的文档。您这边可以参考。一共五篇文章。
https://caozhen.blog.csdn.net/article/details/78038519?spm=1001.2014.3001.5502

这个是我自己以前写的代码,没有参考GPT,可以使用Microsoft Office Interop库来操作Word文件,并在代码中执行替换文本并保存到新文件中。以下是一个C#示例,演示如何使用Microsoft Office Interop库实现替换Word内容并保持原有格式:

using System;
using System.IO;
using Microsoft.Office.Interop.Word;

namespace WordReplacementExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // Path to the original Word document
            string inputFilePath = "path/to/original/document.docx";

            // Path to the new Word document to be created
            string outputFilePath = "path/to/new/document.docx";

            // The text to be replaced
            string searchText = "Old Text";

            // The new text to be inserted
            string replaceText = "New Text";

            // Create an instance of Word Application
            Application app = new Application();

            // Make the Word Application visible (for testing purposes)
            app.Visible = true;

            // Open the original Word document
            Document doc = app.Documents.Open(inputFilePath);

            // Find and replace the text
            object findText = searchText;
            object replaceWith = replaceText;
            object matchCase = true;
            object matchWholeWord = true;
            object matchWildCards = false;
            object matchSoundsLike = false;
            object matchAllWordForms = false;
            object forward = true;
            object wrap = WdFindWrap.wdFindContinue;
            object format = false;
            object replace = WdReplace.wdReplaceAll;

            doc.Content.Find.Execute(ref findText, ref matchCase, ref matchWholeWord, ref matchWildCards,
                ref matchSoundsLike, ref matchAllWordForms, ref forward, ref wrap, ref format, ref replaceWith, 
                ref replace);

            // Save the modified document to the new file
            doc.SaveAs(outputFilePath);

            // Close the original and modified documents
            doc.Close();
            app.Quit();

            // Release the COM objects
            System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
        }
    }
}

此示例打开指定路径的原始Word文档,使用指定的搜索文本查找并替换文本,然后将修改后的文档保存到新文件中。保存到新文件时,使用了Word默认设置,因此格式不会改变。

请注意,这需要在计算机上安装Microsoft Office应用程序才能工作,因为它使用了Office Interop库。
如果对您有帮助,请给与采纳,谢谢

题主,这个问题我来替你解决,若有帮助,还望采纳,点击回答右侧采纳即可。

示例代码如下:

        /// <summary>
        /// 替换所有符合的text
        /// </summary>
        /// <param name="doc"></param>
        /// <param name="text"></param>
        /// <param name="replaceText"></param>
        public static void ReplaceAll(Word.Document doc, string text, string replaceText, Logger log)
        {
            //story ranges 里面保存了不同类型的story range, 每个story range可以通过NextStoryRange来获取同一类型下所有的story range。
            foreach (Word.Range storyRange in doc.StoryRanges)
            {
                Word.Range range = storyRange;
                while (range != null)
                {
                    ReplaceAllText(range, text, replaceText, log);
                    range = range.NextStoryRange;
                }
            }
        }
 
 
        private static void ReplaceAllText(Word.Range range, string text, string replaceText, Logger log)
        {
            Word.Find find = range.Find;
            find.ClearFormatting();
            find.Replacement.ClearFormatting();
            find.Text = text;
            find.Replacement.Text = replaceText;
            find.Forward = true;
            find.Wrap = Word.WdFindWrap.wdFindContinue;
            find.Format = false;
            find.MatchCase = true;
            find.MatchWholeWord = false;
            find.MatchWildcards = false;
            find.MatchSoundsLike = false;
            find.MatchAllWordForms = false;
            try
            {
                log.WriteLine($"替换所有【{text}】->【{replaceText}】!");
                find.Execute(find.Text, find.MatchCase, find.MatchWholeWord, find.MatchWildcards, find.MatchSoundsLike, find.MatchAllWordForms,
                    find.Forward, find.Wrap, find.Format, find.Replacement.Text, Word.WdReplace.wdReplaceAll, false, false, false, false);
            }
            catch (Exception ex)
            {
                log.WriteException(ex, "ReplaceAll");
            }
 
        }

下面是几个问题的解决方案。

问题 1:C#替换word内容不改变word格式
要替换 Word 文档中的内容,同时保留其格式,您可以使用 Microsoft.Office.Interop.Word 库和 C# 语言来实现。以下是一些步骤,您可以使用它们来解决这个问题:

首先,您需要添加对 Microsoft.Office.Interop.Word 库的引用。为此,请打开您的 Visual Studio 项目,并在“解决方案资源管理器”中右键单击项目,然后选择“添加”->“引用”->“COM”选项卡,找到“Microsoft Word XX.X 对象库”并选中它,然后单击“确定”按钮。

接下来,您需要编写代码来打开您要替换的 Word 文档。以下是一个示例代码:

using Microsoft.Office.Interop.Word;

// 打开 Word 文档
Application word = new Application();
Document doc = word.Documents.Open(@"C:\Your\Document\Path.docx");
然后,您可以使用以下代码行将要替换的文本替换为新文本:
csharp
Copy code
doc.Content.Find.Execute(FindText: "要替换的文本", ReplaceWith: "新文本", MatchCase: false, MatchWholeWord: true);
在这里,FindText 参数是要替换的文本,ReplaceWith 参数是要替换为的新文本,MatchCase 参数指定是否匹配大小写,MatchWholeWord 参数指定是否仅匹配完整单词。

最后,您需要保存修改后的 Word 文档。以下是一个示例代码:
doc.SaveAs2(@"C:\Your\New\Document\Path.docx");
doc.Close();
word.Quit();
在这里,SaveAs2 方法用于将修改后的 Word 文档保存到新路径中,Close 方法用于关闭打开的文档,Quit 方法用于退出 Word 应用程序。

通过执行这些步骤,您可以使用 C# 编写代码来替换 Word 文档中的内容,同时保留其格式。

问题 2:字体大小、颜色不变,插入的线条,页面不变。替换的结果保存到新建word文件内,不改变原有word文件
如果您想要在替换 Word 文档中的内容时保留字体大小、颜色、插入的线条和页面布局等格式,同时将替换的结果保存到新建的 Word 文档中,而不改变原始 Word 文档,则可以使用 Microsoft.Office.Interop.Word 库和 C# 语言来实现。以下是一些步骤,您可以使用它们来解决这个问题:

首先,您需要添加对 Microsoft.Office.Interop.Word 库的引用。请按照上一个问题中的步骤添加引用。
接下来,您需要编写代码来打开要替换的 Word 文档,并将其内容复制到新的 Word 文档中。以下是一个示例代码:
using Microsoft.Office.Interop.Word;

// 打开要替换的 Word 文档
Application word = new Application();
Document oldDoc = word.Documents.Open(@"C:\Your\Old\Document\Path.docx");

// 创建新的 Word 文档
Document newDoc = word.Documents.Add();

// 复制要替换的 Word 文档内容到新的 Word 文档中
oldDoc.Content.Copy();
newDoc.Content.PasteAndFormat(WdRecoveryType.wdFormatOriginalFormatting);

// 关闭要替换的 Word 文档
oldDoc.Close(false);
在这里,Open 方法用于打开要替换的 Word 文档,Add 方法用于创建新的 Word 文档,Copy 方法用于将要替换的 Word 文档内容复制到剪贴板中,PasteAndFormat 方法用于将剪贴板中的内容粘贴到新的 Word 文档中并保留原始格式,Close 方法用于关闭要替换的 Word 文档。

然后,您可以使用以下代码行将要替换的文本替换为新文本:
newDoc.Content.Find.Execute(FindText: "要替换的文本", ReplaceWith: "新文本", MatchCase: false, MatchWholeWord: true);

在这里,FindText 参数是要替换的文本,ReplaceWith 参数是要替换为的新文本,MatchCase 参数指定是否匹配大小写,MatchWholeWord 参数指定是否仅匹配完整单词。

最后,您需要保存修改后的新 Word 文档。以下是一个示例代码:
newDoc.SaveAs2(@"C:\Your\New\Document\Path.docx");
newDoc.Close();
word.Quit();
在这里,SaveAs2 方法用于将修改后的 Word 文档保存到新路径中,Close 方法用于关闭新的 Word 文档,Quit 方法用于退出 Word 应用程序。
通过执行这些步骤,您可以使用 C# 编写代码来替换 Word 文档中的内容,同时保留字体大小、颜色、插入的线条和页面布局等格式,将替换的结果保存到新建的 Word 文档中,而不改变原始 Word 文档。

https://www.cnblogs.com/kiba/p/15309344.html
参考这篇文章,这是我以前写的,里面有详细用法,和demo代码

在下述代码中,您可以通过修改 oldText 和 newText 变量的值来指定要替换的文本内容和替换后的内容。同时,您需要修改 filePath 变量的值,来指定要替换的 Word 文件的路径。
这段代码使用了 Microsoft Office Interop 库,因此需要在项目中引用该库。在 Visual Studio 中,您可以右键点击项目名称,选择“添加” > “引用”,然后在弹出的对话框中找到并选中“Microsoft.Office.Interop.Word”库。如果该库未在列表中,您可以在“浏览”选项卡中找到并选择“Microsoft.Office.Interop.Word.dll”文件,然后点击“确定”按钮。

using System;
using System.IO;
using Microsoft.Office.Interop.Word;

namespace ReplaceWordContent
{
    class Program
    {
        static void Main(string[] args)
        {
            // 配置要替换的文本内容
            string oldText = "Hello, World!";
            string newText = "Hello, C#!";

            // 配置 Word 文件路径
            string filePath = "C:\\Users\\User\\Documents\\example.docx";

            // 初始化 Word 应用程序
            Application word = new Application();

            // 打开 Word 文档
            Document doc = word.Documents.Open(filePath);

            // 循环处理文档中的所有段落
            foreach (Paragraph para in doc.Paragraphs)
            {
                // 获取段落中的所有运行对象
                foreach (Range range in para.Range.StoryRanges)
                {
                    // 判断运行对象中是否包含要替换的文本内容
                    if (range.Text.Contains(oldText))
                    {
                        // 替换文本内容,并保留原有格式
                        range.Find.Execute(oldText, false, true);
                        range.Text = newText;
                    }
                }
            }

            // 关闭并保存 Word 文档
            doc.Save();
            doc.Close();

            // 退出 Word 应用程序
            word.Quit();
        }
    }
}

https://blog.csdn.net/aa2528877987/article/details/128739011:愚公大佬的文章,像前端一样用{{}}模板语法就可以直接替换word里面变量和循环,主要是性能超高。

c#的话 使用微软的库或者NPOI,个人更推荐后者,网上代码很多

您可以使用Microsoft.Office.Interop.Word库来实现在C#中替换Word内容但不改变格式的需求。下面是一个示例代码,说明了如何在C#中使用Microsoft.Office.Interop.Word库实现替换Word内容的需求

using Microsoft.Office.Interop.Word;

// 创建一个Word应用程序对象
Application wordApp = new Application();
wordApp.Visible = false;

// 打开需要处理的Word文件
Document wordDoc = wordApp.Documents.Open("需要处理的Word文件的路径");

// 执行替换操作,将“需要替换的文本”替换为“新的文本”
object replaceAll = WdReplace.wdReplaceAll;
wordDoc.Content.Find.Execute("需要替换的文本", false, true, false, false, false, true, 1, false, "新的文本", replaceAll);

// 将替换后的内容另存为新文件
Document newDoc = wordApp.Documents.Add();
newDoc.Content.FormattedText = wordDoc.Content.FormattedText;
newDoc.SaveAs("新文件的路径");

// 关闭所有Word文档和应用程序
newDoc.Close();
wordDoc.Close();
wordApp.Quit();

上述代码中,使用了Word应用程序对象和Document对象来打开需要处理的Word文件,并使用Content.Find.Execute方法来执行替换操作。在将替换后的内容保存到新文件时,我们使用了Add方法创建了一个新的Document对象,并将替换后的内容赋值给了新文档的FormattedText属性。最后,关闭所有Word文档和应用程序对象。

需要注意的是,该代码只能替换文本内容,不能替换插入的线条等其他内容。如果需要替换其他类型的内容,可能需要更加复杂的代码实现。

你好!很高兴为你服务!接下来教你怎么去操作,

使用Microsoft.Office.Interop.Word组件可以使用C#代码实现word文件内容的替换,不改变原有的样式和格式。
步骤:

  1. 使用Microsoft.Office.Interop.Word组件来实例化一个Word应用程序对象;
  2. 加载要替换内容的word文件;
  3. 遍历word文件内容,搜索需要替换的内容;
  4. 替换内容,并保存到新建word文件;
  5. 释放Word应用程序对象;
  6. 退出word应用程序。

以上就是所以的答案,希望可以帮您;谢谢!祝你生活愉快!!!

参考链接https://cloud.tencent.com/developer/article/1882938 希望能帮到你

该回答引用ChatGPT 跟自己的

您可以使用Microsoft Office Interop Word组件来实现替换word内容不改变word格式的功能。您可以使用Find和Replace方法来查找和替换word文档中的内容,具体代码如下:
object missing = System.Reflection.Missing.Value;
object what = Word.WdGoToItem.wdGoToLine;
object which = Word.WdGoToDirection.wdGoToFirst;
object count = 1;
object replace = Word.WdReplace.wdReplaceAll;
object findText = "oldText";
object replaceText = "newText";
wordDoc.Selection.Find.Execute(ref findText, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref replaceText, ref replace, ref missing, ref missing, ref missing, ref missing);

方法1:
使用Microsoft.Office.Interop.Word程序集(Interop)实现,调用Replace方法,该方法具有参数,第一个参数是搜索字符串,第二个参数是代替字符串,第三个参数是表示是否区分大小写的标志,默认值为false(不区分大小写),最后一个参数表示替换多少次,为-1表示替换所有,其他值表示具体的次数。可例如:
document.Replace("word","word1",false,-1,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss,ref miss);
方法2:
使用Aspose.Words组件中的Replace,实现替换文档中指定字符,其中参数字符串为要替换文字,参数ReplacementStrings为替换文字,可例如:
doc.Range.Replace("word","word1",false,false);


using Microsoft.Office.Interop.Word;

...

// 打开 Word 文档
Application wordApp = new Application();
Document doc = wordApp.Documents.Open("C:\\example.docx");

// 替换文本
string searchText = "替换前的文本";
string replaceText = "替换后的文本";
foreach (Range range in doc.StoryRanges)
{
    Find find = range.Find;
    find.Text = searchText;
    find.Replacement.Text = replaceText;
    find.MatchWholeWord = true;
    find.MatchCase = false;
    find.Execute(Replace: WdReplace.wdReplaceAll);
}

// 关闭 Word 文档
doc.Close();
wordApp.Quit();

上述代码中,我们首先打开 Word 文档,然后使用 Find 对象在文档中查找要替换的文本,将其替换为新文本,最后关闭 Word 文档。由于我们设置了 MatchWholeWord 属性为 true,因此只会替换整个单词,而不会替换单词的一部分。此外,由于我们使用了 foreach 循环遍历了整个文档,因此可以处理多个 StoryRanges,包括主文档和所有节的文本。

该回答引用GPTᴼᴾᴱᴺᴬᴵ

你可以使用 Microsoft.Office.Interop.Word 命名空间中的类来实现替换 Word 内容,同时保留原有格式。下面是一段示例代码,用于实现从模板中复制样式并替换文本,最后将结果保存到新的 Word 文件中。

using Microsoft.Office.Interop.Word;

// 读取模板文件
var wordApp = new Application();
var doc = wordApp.Documents.Open("模板文件路径");
doc.Activate();

// 复制样式
var range = doc.Range();
var fontName = range.Font.Name;
var fontSize = range.Font.Size;
var fontColor = range.Font.Color;
var lineHeight = range.ParagraphFormat.LineSpacing;
var lineIndent = range.ParagraphFormat.LeftIndent;
var lineSpacingRule = range.ParagraphFormat.LineSpacingRule;

// 替换文本
range.Find.Execute(FindText: "要替换的文本", ReplaceWith: "替换后的文本", Replace: WdReplace.wdReplaceAll);

// 创建新的 Word 文件并保存替换后的内容
var newDoc = wordApp.Documents.Add();
newDoc.Content.Text = range.Text;
newDoc.SaveAs2("新 Word 文件路径");
newDoc.Close();

// 关闭应用程序
wordApp.Quit();

需要注意的是,这个示例代码只是演示了如何复制样式并替换文本,如果你需要保留其他的格式,比如插入的线条、页面设置等,可能需要在代码中添加额外的处理逻辑。同时,在实际使用中,你还需要进行一些异常处理,比如判断文件是否存在、是否能够正常打开等,以避免程序出错。