使用freemarker导出复杂的excel表格、word文档

        最近因为项目需要,需要导出复杂的excel表格。由于需要合并单元格以及样式处理,用poi导出显得比较困难。因为之前用freemarker导出过pdf/word文件,就想着能不能用其导出excel。经过一番实验,大功告成,真是比poi好用N多倍呀!废话少说,直接进入正题。

        excel表格用编辑器打开后,可以发现它也是一个可编辑的标记性的格式,如同html页面里面的标签首尾相连。那就好办了。以下是具体步骤,部分逻辑不赘述直接上代码了。有逻辑或代码简陋望大神不要嘲笑并不吝指教。

        一、首先根据我们最终需要导出的excel表格的格式,用假数据填充后生成一个excel模板。如下图(假数据填充,作为模板):

       模板生成后,将当前模板另存,选择另存为XML格式 ,如下图:


另存后的文件打开后如下图:


分析该文件,我们会发现如同poi导出一样,该文件已经自动包含了需要的样式Styles、Worksheet、Table、以及一行行的数据Row。我们只需要关注Table里面的东西就好,分析数据后根据自己的具体业务逻辑,将之前渲染的假数据通过freemarker的标签替换成动态的生成形式。至此,前期准备完毕。如图:


二、前后台的最终实现(其实整个过程中最复杂部分就在将转成xml的文件中的数据替换成动态的)

前台部分:

页面点击导出按钮后触发事件,fileFrame是页面iframe隐藏域的id:


后台部分:直接上代码,很少几行而已。


至此,通过freemarker导出复杂excel表格完成。相较于poi,本人更喜欢这种方式。由于担心一上来整的数据样子看起来太复杂大家看不明白,因此在末尾又码了一个简单模型,希望对大家有帮助。哈哈!




补充:有朋友问我freemarker导出word,在这里也简单说一下,跟excel导出基本流程是一样的。

首先就是模板制作:将下图word模板另存为xml格式

将转成的xml的w:tr (其实就是行)全部用freemarker动态标签渲染上


动态渲染后的xml代码(比较长):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<?mso-application progid="Word.Document"?>
<w:wordDocument xmlns:w="http://schemas.microsoft.com/office/word/2003/wordml"
xmlns:v="urn:schemas-microsoft-com:vml" xmlns:w10="urn:schemas-microsoft-com:office:word"
xmlns:sl="http://schemas.microsoft.com/schemaLibrary/2003/core"
xmlns:aml="http://schemas.microsoft.com/aml/2001/core" xmlns:wx="http://schemas.microsoft.com/office/word/2003/auxHint"
xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
w:macrosPresent="no" w:embeddedObjPresent="no" w:ocxPresent="no"
xml:space="preserve"><o:DocumentProperties><o:Title>出国、赴港澳任务批件</o:Title><o:Author>飞总保卫室文书</o:Author><o:LastAuthor>Administrator</o:LastAuthor><o:Revision>6</o:Revision><o:Created>2016-10-11T07:11:00Z</o:Created><o:LastSaved>2018-07-03T07:56:02Z</o:LastSaved><o:TotalTime>4320</o:TotalTime><o:Pages>4</o:Pages><o:Words>408</o:Words><o:Characters>2327</o:Characters><o:Company>center</o:Company><o:Lines>19</o:Lines><o:Paragraphs>5</o:Paragraphs><o:CharactersWithSpaces>2730</o:CharactersWithSpaces></o:DocumentProperties><o:CustomDocumentProperties><o:KSOProductBuildVer
dt:dt="string">2052-10.1.0.7400</o:KSOProductBuildVer></o:CustomDocumentProperties><w:fonts><w:defaultFonts
w:ascii="Times New Roman" w:fareast="宋体" w:h-ansi="Times New Roman"
w:cs="Times New Roman" /><w:font w:name="Times New Roman"><w:panose-1
w:val="02020603050405020304" /><w:charset w:val="00" /><w:family
w:val="Auto" /><w:pitch w:val="Default" /><w:sig w:usb-0="E0002EFF"
w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000" w:csb-0="400001FF"
w:csb-1="FFFF0000" /></w:font><w:font w:name="宋体"><w:panose-1
w:val="02010600030101010101" /><w:charset w:val="86" /><w:family
w:val="Auto" /><w:pitch w:val="Default" /><w:sig w:usb-0="00000003"
w:usb-1="288F0000" w:usb-2="00000006" w:usb-3="00000000" w:csb-0="00040001"
w:csb-1="00000000" /></w:font><w:font w:name="Wingdings"><w:panose-1
w:val="05000000000000000000" /><w:charset w:val="02" /><w:family
w:val="Auto" /><w:pitch w:val="Default" /><w:sig w:usb-0="00000000"
w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000" w:csb-0="80000000"
w:csb-1="00000000" /></w:font><w:font w:name="Arial"><w:panose-1
w:val="020B0604020202020204" /><w:charset w:val="01" /><w:family
w:val="SWiss" /><w:pitch w:val="Default" /><w:sig
w:usb-0="E0002AFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000"
w:csb-0="400001FF" w:csb-1="FFFF0000" /></w:font><w:font w:name="黑体"><w:panose-1
w:val="02010609060101010101" /><w:charset w:val="86" /><w:family
w:val="Auto" /><w:pitch w:val="Default" /><w:sig w:usb-0="800002BF"
w:usb-1="38CF7CFA" w:usb-2="00000016" w:usb-3="00000000" w:csb-0="00040001"
w:csb-1="00000000" /></w:font><w:font w:name="Courier New"><w:panose-1
w:val="02070309020205020404" /><w:charset w:val="01" /><w:family
w:val="Modern" /><w:pitch w:val="Default" /><w:sig
w:usb-0="E0002AFF" w:usb-1="C0007843" w:usb-2="00000009" w:usb-3="00000000"
w:csb-0="400001FF" w:csb-1="FFFF0000" /></w:font><w:font w:name="Symbol"><w:panose-1
w:val="05050102010706020507" /><w:charset w:val="02" /><w:family
w:val="Roman" /><w:pitch w:val="Default" /><w:sig
w:usb-0="00000000" w:usb-1="00000000" w:usb-2="00000000" w:usb-3="00000000"
w:csb-0="80000000" w:csb-1="00000000" /></w:font><w:font w:name="Calibri"><w:panose-1
w:val="020F0502020204030204" /><w:charset w:val="00" /><w:family
w:val="SWiss" /><w:pitch w:val="Default" /><w:sig
w:usb-0="E00002FF" w:usb-1="4000ACFF" w:usb-2="00000001" w:usb-3="00000000"
w:csb-0="2000019F" w:csb-1="00000000" /></w:font></w:fonts><w:styles><w:latentStyles
w:defLockedState="off" w:latentStyleCount="260"><w:lsdException
w:name="Normal" /><w:lsdException w:name="heading 1" /><w:lsdException
w:name="heading 2" /><w:lsdException w:name="heading 3" /><w:lsdException
w:name="heading 4" /><w:lsdException w:name="heading 5" /><w:lsdException
w:name="heading 6" /><w:lsdException w:name="heading 7" /><w:lsdException
w:name="heading 8" /><w:lsdException w:name="heading 9" /><w:lsdException
w:name="index 1" /><w:lsdException w:name="index 2" /><w:lsdException
w:name="index 3" /><w:lsdException w:name="index 4" /><w:lsdException
w:name="index 5" /><w:lsdException w:name="index 6" /><w:lsdException
w:name="index 7" /><w:lsdException w:name="index 8" /><w:lsdException
w:name="index 9" /><w:lsdException w:name="toc 1" /><w:lsdException
w:name="toc 2" /><w:lsdException w:name="toc 3" /><w:lsdException
w:name="toc 4" /><w:lsdException w:name="toc 5" /><w:lsdException
w:name="toc 6" /><w:lsdException w:name="toc 7" /><w:lsdException
w:name="toc 8" /><w:lsdException w:name="toc 9" /><w:lsdException
w:name="Normal Indent" /><w:lsdException w:name="footnote text" /><w:lsdException
w:name="annotation text" /><w:lsdException w:name="header" /><w:lsdException
w:name="footer" /><w:lsdException w:name="index heading" /><w:lsdException
w:name="caption" /><w:lsdException w:name="table of figures" /><w:lsdException
w:name="envelope address" /><w:lsdException w:name="envelope return" /><w:lsdException
w:name="footnote reference" /><w:lsdException w:name="annotation reference" /><w:lsdException
w:name="line number" /><w:lsdException w:name="page number" /><w:lsdException
w:name="endnote reference" /><w:lsdException w:name="endnote text" /><w:lsdException
w:name="table of authorities" /><w:lsdException w:name="macro" /><w:lsdException
w:name="toa heading" /><w:lsdException w:name="List" /><w:lsdException
w:name="List Bullet" /><w:lsdException w:name="List Number" /><w:lsdException
w:name="List 2" /><w:lsdException w:name="List 3" /><w:lsdException
w:name="List 4" /><w:lsdException w:name="List 5" /><w:lsdException
w:name="List Bullet 2" /><w:lsdException w:name="List Bullet 3" /><w:lsdException
w:name="List Bullet 4" /><w:lsdException w:name="List Bullet 5" /><w:lsdException
w:name="List Number 2" /><w:lsdException w:name="List Number 3" /><w:lsdException
w:name="List Number 4" /><w:lsdException w:name="List Number 5" /><w:lsdException
w:name="Title" /><w:lsdException w:name="Closing" /><w:lsdException
w:name="Signature" /><w:lsdException w:name="Default Paragraph Font" /><w:lsdException
w:name="Body Text" /><w:lsdException w:name="Body Text Indent" /><w:lsdException
w:name="List Continue" /><w:lsdException w:name="List Continue 2" /><w:lsdException
w:name="List Continue 3" /><w:lsdException w:name="List Continue 4" /><w:lsdException
w:name="List Continue 5" /><w:lsdException w:name="Message Header" /><w:lsdException
w:name="Subtitle" /><w:lsdException w:name="Salutation" /><w:lsdException
w:name="Date" /><w:lsdException w:name="Body Text First Indent" /><w:lsdException
w:name="Body Text First Indent 2" /><w:lsdException
w:name="Note Heading" /><w:lsdException w:name="Body Text 2" /><w:lsdException
w:name="Body Text 3" /><w:lsdException w:name="Body Text Indent 2" /><w:lsdException
w:name="Body Text Indent 3" /><w:lsdException w:name="Block Text" /><w:lsdException
w:name="Hyperlink" /><w:lsdException w:name="FollowedHyperlink" /><w:lsdException
w:name="Strong" /><w:lsdException w:name="Emphasis" /><w:lsdException
w:name="Document Map" /><w:lsdException w:name="Plain Text" /><w:lsdException
w:name="E-mail Signature" /><w:lsdException w:name="Normal (Web)" /><w:lsdException
w:name="HTML Acronym" /><w:lsdException w:name="HTML Address" /><w:lsdException
w:name="HTML Cite" /><w:lsdException w:name="HTML Code" /><w:lsdException
w:name="HTML Definition" /><w:lsdException w:name="HTML Keyboard" /><w:lsdException
w:name="HTML Preformatted" /><w:lsdException w:name="HTML Sample" /><w:lsdException
w:name="HTML Typewriter" /><w:lsdException w:name="HTML Variable" /><w:lsdException
w:name="Normal Table" /><w:lsdException w:name="annotation subject" /><w:lsdException
w:name="Table Simple 1" /><w:lsdException w:name="Table Simple 2" /><w:lsdException
w:name="Table Simple 3" /><w:lsdException w:name="Table Classic 1" /><w:lsdException
w:name="Table Classic 2" /><w:lsdException w:name="Table Classic 3" /><w:lsdException
w:name="Table Classic 4" /><w:lsdException w:name="Table Colorful 1" /><w:lsdException
w:name="Table Colorful 2" /><w:lsdException w:name="Table Colorful 3" /><w:lsdException
w:name="Table Columns 1" /><w:lsdException w:name="Table Columns 2" /><w:lsdException
w:name="Table Columns 3" /><w:lsdException w:name="Table Columns 4" /><w:lsdException
w:name="Table Columns 5" /><w:lsdException w:name="Table Grid 1" /><w:lsdException
w:name="Table Grid 2" /><w:lsdException w:name="Table Grid 3" /><w:lsdException
w:name="Table Grid 4" /><w:lsdException w:name="Table Grid 5" /><w:lsdException
w:name="Table Grid 6" /><w:lsdException w:name="Table Grid 7" /><w:lsdException
w:name="Table Grid 8" /><w:lsdException w:name="Table List 1" /><w:lsdException
w:name="Table List 2" /><w:lsdException w:name="Table List 3" /><w:lsdException
w:name="Table List 4" /><w:lsdException w:name="Table List 5" /><w:lsdException
w:name="Table List 6" /><w:lsdException w:name="Table List 7" /><w:lsdException
w:name="Table List 8" /><w:lsdException w:name="Table 3D effects 1" /><w:lsdException
w:name="Table 3D effects 2" /><w:lsdException w:name="Table 3D effects 3" /><w:lsdException
w:name="Table Contemporary" /><w:lsdException w:name="Table Elegant" /><w:lsdException
w:name="Table Professional" /><w:lsdException w:name="Table Subtle 1" /><w:lsdException
w:name="Table Subtle 2" /><w:lsdException w:name="Table Web 1" /><w:lsdException
w:name="Table Web 2" /><w:lsdException w:name="Table Web 3" /><w:lsdException
w:name="Balloon Text" /><w:lsdException w:name="Table Grid" /><w:lsdException
w:name="Table Theme" /><w:lsdException w:name="Light Shading" /><w:lsdException
w:name="Light List" /><w:lsdException w:name="Light Grid" /><w:lsdException
w:name="Medium Shading 1" /><w:lsdException w:name="Medium Shading 2" /><w:lsdException
w:name="Medium List 1" /><w:lsdException w:name="Medium List 2" /><w:lsdException
w:name="Medium Grid 1" /><w:lsdException w:name="Medium Grid 2" /><w:lsdException
w:name="Medium Grid 3" /><w:lsdException w:name="Dark List" /><w:lsdException
w:name="Colorful Shading" /><w:lsdException w:name="Colorful List" /><w:lsdException
w:name="Colorful Grid" /><w:lsdException w:name="Light Shading Accent 1" /><w:lsdException
w:name="Light List Accent 1" /><w:lsdException w:name="Light Grid Accent 1" /><w:lsdException
w:name="Medium Shading 1 Accent 1" /><w:lsdException
w:name="Medium Shading 2 Accent 1" /><w:lsdException
w:name="Medium List 1 Accent 1" /><w:lsdException
w:name="Medium List 2 Accent 1" /><w:lsdException
w:name="Medium Grid 1 Accent 1" /><w:lsdException
w:name="Medium Grid 2 Accent 1" /><w:lsdException
w:name="Medium Grid 3 Accent 1" /><w:lsdException
w:name="Dark List Accent 1" /><w:lsdException
w:name="Colorful Shading Accent 1" /><w:lsdException
w:name="Colorful List Accent 1" /><w:lsdException
w:name="Colorful Grid Accent 1" /><w:lsdException
w:name="Light Shading Accent 2" /><w:lsdException
w:name="Light List Accent 2" /><w:lsdException w:name="Light Grid Accent 2" /><w:lsdException
w:name="Medium Shading 1 Accent 2" /><w:lsdException
w:name="Medium Shading 2 Accent 2" /><w:lsdException
w:name="Medium List 1 Accent 2" /><w:lsdException
w:name="Medium List 2 Accent 2" /><w:lsdException
w:name="Medium Grid 1 Accent 2" /><w:lsdException
w:name="Medium Grid 2 Accent 2" /><w:lsdException
w:name="Medium Grid 3 Accent 2" /><w:lsdException
w:name="Dark List Accent 2" /><w:lsdException
w:name="Colorful Shading Accent 2" /><w:lsdException
w:name="Colorful List Accent 2" /><w:lsdException
w:name="Colorful Grid Accent 2" /><w:lsdException
w:name="Light Shading Accent 3" /><w:lsdException
w:name="Light List Accent 3" /><w:lsdException w:name="Light Grid Accent 3" /><w:lsdException
w:name="Medium Shading 1 Accent 3" /><w:lsdException
w:name="Medium Shading 2 Accent 3" /><w:lsdException
w:name="Medium List 1 Accent 3" /><w:lsdException
w:name="Medium List 2 Accent 3" /><w:lsdException
w:name="Medium Grid 1 Accent 3" /><w:lsdException
w:name="Medium Grid 2 Accent 3" /><w:lsdException
w:name="Medium Grid 3 Accent 3" /><w:lsdException
w:name="Dark List Accent 3" /><w:lsdException
w:name="Colorful Shading Accent 3" /><w:lsdException
w:name="Colorful List Accent 3" /><w:lsdException
w:name="Colorful Grid Accent 3" /><w:lsdException
w:name="Light Shading Accent 4" /><w:lsdException
w:name="Light List Accent 4" /><w:lsdException w:name="Light Grid Accent 4" /><w:lsdException
w:name="Medium Shading 1 Accent 4" /><w:lsdException
w:name="Medium Shading 2 Accent 4" /><w:lsdException
w:name="Medium List 1 Accent 4" /><w:lsdException
w:name="Medium List 2 Accent 4" /><w:lsdException
w:name="Medium Grid 1 Accent 4" /><w:lsdException
w:name="Medium Grid 2 Accent 4" /><w:lsdException
w:name="Medium Grid 3 Accent 4" /><w:lsdException
w:name="Dark List Accent 4" /><w:lsdException
w:name="Colorful Shading Accent 4" /><w:lsdException
w:name="Colorful List Accent 4" /><w:lsdException
w:name="Colorful Grid Accent 4" /><w:lsdException
w:name="Light Shading Accent 5" /><w:lsdException
w:name="Light List Accent 5" /><w:lsdException w:name="Light Grid Accent 5" /><w:lsdException
w:name="Medium Shading 1 Accent 5" /><w:lsdException
w:name="Medium Shading 2 Accent 5" /><w:lsdException
w:name="Medium List 1 Accent 5" /><w:lsdException
w:name="Medium List 2 Accent 5" /><w:lsdException
w:name="Medium Grid 1 Accent 5" /><w:lsdException
w:name="Medium Grid 2 Accent 5" /><w:lsdException
w:name="Medium Grid 3 Accent 5" /><w:lsdException
w:name="Dark List Accent 5" /><w:lsdException
w:name="Colorful Shading Accent 5" /><w:lsdException
w:name="Colorful List Accent 5" /><w:lsdException
w:name="Colorful Grid Accent 5" /><w:lsdException
w:name="Light Shading Accent 6" /><w:lsdException
w:name="Light List Accent 6" /><w:lsdException w:name="Light Grid Accent 6" /><w:lsdException
w:name="Medium Shading 1 Accent 6" /><w:lsdException
w:name="Medium Shading 2 Accent 6" /><w:lsdException
w:name="Medium List 1 Accent 6" /><w:lsdException
w:name="Medium List 2 Accent 6" /><w:lsdException
w:name="Medium Grid 1 Accent 6" /><w:lsdException
w:name="Medium Grid 2 Accent 6" /><w:lsdException
w:name="Medium Grid 3 Accent 6" /><w:lsdException
w:name="Dark List Accent 6" /><w:lsdException
w:name="Colorful Shading Accent 6" /><w:lsdException
w:name="Colorful List Accent 6" /><w:lsdException
w:name="Colorful Grid Accent 6" /></w:latentStyles><w:style
w:type="paragraph" w:styleId="a1" w:default="on"><w:name w:val="Normal" /><w:pPr><w:widowControl
w:val="off" /><w:jc w:val="both" /></w:pPr><w:rPr><w:kern
w:val="2" /><w:sz w:val="21" /><w:lang w:val="EN-US"
w:fareast="ZH-CN" /></w:rPr></w:style><w:style w:type="character"
w:styleId="a6" w:default="on"><w:name w:val="Default Paragraph Font" /><w:semiHidden /></w:style><w:style
w:type="table" w:styleId="a8" w:default="on"><w:name w:val="Normal Table" /><w:semiHidden /><w:tblPr><w:tblCellMar><w:top
w:w="0" w:type="dxa" /><w:left w:w="108" w:type="dxa" /><w:bottom
w:w="0" w:type="dxa" /><w:right w:w="108" w:type="dxa" /></w:tblCellMar></w:tblPr></w:style><w:style
w:type="paragraph" w:styleId="a2"><w:name w:val="annotation subject" /><w:basedOn
w:val="a3" /><w:next w:val="a3" /><w:semiHidden /><w:pPr><w:pStyle
w:val="a3" /></w:pPr><w:rPr><w:b /><w:b-cs /></w:rPr></w:style><w:style
w:type="paragraph" w:styleId="a3"><w:name w:val="annotation text" /><w:basedOn
w:val="a1" /><w:semiHidden /><w:pPr><w:jc w:val="left" /></w:pPr></w:style><w:style
w:type="paragraph" w:styleId="a4"><w:name w:val="footer" /><w:basedOn
w:val="a1" /><w:link w:val="a9" /><w:pPr><w:tabs><w:tab
w:val="center" w:pos="4153" /><w:tab w:val="right" w:pos="8306" /></w:tabs><w:snapToGrid
w:val="off" /><w:jc w:val="left" /></w:pPr><w:rPr><w:sz
w:val="18" /><w:sz-cs w:val="18" /></w:rPr></w:style><w:style
w:type="paragraph" w:styleId="a5"><w:name w:val="header" /><w:basedOn
w:val="a1" /><w:link w:val="a10" /><w:pPr><w:pBdr><w:bottom
w:val="single" w:sz="6" wx:bdrwidth="15" w:space="1" w:color="auto" /></w:pBdr><w:tabs><w:tab
w:val="center" w:pos="4153" /><w:tab w:val="right" w:pos="8306" /></w:tabs><w:snapToGrid
w:val="off" /><w:jc w:val="center" /></w:pPr><w:rPr><w:sz
w:val="18" /><w:sz-cs w:val="18" /></w:rPr></w:style><w:style
w:type="character" w:styleId="a7"><w:name w:val="annotation reference" /><w:basedOn
w:val="a6" /><w:semiHidden /><w:rPr><w:sz w:val="21" /></w:rPr></w:style><w:style
w:type="character" w:styleId="a9"><w:name w:val="页脚 Char" /><w:basedOn
w:val="a6" /><w:link w:val="a4" /><w:rPr><w:kern w:val="2" /><w:sz
w:val="18" /><w:sz-cs w:val="18" /></w:rPr></w:style><w:style
w:type="character" w:styleId="a10"><w:name w:val="页眉 Char" /><w:basedOn
w:val="a6" /><w:link w:val="a5" /><w:rPr><w:kern w:val="2" /><w:sz
w:val="18" /><w:sz-cs w:val="18" /></w:rPr></w:style></w:styles><w:bgPict><w:background /><v:background
id="_x0000_s1025"><v:fill on="f" focussize="0,0" /></v:background></w:bgPict><w:docPr><w:view
w:val="print" /><w:zoom w:percent="100" /><w:characterSpacingControl
w:val="CompressPunctuation" /><w:documentProtection
w:enforcement="off" /><w:punctuationKerning /><w:doNotEmbedSystemFonts /><w:bordersDontSurroundHeader /><w:bordersDontSurroundFooter /><w:defaultTabStop
w:val="425" /><w:drawingGridHorizontalSpacing
w:val="105" /><w:drawingGridVerticalSpacing
w:val="156" /><w:displayHorizontalDrawingGridEvery
w:val="0" /><w:displayVerticalDrawingGridEvery
w:val="2" /><w:compat><w:ulTrailSpace /><w:doNotUseHTMLParagraphAutoSpacing /><w:doNotExpandShiftReturn /><w:balanceSingleByteDoubleByteWidth /><w:spaceForUL /><w:alignTablesRowByRow /><w:useWord97LineBreakingRules /><w:shapeLayoutLikeWW8 /><w:useFELayout /></w:compat></w:docPr><w:body><wx:sect><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:ascii="宋体" w:hint="fareast" /><w:b /><w:b-cs /><w:sz
w:val="32" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:b-cs /><w:sz
w:val="32" /></w:rPr><w:t>出 国 人 员 名 单</w:t></w:r></w:p><w:p><w:pPr><w:rPr><w:rFonts
w:ascii="宋体" w:hint="default" /><w:b /><w:b-cs /><w:sz w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts
w:ascii="宋体" w:hint="fareast" /><w:sz w:val="28" /></w:rPr><w:t>                                                                         </w:t></w:r><w:r><w:rPr><w:rFonts
w:ascii="宋体" w:hint="fareast" /><w:b /><w:b-cs /><w:sz w:val="24" /></w:rPr><w:t>本单位人数:${total!''}</w:t></w:r></w:p><w:tbl><w:tblPr><w:tblW
w:w="12915" w:type="dxa" /><w:tblInd w:w="948" w:type="dxa" /><w:tblBorders><w:top
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:left
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:bottom
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:right
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:insideH
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:insideV
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /></w:tblBorders><w:tblLayout
w:type="Fixed" /><w:tblCellMar><w:top w:w="0" w:type="dxa" /><w:left
w:w="108" w:type="dxa" /><w:bottom w:w="0" w:type="dxa" /><w:right
w:w="108" w:type="dxa" /></w:tblCellMar></w:tblPr><w:tblGrid><w:gridCol
w:w="1155" /><w:gridCol w:w="1155" /><w:gridCol
w:w="840" /><w:gridCol w:w="1365" /><w:gridCol w:w="1365" /><w:gridCol
w:w="2625" /><w:gridCol w:w="1575" /><w:gridCol
w:w="2835" /></w:tblGrid><w:tr><w:tblPrEx><w:tblBorders><w:top
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:left
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:bottom
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:right
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:insideH
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:insideV
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /></w:tblBorders><w:tblCellMar><w:top
w:w="0" w:type="dxa" /><w:left w:w="108" w:type="dxa" /><w:bottom
w:w="0" w:type="dxa" /><w:right w:w="108" w:type="dxa" /></w:tblCellMar></w:tblPrEx><w:trPr><w:cantSplit
w:val="on" /><w:trHeight w:val="465" w:h-rule="atLeast" /></w:trPr><w:tc><w:tcPr><w:tcW
w:w="1155" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr><w:t>序号</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="1155" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr><w:t>姓   名</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="840" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr><w:t>性别</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="1365" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr><w:t>出生日期</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="1365" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr><w:t>出生地</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="2625" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr><w:t>身份证号码</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="1575" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:b /><w:sz w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts
w:hint="fareast" /><w:b /><w:sz w:val="24" /></w:rPr><w:t>工作单位</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="2835" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:sz
w:val="24" /></w:rPr><w:t>职务</w:t></w:r></w:p></w:tc></w:tr>
<!-- 数据行START -->

<#if pageList?exists && (pageList?size>0)>
<#list pageList as person>
<w:tr><w:tblPrEx><w:tblBorders><w:top
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:left
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:bottom
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:right
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:insideH
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /><w:insideV
w:val="single" w:sz="4" wx:bdrwidth="10" w:space="0" w:color="auto" /></w:tblBorders><w:tblCellMar><w:top
w:w="0" w:type="dxa" /><w:left w:w="108" w:type="dxa" /><w:bottom
w:w="0" w:type="dxa" /><w:right w:w="108" w:type="dxa" /></w:tblCellMar></w:tblPrEx><w:trPr><w:cantSplit
w:val="on" /><w:trHeight w:val="465" w:h-rule="atLeast" /></w:trPr><w:tc><w:tcPr><w:tcW
w:w="1155" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:sz w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:sz
w:val="24" /></w:rPr><w:t>${person_index + 1}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="1155" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr><w:t>${person.userName!''}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="840" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr><w:t>${person.sex!''}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="1365" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:sz w:val="24" /></w:rPr><w:t>${person.birthDate!''}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="1365" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr><w:t>${person.bornIn!''}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="2625" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:sz w:val="24" /></w:rPr><w:t>${person.idNo!''}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="1575" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr><w:t>${person.depDes!''}</w:t></w:r></w:p></w:tc><w:tc><w:tcPr><w:tcW
w:w="2835" w:type="dxa" /><w:shd w:val="clear" w:color="auto"
w:fill="auto" /><w:vAlign w:val="center" /></w:tcPr><w:p><w:pPr><w:jc
w:val="center" /><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts w:hint="fareast" /><w:sz
w:val="24" /></w:rPr><w:t>${person.postDuty!''}</w:t></w:r></w:p></w:tc></w:tr>
</#list>
</#if>

<!-- 数据行END -->

</w:tbl><w:p><w:pPr><w:ind
w:left="8820" w:left-chars="4200" /><w:rPr><w:rFonts w:hint="fareast" /></w:rPr></w:pPr></w:p><w:p><w:pPr><w:ind
w:left="8820" w:left-chars="4200" /><w:rPr><w:rFonts w:hint="fareast" /></w:rPr></w:pPr></w:p><w:p><w:pPr><w:ind
w:left="8820" w:left-chars="4200" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:b-cs /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts
w:hint="fareast" /><w:b /><w:b-cs /></w:rPr><w:t>公章:</w:t></w:r></w:p><w:p><w:pPr><w:ind
w:left="8820" w:left-chars="4200" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:b-cs /></w:rPr></w:pPr></w:p><w:p><w:pPr><w:ind
w:left="9240" w:left-chars="4400" /><w:rPr><w:rFonts w:hint="fareast" /><w:b /><w:b-cs /></w:rPr></w:pPr><w:r><w:rPr><w:rFonts
w:hint="fareast" /><w:b /><w:b-cs /></w:rPr><w:t>${year!''}年${month!''}月${day!''}日</w:t></w:r></w:p><w:sectPr><w:pgSz
w:w="16838" w:h="11906" w:orient="landscape" /><w:pgMar w:top="1474"
w:right="1440" w:bottom="1701" w:left="1440" w:header="851" w:footer="992"
w:gutter="0" /><w:cols w:space="720" /><w:docGrid
w:type="lines-and-chars" w:line-pitch="312" /></w:sectPr></wx:sect></w:body></w:wordDocument>

接下来就是后台代码了,直接上图:

后台代码:

@RequestMapping("/exportWord.do")
public void exportWord(HttpServletRequest request,HttpServletResponse response,String certGroupId,String orderType){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String dateString = sdf.format(new Date());//2018-07-03
String basePath =request.getSession().getServletContext().getRealPath("/");//绝对路径    
String basePath2=basePath.replaceAll("\\\\", "/");  
Configuration cfg = FreemarkerConfiguration.getConfiguation();
//封装返回数据
Map<String,Object> returnMap = new HashMap<>();
try {
cfg.setDirectoryForTemplateLoading(new File(basePath2 + "/WEB-INF/pages/icert/group"));
List<HrCertGroupPersonExt> pageList = hrCertGroupPersonService.selectPersonListByCertGroupId(certGroupId,orderType);
returnMap.put("pageList", pageList);
returnMap.put("total", pageList.size());
returnMap.put("year",dateString.substring(0, 4));
returnMap.put("month",dateString.substring(5, 7));
returnMap.put("day",dateString.substring(8, 10));
request.setCharacterEncoding("UTF-8"); 
    response.setContentType("application/x-download;");  
    response.setHeader("Content-disposition", "attachment; filename="  
                + new String("出国人员名单.doc".getBytes("gb2312"), "ISO8859-1"));
    response.setCharacterEncoding("UTF-8");
    cfg.getTemplate("/groupWord.xml").process(returnMap,response.getWriter());
} catch (Exception e) {
e.printStackTrace();
}
}

至此,用freemarker导出word完成,流程与导出excel一致。


码字不易,转载请注明出处!

猜你喜欢

转载自blog.csdn.net/m0_38106299/article/details/80830161