请各位 帮忙 看个帖子!给出些意见!Java 生成 word的

canshui 2012-10-25 09:47:25
...全文
190 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
canshui 2012-10-27
  • 打赏
  • 举报
回复
多谢各位为指点啦。。。
canshui 2012-10-27
  • 打赏
  • 举报
回复
嗯,我把 freemarker 的功能,想的弱了! 无知真可怕啊。。。
hbwhwang 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
嗯!可是不清楚这种方法,能不能在表格中动态增加行。我网上搜了下,没有发现好的参考资料!

JS方法太慢了! 728条数据,用时 2分30秒 左右。
[/Quote]

其实我的方法很简单,你用WORD把格式编辑好,如果是表格,你把表头画好,再增加一行空数据,为了定位方便,你在空行的表格单元里面写点内容,比如“第一行第一列”。。。
用WORD另保存为xml
用一个好一点的xml编辑器,把xml排版,方便看一点。关于表格的xml一般是这样的:
<w:tbl>
<w:tr>
<w:tc>表头</w:tc>
</w:tr>
<w:tr>
<w:tc>第一行</w:tc>
</w:tr>
</w:tbl>
你看看是不是跟html差不多?
好了,你在这个中间插上freemaker的标记语言,比如在第二个<w:tr>之前插入循环开始标记,然后在第二个</w:tr>之后插入循环结束标记。循环变量用的是List或者数组,这样List里面有多少个对象就会产生多少行。


canshui 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]
引用 5 楼 的回复:
嗯!可是不清楚这种方法,能不能在表格中动态增加行。我网上搜了下,没有发现好的参考资料!


当然可以支持动态行,跟你用JSP动态输出Table是类似的,只不过所使用的标签的风格不同。

比如HTML你是:

HTML code
<TABLE>
<% while (rs.next()) { %>
<TR>
<TD><%=rs.getStr……
[/Quote]
多谢! 我再去尝试 freemarker的方法!
MiceRice 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
嗯!可是不清楚这种方法,能不能在表格中动态增加行。我网上搜了下,没有发现好的参考资料!
[/Quote]

当然可以支持动态行,跟你用JSP动态输出Table是类似的,只不过所使用的标签的风格不同。

比如HTML你是:
<TABLE>
<% while (rs.next()) { %>
<TR>
<TD><%=rs.getString(1)%></TD>
<TD><%=rs.getString(2)%></TD>
...
</TR>
<% } %>
</TABLE>


而Word你就很麻烦,因为其XML结构贼复杂,对应TABLE的片段类似:

<w:tbl>
<!-- 表格的各种边距等总体设置 -->
<w:tblPr>
<w:tblW w:w="0" w:type="auto"/>
<w:tblBorders>
<w:top w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:left w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:bottom w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:right w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:insideH w:val="single" w:sz="4" w:space="0" w:color="auto"/>
<w:insideV w:val="single" w:sz="4" w:space="0" w:color="auto"/>
</w:tblBorders>
<w:tblLook w:val="04A0" w:firstRow="1" w:lastRow="0" w:firstColumn="1" w:lastColumn="0" w:noHBand="0" w:noVBand="1"/>
</w:tblPr>
<!-- 表格列信息 -->
<w:tblGrid>
<w:gridCol w:w="2840"/>
<w:gridCol w:w="2841"/>
<w:gridCol w:w="2841"/>
</w:tblGrid>
<% while (rs.next()) { %>
<!-- 表格的每行 -->
<w:tr w:rsidR="00E86A1B" w:rsidTr="004C7A91">
<!-- 该行的单元格 -->
<w:tc>
<!-- 单元格的格式 -->
<w:tcPr>
<w:tcW w:w="2840" w:type="dxa"/>
<w:shd w:val="clear" w:color="auto" w:fill="auto"/>
</w:tcPr>
<!-- 单元格内容 -->
<w:p w:rsidR="00E86A1B" w:rsidRDefault="00E86A1B">
<w:r>
<w:rPr>
<w:rFonts w:hint="eastAsia"/>
</w:rPr>
<!-- 这里才是文字 -->
<w:t> <%=rs.getString(1)%> </w:t>
</w:r>
</w:p>
</w:tc>
</w:tr>
<% } %>
</w:tbl>
canshui 2012-10-25
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
对了,看了你另一个帖子的8楼,也是个不错的方法,因为Word的XML格式也已经是公开的了。

你所需要做的就是在指定位置以 XML 形式生成表格的片段信息(也就是利用freemaker来完成的事情),有点像你用JSP来直接组装输出XML。

这种方案从最终展现的格式效果上来说是基本无变形的。
[/Quote]

嗯!可是不清楚这种方法,能不能在表格中动态增加行。我网上搜了下,没有发现好的参考资料!

JS方法太慢了! 728条数据,用时 2分30秒 左右。
lianjiaying 2012-10-25
  • 打赏
  • 举报
回复
之前 用到过 weboffice 可以在jsp 中定义 ,对 生成 word 的 支持很多。Lz 了解下
YOULOVEXIA 2012-10-25
  • 打赏
  • 举报
回复
java读取word 楼主加我Q吧
MiceRice 2012-10-25
  • 打赏
  • 举报
回复
对了,看了你另一个帖子的8楼,也是个不错的方法,因为Word的XML格式也已经是公开的了。

你所需要做的就是在指定位置以 XML 形式生成表格的片段信息(也就是利用freemaker来完成的事情),有点像你用JSP来直接组装输出XML。

这种方案从最终展现的格式效果上来说是基本无变形的。
MiceRice 2012-10-25
  • 打赏
  • 举报
回复
虽然用JS慢点,不过毕竟不太占用服务器端资源,其实从这个角度来考虑还是不错的。。。


如果确实很希望在服务器端生成,用iText吧,虽然会有些变形,参见:
http://blog.csdn.net/softwave/article/details/5800052

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧