利用poi生成excel报表的问题(急!!!)

王二_ 2008-01-16 05:41:06
用hssf生成excel,需要给excel的打印预览里的最后一页填补空行,找了一圈,没找到包里用什么方法能获取到excel默认的分页符。报表数据量大的话需要分多个sheet,多个sheet要统一样式,我没有找到能复制sheet内容和样式的方法。急啊~
...全文
1461 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
BOBO56SH2 2010-06-11
  • 打赏
  • 举报
回复
但是我要生成若干个sheet,还真不知道怎么弄!
olivesoup 2008-03-05
  • 打赏
  • 举报
回复
确实是这样,用sheet.getRowBreaks();我得到的也始终是null,
可能这部分poi还没有处理好

说个题外话,开发过程中发现poi的bug很多,从2.0到3.0都是这样,
那天看到官网上出3.02了,说修正了很多bug,down下来试了一下,
我知道的bug它一个也没修正,不知道它都改哪里去了

现在就算遇到什么问题也都是用感觉很老土很笨的方法暂时解决的,
就像楼主的情况一样,我是期待poi以后继续改进吧
王二_ 2008-02-28
  • 打赏
  • 举报
回复
到现在 我也没能找到 科学的解决问题的办法。在c#里,打开了一个excel文件是可以获取到excel默认的分页符的,其实c#里用的也是标准接口,它获取excel默认分页符的方法是,每一行excel表格都有个是否是分页符的标识,这个标识是会随着表格大小(因内容变化而改变了表格大小也算)而变化的,所以通过默认的分页符来控制补多少空行是比较准确的方法。
王二_ 2008-02-28
  • 打赏
  • 举报
回复
olivesoup
关于你说的获得分页符,有一个方法可以得到
sheet.getRowBreaks();
应该是返回所有分页符索引的数组,但是可能会出一些问题,具体你看一下这篇文章
http://industry.ccidnet.com/art/1078/20050908/328387_1.html

原来结完贴还能继续回复呢。这文章我以前看过,我最开始尝试的也是这个方法,也是感觉应该是这个方法,不知道为什么总是返回空值,文章里说的意思是在一个没有设置分页符的xls里,直接获取分页符数组是获取不了的,是包里本身的bug,需要手动分配了分页符后才能用该方法来获取分页符数组,但这并不是excel默认的分页符数组。请再看下本贴最初的问题。
王二_ 2008-02-22
  • 打赏
  • 举报
回复
拖这么长时间 也没怎么讨论,结贴了。
olivesoup 2008-02-22
  • 打赏
  • 举报
回复
不好意思,很久没来,不知道你得问题完美解决了没有?

关于你说的获得分页符,有一个方法可以得到
sheet.getRowBreaks();
应该是返回所有分页符索引的数组,但是可能会出一些问题,具体你看一下这篇文章
http://industry.ccidnet.com/art/1078/20050908/328387_1.html
laitaogood 2008-02-17
  • 打赏
  • 举报
回复
潜力帖
鼓励这样的讨论
tengyuqiao 2008-01-31
  • 打赏
  • 举报
回复
王二_ 2008-01-29
  • 打赏
  • 举报
回复
这两天都忙车票去了,忘记顶了。本来再上次跟贴的时候就想把帖子结了,给olivesoup 结分的,因为问题暂时糊弄过去了。可是,还是想 通过连续跟贴,和大家讨论出最佳解决办法,我毕竟是估算的页高,纯属火力侦察,不科学,如果换下纸张类型,就over了,我找了很久都没找到这方面的资料,如果我们有解决办法了,总结一下,也好做以后的参考。
guoqiangone 2008-01-26
  • 打赏
  • 举报
回复
给你顶一下

up
王二_ 2008-01-24
  • 打赏
  • 举报
回复
一天没顶 都成这样了 我暂时给页高 按行高+表头高范围 估的值 姑且糊弄过去
shan1119 2008-01-24
  • 打赏
  • 举报
回复
也是看了你的帖子,才开始学习poi的使用,所以可能说的不对.
默认的分页符好象取不到,插入的分页符可以.
行高的取得:
sheet.getRow(0).getHeight()/20.00//跟文件中的行高相等
sheet.getRow(0).getHeightInPoints()//有点误差,只能取得整数部分,小数省略了.
按照这个你再设置一下行高,看看误差是多少.(to 21楼)
王二_ 2008-01-21
  • 打赏
  • 举报
回复
自己帮顶一下 都没人气了都
hahe7788 2008-01-18
  • 打赏
  • 举报
回复
HSSFRichTextString val = null;
int end_index = workbook.getSheetIndex(endSheetName);
HSSFSheet sheet = workbook.getSheet(Integer.toString(i+1)+"page");

val = new HSSFRichTextString("第一行");
setCellValue(sheet, 0, 1, val);
val = new HSSFRichTextString("第二行");
setCellValue(sheet, 1, 1, val);
// 跳过第三行
val = new HSSFRichTextString("第四行");
setCellValue(sheet, 3, 1, val);
private void setCellValue(HSSFSheet sheet, int iRow, int iCol, HSSFRichTextString val){ HSSFRow row = sheet.getRow((short)iRow);
HSSFCell cell = row.getCell((short)iCol);
cell.setCellValue(val);
}

hahe7788 2008-01-18
  • 打赏
  • 举报
回复
按有几个群,你不妨加进去,可以和大家一起讨论啊.........46986340,28039577,4804620
在那里看看有无能回答你的,谢谢,LZ,甭忘了给俺分哦,谢谢LZ
王二_ 2008-01-18
  • 打赏
  • 举报
回复
大体思路都是一样的,就是不知道按这个包的单位和布局方法走,怎么确定那 几个关键值,这个包里默认的单元格高度为255个单位,我也想根据这个算出一页最多能容多大单位的高度,试了几次,发现那个值好像不准。我是这样算的,把单元格高度按包的单位走,都设置成20,设小一点,想尽量缩小误差,算出一页的高度为17800,但是这个值不对,对255的行高来说,都还多出了10几行。
hrui99 2008-01-18
  • 打赏
  • 举报
回复
拿到总的数据行数,按打印纸张大小 容纳的最大行做限制,取平均放置的行数插入数据.这方法不知可行?
olivesoup 2008-01-18
  • 打赏
  • 举报
回复
一个是打印设置

HSSFPrintSetup print = sheet.getPrintSetup();


一个是行设置

HSSFRow row = sheet.getRow(index);


你可以先在print,与row里找找看是否有你需要的能计算高度的一些方法,
主要是一些get/setHeight()方法,
或者是找找有没有自动填充空行的更好

我再帮你找找资料,poi的资料很少
王二_ 2008-01-18
  • 打赏
  • 举报
回复
你有没有qq,msn之类的东西哈? 我qq:277973564
王二_ 2008-01-18
  • 打赏
  • 举报
回复
你快点帮我结了,那分我全给你。
加载更多回复(21)

81,092

社区成员

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

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