Word文档文本替换时长度不能超过255个字符,不能一次性替换,本方法通过循环替换,达到替换超过255字符的目的。

/// <summary>

/// 替换word中的文字
        /// </summary>
        /// <param name="filePath">文件的路径</param>
        /// <param name="datas">包含待替换字符串和替换字符串的集合</param>
        /// <returns>true 替换成功;false 替换失败</returns>
        public static bool WordReplace(string filePath, Dictionary<string, string> datas)
        {
            bool result = false;
            Microsoft.Office.Interop.Word._Application app = null;
            Microsoft.Office.Interop.Word._Document doc = null;

object nullobj = Type.Missing;
            object file = filePath;

try
            {
                app = new Microsoft.Office.Interop.Word.Application();//new Microsoft.Office.Interop.Word.ApplicationClass();

doc = app.Documents.Open(
                ref file, ref nullobj, ref nullobj,
                ref nullobj, ref nullobj, ref nullobj,
                ref nullobj, ref nullobj, ref nullobj,
                ref nullobj, ref nullobj, ref nullobj,
                ref nullobj, ref nullobj, ref nullobj, ref nullobj) as Microsoft.Office.Interop.Word._Document;

//app.Selection.ParagraphFormat.CharacterUnitFirstLineIndent = 2;//首行缩进的长度

object objReplace = Microsoft.Office.Interop.Word.WdReplace.wdReplaceAll;

foreach (var item in datas)
                {
                    app.Selection.Find.ClearFormatting();
                    app.Selection.Find.Replacement.ClearFormatting();
                    string oldStr = item.Key;//需要被替换的文本
                    string newStr = item.Value; //替换文本

if (newStr == null)
                    {
                        newStr = "";
                    }
                    int newStrLength = newStr.Length;
                    if (newStrLength <= 255) // 长度未超过255时,直接替换
                    {
                        app.Selection.Find.Text = oldStr;
                        app.Selection.Find.Replacement.Text = newStr;

app.Selection.Find.Execute(ref nullobj, ref nullobj, ref nullobj,
                                                   ref nullobj, ref nullobj, ref nullobj,
                                                   ref nullobj, ref nullobj, ref nullobj,
                                                   ref nullobj, ref objReplace, ref nullobj,
                                                   ref nullobj, ref nullobj, ref nullobj);
                        continue;
                    }

//word文本替换长度不能超过255
                    int hasSubLength = 0;
                    int itemLength = 255 - oldStr.Length;
                    while (true)
                    {
                        string itemStr = "";
                        int subLength = 0;
                        if (newStrLength - hasSubLength <=255)  // 剩余的内容不超过255,直接替换
                        {
                            app.Selection.Find.ClearFormatting();
                            app.Selection.Find.Replacement.ClearFormatting();

app.Selection.Find.Text = oldStr;
                            app.Selection.Find.Replacement.Text = newStr.Substring(hasSubLength, newStrLength - hasSubLength);

app.Selection.Find.Execute(ref nullobj, ref nullobj, ref nullobj,
                                                        ref nullobj, ref nullobj, ref nullobj,
                                                        ref nullobj, ref nullobj, ref nullobj,
                                                        ref nullobj, ref objReplace, ref nullobj,
                                                        ref nullobj, ref nullobj, ref nullobj);

break; // 结束循环
                        }

// 由于Word中换行为“^p”两个字符不能分割
                        // 如果分割位置将换行符分开了,则本次少替换一个字符
                        if (newStr.Substring(hasSubLength, itemLength).EndsWith("^") &&
                            newStr.Substring(hasSubLength, itemLength + 1).EndsWith("p"))
                        {
                            subLength = itemLength - 1;
                        }
                        else
                        {
                            subLength = itemLength;
                        }

itemStr = newStr.Substring(hasSubLength, subLength) + oldStr;

app.Selection.Find.ClearFormatting();
                        app.Selection.Find.Replacement.ClearFormatting();

app.Selection.Find.Text = oldStr;
                        app.Selection.Find.Replacement.Text = itemStr;

app.Selection.Find.Execute(ref nullobj, ref nullobj, ref nullobj,
                                                    ref nullobj, ref nullobj, ref nullobj,
                                                    ref nullobj, ref nullobj, ref nullobj,
                                                    ref nullobj, ref objReplace, ref nullobj,
                                                    ref nullobj, ref nullobj, ref nullobj);

hasSubLength += subLength;
                    }
                }

//保存
                doc.Save();

result = true;
            }
            catch
            {
                result = false;
            }
            finally
            {
                if (doc != null)
                {
                    doc.Close(ref nullobj, ref nullobj, ref nullobj);
                    doc = null;
                }
                if (app != null)
                {
                    app.Quit(ref nullobj, ref nullobj, ref nullobj);
                    app = null;
                }
                GC.Collect();
                GC.WaitForPendingFinalizers();
            }
            return result;

}

每次替换的长度为255减去待替换文本长度;

另外,Word中的换行符是“^p”,如果替换文本中有换行符,需要在循环替换时检查是否将该字符切割了,如果切割了,则少截取一个字符;

C#替换Word中的文本内容相关推荐

  1. python替换word中的文字内容

    摘要:这篇文章介绍了如何使用python[3.6版本]把pdf文件转换为word文档并替换word文档中的文字内容,这里替换的规则是中英转换或者其它自定义规则 pdf转换为word pdf文件由于很难 ...

  2. 使用docx4j根据书签自动替换word中的文本和图片,图片自适应大小

    此功能中的文本替换实现不难,但是图片替换和自适用费了很大劲,主要是要知道word文档的原理,实际是一个zip 的压缩包,里面包括图片信息和xml文件等等,主要就是看xml中的对应关系,大家可以试着把w ...

  3. java实现for文件删除_Java 添加、删除、替换、格式化Word中的文本的步骤详解(基于Spire.Cloud.SDK for Java)...

    Spire.Cloud.SDK for Java提供了TextRangesApi接口可通过addTextRange()添加文本.deleteTextRange()删除文本.updateTextRang ...

  4. Word控件Spire.Doc 【文本】教程(14) ;如何用图片替换Word中的文字

    在 Spire.Doc 的教程部分,我们介绍了"用 C# 中的表格替换 Word 中的文本"和"用 C# 中的文本替换 Word 中的图像"的简单方法.有时,我 ...

  5. java word替换图片_Java Word中的文本、图片替换功能

    Word中的替换功能以查找指定文本然后替换为新的文本,可单个替换或全部替换.以下将要介绍的内容,除常见的以文本替换文本外,还将介绍使用不同对象进行替换的方法,具体可包括: 1. 指定字符串内容替换文本 ...

  6. python 替换文本 通配符_python实现替换word中的关键文字(使用通配符)

    环境:Python3.6 本文主要是通过win32com操作word,对word中进行常用的操作.本文以替换为例,讲解一下如何使用Python在word中使用"通配符模式"(类似于 ...

  7. php 提取文字,如何使用PHP从word文档中提取文本内容?

    我想用PHP从word文档中提取文本内容. 我在Microsoft Word for Mac 2011中创建了一个新的单词文档. 编辑:也通过在Windows 7中的Microsoft Word中创建 ...

  8. C# 读取Word文档中的文本内容

    C# 读取Word文档中的文本内容 这篇文章将介绍如何使用C#和Free Spire.Doc组件读取Word文档中的文本内容.Free Spire.Doc提供了两种方法来读取Word文档中的内容,一种 ...

  9. Free Spire.Doc组件C# 读取Word文档中的文本内容

    C# 读取Word文档中的文本内容 这篇文章将介绍如何使用C#和Free Spire.Doc组件读取Word文档中的文本内容.Free Spire.Doc提供了两种方法来读取Word文档中的内容,一种 ...

  10. python查找并修改文件中的内容_如何使用Python搜索和替换文件中的文本?

    如何使用Python搜索和替换文件中的文本? 如何使用Python 3搜索和替换文件中的文本? 这是我的代码:import osimport sysimport fileinputprint (&qu ...

最新文章

  1. 游戏平台运维自动化扩展之故障自愈
  2. messagebox 全部使用_「一」Windows API 零门槛编程指南——MessageBox
  3. 过滤html标签的代码
  4. 河源电大有考计算机等级的吗,河源电大有什么专业自考也有?
  5. matlab循环读取变量,Matlab for 多个变量循环能不能这样啊 ,求教高手!!!!
  6. java merge_java – OptimisticLockException当使用JPA merge()
  7. 转: android apk 防止反编译技术(1~5连载)
  8. ubuntu 12.04 php升级,Ubuntu下如何升级到PHP7.4的方法步骤
  9. 9月29日云栖精选夜读:武装到“牙齿”!阿里云发布史上最强企业云安全架构 11层防护...
  10. 感谢大家对《软件性能测试与Loadrunner实战》的支持
  11. 32位64位Eclipse和jdk对应关系
  12. 安装PostgreSQL客户端
  13. 元学习入门必备:MAML(背景+论文解读+代码分析)
  14. 计算机系军训横幅,军训横幅标语有创意精选100句
  15. C++面向对象程序设计:银行储蓄管理系统
  16. 从PLC ,PAC ,到施耐德的自动化开放系统
  17. 现货黄金有什么需要注意的?
  18. 转载 Latex各种命令、符号、公式、数学符号、排版(非常详细)
  19. 身份证验证 80秒13亿数据校验
  20. 或再被“转手”,家乐福中国还能“攀”上哪座靠山?

热门文章

  1. REDHAT版本与支持的intel CPU型号
  2. 牛年交个朋友,重新认识一下云和恩墨!
  3. 聚合搜索V3.0泛解析泛目录站群源码 MIP自动推送 SEO功能SEO源码
  4. 关于Python的 求解答Bunch Pattern
  5. jxd android 4.1刷机包,金星JXD V3固件
  6. [AHK]新浪实时股票数据接口
  7. 自动驾驶软件开发人才现状_一文读懂自动驾驶研究现状
  8. PPT 插入无限循环滚动的图片
  9. drawableTop,button图片显示在文字上面,文字不显示的问题
  10. 海量数据荣获华为“中国政企数据存储优秀合作伙伴”金奖