本文主要讲解通过freemarker模板引擎来导出word,并且在word中包含表格的合并部分需要循环生成。
一、Java需要通过模板导出的word
如上图所示。物品的信息是循环部分。但是前面的表格是合并固定的。接下来我们将通过freemarker模板的方式来导出上述格式
<w:vMerge w:val="restart"/>
<w:vMerge/>
两个标签的组合。<w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge w:val="restart"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRPr="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r w:rsidRPr="00770B3E">
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
<w:b/>
</w:rPr>
<w:t>物品信息</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品名称</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>刀</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品数量</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1660" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>2</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
上面是合并单元格的首行,所以你可以找到<w:vMerge w:val="restart"/>标签<w:tr w:rsidR="00770B3E" w:rsidTr="00CC5D94">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品说明</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4978" w:type="dxa"/>
<w:gridSpan w:val="3"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:proofErr w:type="gramStart"/>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>刀非常</w:t>
</w:r>
<w:proofErr w:type="gramEnd"/>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>锋利</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
继续第三行:
<w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>上架时间</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>2</w:t>
</w:r>
<w:r>
<w:t>019</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>-</w:t>
</w:r>
<w:r>
<w:t>08</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>-</w:t>
</w:r>
<w:r>
<w:t>09</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>上架人</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1660" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>小左</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>
</w:tc>
并且<w:vMerge/>就在第一个单元格内。 <w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge w:val="restart"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRPr="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r w:rsidRPr="00770B3E">
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
<w:b/>
</w:rPr>
<w:t>物品信息</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品名称</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>刀</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品数量</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1660" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>2</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr w:rsidR="00770B3E" w:rsidTr="00CC5D94">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品说明</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4978" w:type="dxa"/>
<w:gridSpan w:val="3"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:proofErr w:type="gramStart"/>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>刀非常</w:t>
</w:r>
<w:proofErr w:type="gramEnd"/>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>锋利</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>上架时间</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>2</w:t>
</w:r>
<w:r>
<w:t>019</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>-</w:t>
</w:r>
<w:r>
<w:t>08</w:t>
</w:r>
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>-</w:t>
</w:r>
<w:r>
<w:t>09</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>上架人</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1660" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>小左</w:t>
</w:r>
</w:p>
</w:tc>
接下来就针对这部分进行模板标签的编写 <#list goodsList! as goods>
<#if goods_index == 0 >
<w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge w:val="restart"/>
<w:vAlign w:val="center"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRPr="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:pPr>
<w:jc w:val="center"/>
<w:rPr>
<w:b/>
</w:rPr>
</w:pPr>
<w:r w:rsidRPr="00770B3E">
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
<w:b/>
</w:rPr>
<w:t>物品信息</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品名称</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.name}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品数量</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1660" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.number}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr w:rsidR="00770B3E" w:rsidTr="00CC5D94">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品说明</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4978" w:type="dxa"/>
<w:gridSpan w:val="3"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.description}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>上架时间</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.time}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>上架人</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1660" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="003A3333">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.user}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<#else>
<w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品名称</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.name}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品数量</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1660" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.number}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr w:rsidR="00770B3E" w:rsidTr="00644BE9">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>物品说明</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="4978" w:type="dxa"/>
<w:gridSpan w:val="3"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.description}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<w:tr w:rsidR="00770B3E" w:rsidTr="00AB3846">
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
<w:vMerge/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E"/>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>上架时间</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.time}</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1659" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>上架人</w:t>
</w:r>
</w:p>
</w:tc>
<w:tc>
<w:tcPr>
<w:tcW w:w="1660" w:type="dxa"/>
</w:tcPr>
<w:p w:rsidR="00770B3E" w:rsidRDefault="00770B3E" w:rsidP="00770B3E">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<w:t>${goods.user}</w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
</#if>
</#list>
将上面代码放入demo.xml文件中替换掉原来的两个假数据行。替换后如下:(由于数据多,这里就截图展示)$title(Goods.java)
package demo;
public class Goods {
public Goods(String name, Integer number, String description, String time, String user) {
this.name = name;
this.number = number;
this.description = description;
this.time = time;
this.user = user;
}
String name;
Integer number;
String description;
String time;
String user;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getNumber() {
return number;
}
public void setNumber(Integer number) {
this.number = number;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
}
$title(ComplexWordExport.java)
package demo;
import freemarker.template.Configuration;
import freemarker.template.Template;
import java.io.*;
import java.text.SimpleDateFormat;
import java.util.*;
public class ComplexWordExport {
public static void main(String[] args) {
try {
// 创建模拟数据
List<Goods> goodsList = new ArrayList<>();
for (int i = 0; i < 4; i++) {
goodsList.add(new Goods("刀" + i, i + 2, "到很好不错,数量多+" + i,
new SimpleDateFormat("HH:mm:ss:SSS").format(new Date()), "用户" + i));
}
Map<String ,Object> dataMap=new HashMap<>();
dataMap.put("goodsList",goodsList);//注意这里的key与目标中的数据对应
File wordFile = new File("d:/demo.doc");// 注意这里只能输出doc,不能直接输出docx
Configuration configuration = new Configuration();
configuration.setDefaultEncoding("UTF-8");
configuration.setClassForTemplateLoading(WordTest.class, "/");
// 模板来源
// 1.创建一个word文件可以是doc或者docx的
// 2.在需要使用变量的地方用占位符占位
// 3.将word文档另存为xml文件
// 4.打开xml文件将里面的占位符替换为freemarker的表达式
// 5.重命名xml为ftl
// 6.完成
Template template = configuration.getTemplate("demo/demo.ftl", "UTF-8");//路径相对于项目的classpath
try (Writer out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(wordFile),"UTF-8"))) {
template.process(dataMap, out);
out.flush();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
提示:项目源码下载,访问密码9987
demo-word-export-template-freemarker.zip
http://blog.xqlee.com/article/603.html