精华内容
下载资源
问答
  • java操作word模板,动态替换标识内容

    热门讨论 2012-02-28 18:51:10
    在下载word模板.rtf过程中,将模板中约定的标识内容替换为需要的信息。省时省力很方便。
  • word:回车替换成空格

    千次阅读 2020-10-21 16:34:20
    ctrl+H 查找:^p 替换:(点击一下空格键)
    • ctrl+H
    • 查找:^p
    • 替换:(点击一下空格键)
    展开全文
  • word通配符,查找与替换

    千次阅读 2019-01-17 23:16:57
    word通配符,查找与替换 word通配符–使用实例 word通配符表 word查找栏代码&通配符一览表 word替换栏代码&通配符一览表 word通配符用法详解 word换行符 参考原文:...

    word通配符,查找与替换

    参考原文:https://github.com/gaheadus/daily_use/blob/master/tools_and_skills/word文档处理.md#word换行符

    word通配符–使用实例

    删除空白和空行
    删除空白:选中需要修改的文本或者ctrl+a选中所有文本,ctrl+h,替换,查找框填^w,替换框什么也不填,点击全部替换。
    删除空行:选中需要修改的文本或者ctrl+a选中所有文本,ctrl+h,替换,查找框填pp,替换框填^p,点击全部替换。
    空行的产生就是连续输入了两个回车,所以把两个回车替换成一个回车就可去除空行。因此,查找框填pp,替换框填^p。

    有些情况下使用“pp”替换^p不能删除空白行,为什么?
    pp是两个回车相连,中间不能包含任何字符,包括空格。不能删除空行的原因就是行前还有空格。
    修改一下, 查找框填"^13 {1,}13"(注意:第一个13的后面有一个空格),勾选使用通配符,替换框"^13",点击全部替换。
    同样,删除多行空行,查找框填"13{2,}13"或"^13{2,} {1,}13",替换框填"13"。
    注:勾选使用通配符时回车符是13,不是p。参考后续章节:通配符表。

    删除字符所在的行
    如下文本是从百度百科上复制粘贴的,粘贴了一些无用的字符,如"编辑",想把这两个字和这一行去掉,怎么办?

    原理
    编辑
    运用已经记住的东西,让它成为有一定可以回忆出来的顺序的东西。然后把要记的东西和它进行想象、联想连接,因

    ctrl+f打开查找->高级查找->替换,查找内容框填"编辑",替换为框什么也不填,点击"替换",结果如下:

    原理

    运用已经记住的东西,让它成为有一定可以回忆出来的顺序的东西。然后把要记的东西和它进行想象、联想连接,因

    可以看出,“编辑"这两个字删了,但是那一行没有删掉、留下空行,有没有办法把"编辑"这两个字删掉、同时把那一行删掉?有,查找内容框填"编辑^p”,替换为框什么也不填,点击"替换",结果如下:

    原理
    运用已经记住的东西,让它成为有一定可以回忆出来的顺序的东西。然后把要记的东西和它进行想象、联想连接,因

    以前对于这种纯文本处理,先将文本拷贝到notepad++,用notepad++处理完再拷贝回word,但是这样操作破坏了word原有的格式,字体、颜色、标题、图片等信息丢了,word通配符替换不会改变word原有格式。

    删除图片
    ctrl+h,如果查找框填”^g”,替换框什么也不填,全部替换,完成。
    如果图片单独占一行,删除图片后,希望将图片所在行也删掉,怎么办?
    原理和删除字符所在行一样,查找框写上回车符,查找框填”gp”,替换框什么也不填,全部替换。但是这样只能删除单独占一行的图片,而那些图片后面还有文字的图片没有删除。
    解决这个问题,可以分两步:1.删除图片,查找框填”g”,替换框什么也不填,全部替换;2.删除空行,查找框填”p^p”,替换框什么也不填,全部替换。

    使用通配符
    希望在单词char、chas、chat、chaw等后面加上ed。
    方法:勾选使用通配符,查找框填(cha[a-z]),替换框填\1ed,替换完之后变成chared、chased、chated、chawed。

    复制来的文本的处理
    从网页或者其他文档复制来的文本的处理。
    1.清除超链接文本高亮和下划线
    选中需要修改的文本或者ctrl+a选中所有文本,然后按ctrl+6或者ctrl+shift+f9,即可清除超链接文本高亮和下划线。
    2.删除空白格、空行
    删除空白:选中需要修改的文本或者ctrl+a选中所有文本,ctrl+h,替换,查找框填^w,替换框什么也不填,点击全部替换;
    删除空行:选中需要修改的文本或者ctrl+a选中所有文本,ctrl+h,替换,查找框填pp,替换框填^p,点击全部替换。
    返回目录

    word通配符表

    word查找栏代码&通配符一览表

    序号清除使用通配符复选框勾选使用通配符复选框
    特殊字符代码特殊字符代码or通配符
    1任意单个字符^?一个任意字符?
    2任意数字^#任意数字(单个)[0-9]
    3任意英文字母^$任意英文字母[a-zA-Z]
    4段落标记↵^p段落标记↵^13
    5手动换行符↓^l手动换行符↓^l or ^11
    6图形^g图形^g
    71/4长划线^+1/4长划线^q
    8长划线^j长划线^+
    9短划线^q短划线^=
    10制表符^t制表符^t
    11脱字号^脱字号^^
    12分栏符^v分栏符^n or ^14
    13分节符^b分节符/分页符^m
    14省略号^n省略号^i
    15全角省略号^i全角省略号^j
    16无宽非分隔符^z无宽非分隔符^z
    17无宽可选分隔符^x无宽可选分隔符^x
    18不间断空格^s不间断空格^s
    19不间断连字符^~不间断连字符^~
    20¶段落符号^%表达式( )
    21§分节符^单词结尾<
    22脚注标记^f or ^2单词开头>
    23可选连字符^-任意字符串
    (零或多个任意字符)
    *
    24空白区域^w指定范围外任意单个字符[!x-z]
    25手动分页符^m指定范围内任意单个字符[-]
    26尾注标记^e1个以上前一字符或表达式@
    27^dn 个前一字符或表达式{ n }
    28Unicode 字符^Unnnnn个以上前一字符或表达式{ n, }
    29全角空格^u8195n 到 m 个前一字符或表达式{ n,m }
    30半角空格^32 or ^u8194所有小写英文字母[a-z]
    31批注^a or ^5所有大写英文字母[A-Z]
    32所有西文字符[1-127]
    33所有中文汉字和中文标点[!1-127]
    34所有中文汉字(CJK统一字符)[一-龥] or [一-﨩]
    35所有中文标点[!一-龥1-127]
    36所有非数字字符[!0-9]

    备注:代码、通配符
    ①“勾选使用通配符复选框”的方法:ctrl+h,点击”更多”,会出现更多选项,点击”使用通配符”。
    “勾选使用通配符复选框”,符号?*!、[0-9] [a-zA-Z] {m,n} \1 \2、^ ^g ^13等称为通配符
    “不勾选使用通配符复选框”,符号pl等称为代码
    只有在“勾选使用通配符复选框”后,才能使用通配符。

    使用通配符和不使用通配符是不同的,例如,不使用通配符的时候换行符代号是p,但是使用通配符的时候换行符代号是13,此时p是无效的;但也有些符号的代号是一样的,如不使用通配符和使用通配符时图片的代号都是g。

    word通配符大概相当于正则表达式,但又和正则表达式不一样。如正则表达式中?*都是量词,表示前面的字符出现的次数,?表示0或1次、*表示0或多次,但是word通配符中?*确实就是通配符,?表示一个任意字符、*表示零或多个任意字符;然而,[0-9] [a-zA-Z] {m,n} \1 \2等又是正则表达式;还有word自己特色的^ ^g ^13等符号。
    所以,word通配符既有通配符的特点,又有正则表达式的特点,还有第三类^ ^g ^13等自有的特点。
    word通配符 = 通用通配符?、*、! (3个) + 部分正则表达式符号 + word特有符号^ ^g ^13等。
    混杂、混乱。多种特点混杂在一起,有点混乱。

    131127,后面的数值是对应字符的ASCII码值,13是回车符ASCII码值。
    word里回车换行没有区别吗?回车13,换行10。段落标记p大概相当于回车13。[概念:回车、换行、段落标记]

    ③在勾选使用通配符的时候,要查找已被定义为通配符的字符,该字符前键入反斜杠 \ 。查找?、*、(、)、[ 、] 等的代码分别是\?、\*、\(、\)、\[、\] 。但是查找必须使用而不是\
    在不勾选使用通配符的时候,?、*、(、)、[ 、]仍然代表字符自己,不需要转义。
    ⇒在勾选使用通配符的时候,\是转义字符,但从13等看是转义字符。这里说是脱字符,脱字符不就是转义字符吗?为啥直接用来转义特殊字符,而是用\。只能将^理解为特殊字符前缀,但不是转义字符,这和C语言等不一样。
    返回目录

    word替换栏代码&通配符一览表

    序号清除使用通配符复选框勾选使用通配符复选框
    特殊字符代码特殊字符代码or通配符
    0要查找的表达式 \n\
    1段落标记↵^p段落标记↵^p
    2手动换行符↓^l手动换行符↓^l
    3查找的内容^&查找的内容^&
    4剪贴板内容^c剪贴板内容^c
    5省略号^i省略号^i
    6全角省略号^j全角省略号^j
    7制表符^t制表符^t
    8长划线^+长划线^+
    91/4长划线( — )^q1/4长划线( — )^q
    10短划线( – )^=短划线( – )^=
    11脱字号^^脱字号^^
    12手动分页符^m or ^12手动分页符/分节符^m
    13可选连字符(_)^-可选连字符(_)^-
    14不间断连字符(-)^~不间断连字符(-)^~
    15不间断空格^s不间断空格^s
    16无宽非分隔符^z无宽非分隔符^z
    17无宽可选分隔符^x无宽可选分隔符^x
    18分栏符^n分栏符^n
    19§分节符^%§分节符^%
    20¶段落符号^v¶段落符号^v

    正则表达式反向引用分组的使用,例子,
    希望在单词char、chas、chat、chaw等后面加上ed。
    方法:勾选使用通配符,查找框填(cha[a-z]),替换框填\1ed,替换完之后变成chared、chased、chated、chawed。

    备注: 如果记不住,这些特殊格式符号可以在”查找替换框”中找到,ctrl+h打开替换框,点击”更多”,会出现更多选项,点击”特殊格式”,点击需要的特殊格式符号,这时会在”查找内容”中自动输入特殊格式符号的通配符,如”^p”。
    返回目录

    word通配符用法详解

    在勾选使用通配符的情况下,如下通配符才起作用。
    在勾选使用通配符的情况下,word的通配符和正则表达式差不多,但有区别。
    勾选使用通配符的方法:ctrl+h,点击”更多”,会出现更多选项,点击”使用通配符”。

    一、任意单个字符
    “?“可以代表任意单个字符,输入几个”?“就代表几个未知字符。如:
    输入”?国"就可以找到诸如"中国”、“美国”、“英国"等字符;
    输入”???国"就可以找到"孟加拉国"等字符。
    二、任意多个字符
    “*“可以代表任意多个字符。如:输入”*国"就可以找到"中国”、“美国”、“孟加拉国"等字符。
    三、指定字符之一
    “[]“框内的字符可以是指定要查找的字符之一,如:
    输入”[中美]国"就可以找到"中国"和"美国”。又如:
    输入"th[iu]g"就可以查找到"thigh"和"thug”。
    输入"[学硕博]士"查找到的将会是"学士"、“硕士"和"博士”。
    输入"[高矮]个"查找的将会是"高个"和"矮个"。
    输入"[大中小]学"查找到的将会是"大学"、“中学"和"小学”,但不会查找"求学"、“开学"等。
    四、指定范围内的任意单个字符
    “[x-x]“可以指定某一范围内的任意单个字符,如:
    输入”[a-e]ay"就可以找到"bay”、“day"等字符,要注意的是指定范围内的字符必须用升序。又如:
    输入”[a-c]mend"就可以找到"amend”、“bmend”、“cmend"等字符。
    五、排除指定范围内的任意单个字符
    “[!x-x]“可以用来排除指定范围内的任意单个字符,如:
    输入”[!c-f]ay"就可以找到"bay”、“gay”、“lay"等字符,但不会找到"cay”、“day"等字符。要注意的是排除范围必须用升序。又如:
    输入"m[!a]st"就可以找到"mist"和"most"而不是"mast”。
    输入”[!a]n"查到的将会是除an以外的所有可能组合如:in、on等。
    输入"[!a-c]“就可以找到"good”、“see”、“these"等字符,而所有包含字母a、b、c之类的字符都不会在查找结果中出现。
    六、指定前一字符的个数
    “{n}“可以用来指定要查找的字符中包含前一字符的个数,如:
    输入"cho{1}se"表示包含1个前一字符"o”,可以找到"chose”,输入"cho{2}se"就是说包含2个前一字符"o”,可以找到"choose"。又如:
    输入"lit{1}le"表示包含1个前一字符"t",可以找到"litle",输入"lit{2}le"就是说包含2个前一字符"t",可以找到"little"。
    输入"te{2}n"表示查找"teen"而不会查找"ten"。
    输入"of{2}ice"查找到的将会是"office"。
    七、指定前一字符数范围
    “{x,x}“可以用来指定要查找字符中前一字符数范围,如:
    输入"cho{1,2}”,则表示包含前一字符"o"的数目范围是1-2个,则可以找到"chose”、“choose"等。
    八、一个以上的前一字符
    “@“可以用来指定要查找字符中包含一个以上的前一字符,如:
    输入"cho@se”,就可以找到"chose”、“choose"等字符。
    九、指定起始字符串
    “<“可以用来指定要查找字符中的起始字符串,如:
    输入”<ag"表示要查找的字符的起始字符为"ag”,可以找到"ago”、“agree”、“again"等字符。
    输入”<te"就可能查到"ten”、“tea"等字符。
    十、指定结尾字符串
    “>“可以用来指定要查找字符中的结尾字符串,如:
    输入"er>“表示要查找的字符的结尾字符为"er”,可以找到"ver”、“her”、“lover"等。
    输入"en>“表示要查找以"en"结尾的所有目标对象,可能会找到"ten”、“pen”、“men"等。
    输入"up>“表示要查找以"up"结尾的所有目标对象,可能会找到"setup”、“cup"等。
    十一、表达式查找
    “()“尤其用于多个关键词的组合查找。
    键入”(America)(China)”,再在"替换为"中输入”\2\1”,表示当Word找到"AmericaChina"时,把它替换为"ChinaAmerica”。
    输入”<(江山)*(多娇)>“表示查找的是所有以"江山"开头并且以"多娇"结尾的字符串。
    另外为了更精确的查找,你还可以把以上的通配符联合起来使用,如:
    输入”<(ag)(er)>“则表示查找所有以"ag"开头并且以"er"结尾的单词,注意这时需要用括号来区分开不同的查找规则。
    最后还要注意的是,如果要查找已经被定义为通配符的字符,如”*”、"?“等,则必须在该字符前面加上反斜杠”",如:输入"\*“则表示查找字符”*"。
    备注: word通配符,像shell通配符、又像shell正则表达式,同时具有通配符和正则表达式的特点,word特有吧。
    返回目录

    word换行符

    ^p是段落标记的代码。按enter输入,回车符,如"代码↵"代码后面的符号。
    ^l是手动换行符的代码。按shift+enter输入,软回车符号,如"代码↓"代码后面的符号。
    从网页上复制一些文章到word中时,往往会带有好多向下箭头的符号,这就是软回车符号(word中软回车是同时按住shift+enter得来的),这些软回车占用了word很多的空间,那么如何才能删除这些软回车符号呢?当然可以手动的一个一个删,但实在太麻烦了,可以采取 批量 删除的方法。
    点击菜单栏中的"编辑"→"替换"(ctrl+h) ,在"查找内容"里面输入^l,“替换为"里面不输入任何字符,然后点"全部替换”,就可以删除整个文档里面的软回车了。
    上面的方法只是把所有的软回车都给删了,可是必要的段落换行还是需要的,所以下面介绍把软回车替换成硬回车。点击菜单栏中的"编辑"→"替换",在"查找内容"里面输入^l, “替换为"里面输入^p,然后点"全部替换” 就ok了。计算机基础知识其实知道了软回车是l,硬回车是p,那么就可以灵活运用了。比如经常会遇到一篇要打印的文档很长,中间有很多回车,如果遇到段与段之间有两个回车,就可以利用替换成一个回车。这样就节省了很多空间。

    在用替换的办法删除空行时要注意两个问题:
    1.分清文件中用的是手动换行符(“Shift+回车”),还是段落标记。“pp”替换成“p”并不能替换所有的空行。如果文件中用的是手动换行符,那么就要用“ll”替换成“l”(这里用的不是1,而是L字母的小写,也可以直接用替换对话框里的“特殊字符”,里面有“有手动换行符”),空行才能去除。
    有时遇到这种情况,可能是用手动换行符换行的。可能你也用了“ll”替换成“l”的办法,用“全部替换”时依然提示“Word已完成对文档的搜索并已完成0处替换”这又是为什么呢?为了搞清楚到底问题出在哪里,试试在Word文档中分别用手动换行符和回车符制造一些空行,用“pp”替换成“p”和“ll”替换成“^l”来验证,结果能顺利完成空行的删除。为什么自己输入的可以替换,网上下载的却不能呢?难道这里面还有“机关”?
    2.注意空格的存在。无奈之下,只得试用手工删除了。在删除的过程中,会发现它的秘密:原来每个空行的换行符前还有一个空格。空格成了折腾人的“罪魁祸首”!再用“ll”(注意两个换行之间有一个空格)替换成“l”,替换终于有成果了。单击了几次全部替换,又更改了几次“查找内容”,比如把“pl”替换成“l”。页面中再也没有空行了。看来用替换的方法来删除空行时,要灵活对待查找的内容。
    返回目录

    展开全文
  • 在平常工作中,生成word的方式主要是C#读取html的模板文件处理之后保存为.doc...如果我们能读取一个word模板,把模板里定义的固定字符串如{标记1}替换为想要的文字,然后生成新的word。这样生成的Word非常整洁。 ...

    在平常工作中,生成word的方式主要是C#读取html的模板文件处理之后保存为.doc文件,这样的好处是方便,快捷,能满足大部分的需求。不过有些特殊的需求并不能满足,如要生成的Word为一个表格,只是一部分字符串需要变化,用上面的方法生成Word表格容易变形。如果我们能读取一个word模板,把模板里定义的固定字符串如{标记1}替换为想要的文字,然后生成新的word。这样生成的Word非常整洁。

         查找了网上许多方法,虽然都是调用office的接口,并没有一个好的方案。通过自己的实验,比较,使用Microsoft.Office.Interop.Word.dll调用相应的查找全部命令,将相应的标签替换为相应的字符串比较好用。下面是实现方法。
     

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Reflection;
    using Microsoft.Office.Interop.Word;
    
    namespace JzyyTiJian.WinMain
    {
      public  class WordFile
        {
           private object _outputname = "";
            private object _inputname = "";
    
            // 输出文件名,将word另存为的文件名,绝对地址
            public object OutPutName
            {
                get { return _outputname; }
                set { _outputname = value; }
            }
    
            //输入文件名,Word的模板文件(还有相应的标记{biaoji1}或者任意字符串).
            public object InPutName
            {
                get { return _inputname; }
                set { _inputname = value; }
            }
    
            public WordFile() { }
    
            public WordFile(object inputname,object outputname)
            {
                this._inputname = inputname;
                this._outputname = outputname;
            }
    
            private Dictionary _put = new Dictionary();
    
           //param key标记{biaoji1}或者要替换的任意字符串
           // param value替换后的字符串
         public void Put(string key, string value)
            {
                _put.Add(key, value);
            }
    
            #region 内部变量
            private object missValue = Missing.Value;
            private object trueValue = true;
            private object falseValue = false;
            private object oStory=WdUnits.wdStory;
            private object oMove=WdMovementType.wdMove;
            private ApplicationClass app = null;
            private Document doc=null;
            #endregion
    
            //打开文档。
            private void openDocument()
            {
                app = new ApplicationClass();
                app.Visible = false;
                app.DisplayAlerts = WdAlertLevel.wdAlertsNone;
                doc = app.Documents.Open(
                        ref _inputname,
                        ref missValue,
                        ref trueValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue,
                        ref missValue
                        );
            }
    
            // 文档另存为新Word文件。
            private void saveAsDocument()
            {
                doc.SaveAs(
                       ref _outputname,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue,
                       ref missValue
                      );
            }
    
            // 将相应的标签替换然后保存
            public void Save()
            {
                if (string.IsNullOrEmpty(_inputname.ToString()))
                {
                    throw new Exception("InPutName 不能为空,请输入模板文件的地址。InPutName为模板文件的绝对地址");
                }
                if (string.IsNullOrEmpty(_outputname.ToString()))
                {
                    throw new Exception("OutPutName 不能为空,请输入保存模板文件的地址,OutPutName为模板文件的绝对地址");
                }
    
                try
                {
                    //打开Word文档。
                    this.openDocument();
                    app.Selection.HomeKey(ref oStory,ref oMove);
                    Find find = app.Selection.Find;
                    find.ClearFormatting();
                    find.Replacement.ClearFormatting();
                    foreach (string key in _put.Keys)
                    {
                        find.Text = key;
                        find.Replacement.Text = _put[key];
                        this.ExecuteReplace(find);
                    }
                    //将文档另存为新文档。
                    this.saveAsDocument();
                }
                catch (Exception ex)
                {
                    throw new Exception("错误:" + ex.Message);
                }
                finally
                {
                    app.Quit(ref missValue, ref missValue, ref missValue);
                }
            }
    
            private bool ExecuteReplace(Find find)
            {
                return this.ExecuteReplace(find, WdReplace.wdReplaceAll);
            }
    
            private bool ExecuteReplace(Find find, object objReplaceOption)
            {
                 return find.Execute(
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref objReplaceOption,
                    ref missValue,
                    ref missValue,
                    ref missValue,
                    ref missValue
                    );
            }
        }
    }
    
    string inputname = Server.MapPath("1.doc");
    string outputname = Server.MapPath("3.doc");
    Word word = new Word(inputname, outputname);
    word.Put("{documentVersion}", "2.6");
    word.Put("{ProjectName}", "Renfb.Word");
    word.Put("{author}", "Renfb");
    word.Put("{CreateRiqi}", "2011.07.04");
    word.Put("{Lianxiren}", "任锋宾");
    word.Put("{num}", "1");
    word.Save();

    调用前记得先引用程序集Renfb.Word.dll和Microsoft.Office.Interop.Word.dll,在使用的页面上记得添加using Renfb.Word;这篇文章只是起到了抛砖引玉的作用。希望能给大家一些启发。
     

    展开全文
  • Java-POI替换Word模板文档中的变量,生成Word文档

    万次阅读 热门讨论 2017-10-31 14:33:39
    第一步:在项目中导入POI的jar包,以及相关的jar包。 所需的jar包列表: 下载地址:... ...第二步:建立util工具类。... * @Description: 将t中的字段转换成替换模板需要的数据${字...

    第一步:在项目中导入POI的jar包,以及相关的jar包。

    所需的jar包列表:

    下载地址:http://download.csdn.net/download/qq_34908167/10046670

     

    第二步:建立util工具类。

    public class DocxUtil{
        /**
          * @Description: 将t中的字段转换成替换模板需要的数据${字段}-->字段值
    *      在word模板中变量为${valuename},为每个值建一个以‘${valuename}’为键,‘value’为值的Map集合,
    *      利用键去和Word模板中寻找相等的变量
         */
        public <T> Map<String, String> copyParamFromBean(T t, Map<String, String> params) {
            Field[] fields = t.getClass().getDeclaredFields();
            String key;
            String value;
            for (Field field : fields) {
                String fieldName = field.getName();
                key = "${" + fieldName + "}";
                String name = "get" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
                try {
                    value = String.valueOf(t.getClass().getMethod(name).invoke(t));
                    params.put(key, value);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
            return params;
        }
    /***
    *替换Word模板中的对应变量。
    *两种情况:1-段落中的变量。 2-表格中的变量
    */
     public static void searchAndReplace(XWPFDocument document,Map<String, String> map) {
            try {
                // 替换段落中的指定文字
                Iterator<XWPFParagraph> itPara = document.getParagraphsIterator();//获得word中段落
                while (itPara.hasNext()) {       //遍历段落
                    XWPFParagraph paragraph = (XWPFParagraph) itPara.next();
                    Set<String> set = map.keySet();
                    Iterator<String> iterator = set.iterator();
                    while (iterator.hasNext()) {
                        String key = iterator.next();
                        List<XWPFRun> run=paragraph.getRuns();
                        for(int i=0;i<run.size();i++)
                        {
                            if(run.get(i).getText(run.get(i).getTextPosition())!=null &&
                                    run.get(i).getText(run.get(i).getTextPosition()).equals(key))
                            {
                                /**
                                 * 参数0表示生成的文字是要从哪一个地方开始放置,设置文字从位置0开始
                                 * 就可以把原变量替换掉
                                 */
                                run.get(i).setText(map.get(key),0);
                            }
                        }
                    }
                }         
                // 替换表格中的指定文字
                Iterator<XWPFTable> itTable = document.getTablesIterator();//获得Word的表格
                while (itTable.hasNext()) { //遍历表格
                    XWPFTable table = (XWPFTable) itTable.next();
                    int count = table.getNumberOfRows();//获得表格总行数
                    for (int i = 0; i < count; i++) { //遍历表格的每一行
                        XWPFTableRow row = table.getRow(i);//获得表格的行
                        List<XWPFTableCell> cells = row.getTableCells();//在行元素中,获得表格的单元格
                        for (XWPFTableCell cell : cells) {   //遍历单元格
                            for (Entry<String, String> e : map.entrySet()) {
                                if (cell.getText().equals(e.getKey())) {//如果单元格中的变量和‘键’相等,就用‘键’所对应的‘值’代替。
                                    cell.removeParagraph(0);//所以这里就要求每一个单元格只能有唯一的变量。
                                    cell.setText(e.getValue());
                                }
                            }
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    /**
         * 关闭输出流
         *
         * @param os
         */
        public void close(OutputStream os) {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

     

     

    第三步:在项目的对应目录下放入Word模板。

    这里给出我的Word模板:http://download.csdn.net/download/qq_34908167/10046772

     

    第四步:导出Word的java实现。

    public String exportDoc(){
            XWPFDocument doc = null;
            OutputStream out = null;
            FileInputStream in = null;
            DocxUtil docxUtil = null;
            try {
                String rootPath = "";
                ServletContext context = servletRequest.getSession().getServletContext();
                String studentId = this.servletRequest.getParameter("studentid");//得到页面的参数
                RankExportDocVO docVo=null;
                if (studentId!=null) {
                    rootPath = context.getRealPath("/docmodel/PG/RankPrintAll_WordTemplate.docx");//Word模板所在的路径
                    docVo = rankPrintService.queryStudentInfo((studentId);//调用service得到对应的VO类
                }else{
                    throw new Exception("传输字段为空!");
                }
                Map<String, String> params = new HashMap<String, String>();
                docxUtil = new DocxUtil();
                XWPFDocument document = new XWPFDocument(POIXMLDocument.openPackage(rootPath));//读取Word模板
                docxUtil.copyParamFromBean(docVo, params);//调用DocxUtil中的copyParamFromBean方法,为VO的每个值建立“${valuename}”键
                docxUtil.searchAndReplace(document, params);//替换模板中的对应变量。
                // 清空response
                this.servletResponse.reset();
                // 设置response的Header
                String userAgent = this.servletRequest.getHeader("User-Agent");
                String realname = "学生信息文档_"+docVo.getXm()+".docx";//最终导出文档的新文档名
                if (userAgent.contains("Firefox")) {
                    // 采用BASE64编码
                    realname = "=?UTF-8?B?" + new BASE64Encoder().encode(realname.getBytes("utf-8")) + "?=";
                } else {
                    // 其它浏览器 IE 、google 采用URL编码
                    realname = URLEncoder.encode(realname, "utf-8");
                    realname = realname.replace("+", " ");
                }
                servletResponse.setHeader("Content-Disposition", "attachment;filename=" + realname);
                String minitype = ServletActionContext.getServletContext().getMimeType(realname);
                servletResponse.setContentType(minitype);
                out = this.servletResponse.getOutputStream();
                document.write(out);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (null != docxUtil) {
                    docxUtil.close(out);//关闭流
                }
            }
            return null;
        }

     

     

     

    这就是利用Java-poi技术导出Word文档的全部步骤。

    这样的好处,就在于我们可以根据需求制定我们需要的Word样式。

    后语

    注意事项:

    1:Word模板中,表格的单元格的变量必须是唯一的,如果需要多个变量,我们可以利用word的隐藏表格功能,

    来实现视觉上的一个单元格有多个变量的效果。

    2:Word模板中的变量左右不能有空格,不然不能识别。

    3:都 9102 年了,还在看java-poi吗?去看看我的另外一篇使用freemaker来根据模板定制word文档的博文吧:

    Java-Freemarker替换模板文件.ftl中的变量,生成Word文档

    -----------------------------------------------------------------------------------------不关注我“象话”吗?(哈哈,逗比)

    展开全文
  • 当需要在HTML页面中快速替换另一个单词时,此工具非常有用。例如,如果查找“鹿”,并希望将搜索切换到“猫”,只需点击一下扩展名就可以在所有带有“鹿”的html字符串的新选项卡中重新加载页面。 如果该工具是从...
  • Word文档中的指定内容进行替换

    千次阅读 2018-05-12 09:53:42
    不知大家在对Word操作时,有没有遇到需要对指定内容进行替换这种需求。前几天公司有个需求,就是对PDF邀请函的姓名那部分内容进行替换,因为本人以前对Word的书签有过操作,所以思路就是通过将这部分内容设定为书签...
  • 另外刷新柱状图页面数据建议下面这个 /** * 刷新柱状图数据方法 * * @param typeChart * @param serList * @param dataList * @param fldNameArr * @param position * @return */ public static ...
  • 结果是在内容显示页面上是五花八门的样式,有时也需要部分纯文本内容作为摘录使用,这些都需要清除word格式。改变客户的习惯要客户先复制到记事本里再粘贴到编辑器里编辑是很难的,所以从我们自己改变起。从网上百度...
  • 首先当然是定义word模板,在需要替换的地方加上标签。 菜单-插入-书签,输入属性名,如year,date,pic1,voList等等。 打印页面: 需要把打印的数据从后台取出,以单个vo(一个对象)为一组,或以voList(对象的列表...
  • JAVA替换Word模板指定字符,并可插入图片。 之前有写过一篇使用jacob对word插入图片的博客。点击率蛮高8800多次,当然多亏了百度搜索引擎的帮忙???? 但是小编在使用以前写的代码走了一遍流程时,发现代码貌似会报错...
  • 一、空行替换  在日常工作中,我们经常从网上下载一些文字材料,往往因...但有一些用上面的方法却是屡试屡败,每次都是提示:“Word已完成对文档的搜索并已完成0处替换”。为什么空行就在眼前,Word却不认识它呢? 
  • 我们都知道word中有一个查找替换功能,也就是将文档中相同的字符都替换成其他字符。那我们能不能实现用Java语言在线打开word文档的同时,将指定内容通过程序查找替换成我们想要的内容呢?这是可以的。 但是这需要...
  • 由于在页面操作的换行是\r\n和\n.但是jsp和word中可识别的换行并不是这个.故一些富文本内容的换行符会显示不出来.下面给出较简单的换行处理 jsp: <% request.setAttribute("newline", "\n"); //用于替换换行...
  • office-word使用技巧——查找&替换

    千次阅读 2017-10-01 20:25:23
    查找和替换在我们处理大量文本时是一个非常好的工具,本文也提供了几种常见用法,值得借鉴。
  • 工作中经常遇到对word的批量操作,如果重复的操作达到上百甚至更多后,也是不小的工作量,在此可以使用word的宏来自动执行重复的操作,提高办公效率,特写文档举列说明具体使用
  • 使用poi动态替换word指定文本内容

    千次阅读 2015-07-31 12:22:23
    一种是通过poi来替换word指定内容的。具体java代码请百度。我这里直说我遇到的问题以及解决方案。 问题:指定文本被解析成了多个XWFPRun对象,比如${userName}被解析成了“${” + "userN" + "ame}" 导致想要替换的...
  • vue页面导出Word文档(含图片)

    千次阅读 热门讨论 2020-08-26 19:48:53
    name": "Jane", "last_name": "Doe", "phone": "+445476454" } ] 页面函数 /** * description: 导出echarts图片,格式转换 * * created by aa on 2020-08-18 * */ base64DataURLToArrayBuffer(dataURL) { const ...
  • 最近由于工作需要,需要将70个word文件的页眉页脚全部进行修改,在想到这个无聊/重复/没有任何技术含量的工作时,我的内心是相当奔溃的。就在我接近奔溃的时候我突然想到完全可以用python脚本来实现这样无聊的工作,...
  • Aspose.words 实现插入文件,页面设置,替换 表格操作,分页等
  • 编程操作Word 查找 替换 图片

    千次阅读 2009-01-19 14:16:00
    在VB6.0中,操作word,使用它强大的查找、替换、删除、复制、翦切功能。还可以把特定字符替换成图片。有了它你就可以使用数据库中的内容或图片文件替换word文件中的特定字符。 只要把下列内容复制到写字板中,...
  • html页面转成word文档

    万次阅读 2019-08-02 13:29:08
    //先clone来避免影响页面显示 var clone = ele.clone(); //找到所有echarts图表容器 var charts = clone.find(".chart"); //隐藏无需导出的dom clone.find(".input_div").hide(); //简单控制流程 var flag =...
  • Java面试题大全(2020版)

    万次阅读 多人点赞 2019-11-26 11:59:06
    replace():字符串替换。 trim():去除字符串两端空白。 split():分割字符串,返回一个分割后的字符串数组。 getBytes():返回字符串的 byte 类型数组。 length():返回字符串长度。 toLowerCase():将字符串转成...
  • 在企业管理项目开发中,经常会有使用给定的模板文件,以及用户提交到数据里的数据,按照一定的格式,生成指定的word和pdf文档。在这里进行一个总结:注意:(1)要再项目中添加引用:using System.Collections....
  • 设置word页面为绿色

    千次阅读 2018-05-04 11:24:48
    除了定时休息外,我们还可以将word的背景色改为浅绿色来减轻眼疲劳。 从网上找了很多办法,比如修改注册表、借用第三方软件,都不是特好。在此总结一下网上找到办法以及自己的解决方法。借用第三方软件风险太大,...
  • 本文简单介绍如何在ThinkPHP3.2中使用PHPWord生成报表页面word文档并下载,报表带文字和百度Echarts的图表图片。 有关在ThinkPHP3.2中使用PHPWord,可以参考“thinkphp3.2集成phpword,生成word文档并下载”这篇...
  • 在日常工作中,我们经常从...在“编辑”菜单中打开“查找和替换”对话框(或按ctrl+H),在“查找内容”中输入“^p^p”( ^p指段落标记)“替换为”中输入“^p”,然后“全部替换”。 但有一些用上面的方法却是屡试
  • Word中的特殊符号的区别, 替换表示方法.
  • Word联盟小编就在这里给大家分享怎样在Word2003中使用通配符进行模糊替换。①点击“编辑”选项卡,选择“查找”。②在弹出的页面框中选择“高级”。③在“查找和替换页面框中选择“查找”选项卡,并勾选“使用...
  • Vue导出页面word

    万次阅读 2019-05-11 10:27:14
    由于导出word时,页面样式无法正常使用,因此整体页面采用table布局,尽在几个地方添加style样式,没有其余样式 /** * 当页面中有canvas时,我的做法是 * 在页面中预先放置一个src为空的img标签 * 点击...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 42,637
精华内容 17,054
关键字:

word页面替换