POI生成Excel,打开生成的Excel文件损坏!【急】

小雨转晴 2008-07-05 02:14:54
按要求我要导出如下Excel格式的数据:

其中ABCD列的值固定,EF均为mysql数据库数据,E对应的是标题,varchar类型,F对应的是内容,longtext类型。
先我用jdbc连接数据库,获得POI所需数据的数据源,写出上述格式的Excel,程序执行为发生任何异常。但是当打开生成的Excel
如下:


程序代码如下:
public void writeExcel(String fileName) {

//目标文件
File file = new File(fileName);
FileOutputStream fOut = null;
try {
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();

// 在Excel工作簿中建一工作表,其名为缺省值。
// 也可以指定工作表的名字。
HSSFSheet sheet = workbook.createSheet("data_Table");



// 创建单元格的格式,如居中、左对齐等
HSSFCellStyle cellStyle = workbook.createCellStyle();
// 水平方向上居中对齐
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
// 垂直方向上居中对齐
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);


//下面将建立一个4行3列的表。第一行为表头。
int rowNum = 0;//行标
int colNum = 0;//列标
//建立表头信息
// 在索引0的位置创建行(最顶端的行)
HSSFRow row = sheet.createRow((short) rowNum);
// 单元格
HSSFCell cell = null;

//获取数据库数据1000条。
ArrayList infoList =InfosDao.buildExcel("雅思",1000);

System.out.println(infoList.size());


for (colNum = 0; colNum < 6; colNum++) {
// 在当前行的colNum列上创建单元格
cell = row.createCell((short) colNum);

// 定义单元格为字符类型,也可以指定为日期类型、数字类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 定义编码方式,为了支持中文,这里使用了ENCODING_UTF_16
cell.setEncoding(HSSFCell.ENCODING_UTF_16);
// 为单元格设置格式
cell.setCellStyle(cellStyle);

// 添加内容至单元格
cell.setCellValue("表头名-" + colNum);

}
// rowNum++;
for (; rowNum < infoList.size(); rowNum++) {
// 新建第rowNum行
row = sheet.createRow((short) rowNum);
for (colNum = 0; colNum < 6; colNum++) {
// 在当前行的colNum位置创建单元格

cell = row.createCell((short) colNum);

cell.setEncoding(HSSFCell.ENCODING_UTF_16);

cell.setCellStyle(cellStyle);


if(colNum==0)
cell.setCellValue(1);
if(colNum==1)
cell.setCellValue(0);
if(colNum==2)
cell.setCellValue(1);
if(colNum==3)
cell.setCellValue(-1);
if(colNum==4)

cell.setCellValue(((Infos)infoList.get(rowNum)).getInfoName());

if(colNum==5)
cell.setCellValue(((Infos)infoList.get(rowNum)).getInfoContent());


}
}


// 工作薄建立完成,下面将工作薄存入文件
// 新建一输出文件流
fOut = new FileOutputStream(file);
// 把相应的Excel 工作簿存盘
workbook.write(fOut);
fOut.flush();
// 操作结束,关闭文件
fOut.close();

System.out
.println("Excel文件生成成功!Excel文件名:" + file.getAbsolutePath());
} catch (Exception e) {

System.out.println("Excel文件" + file.getAbsolutePath() + "生成失败:" + e);

} finally {
if (fOut != null){
try {
fOut.close();
} catch (IOException e1) {
}
}
}
}

奇怪的是,写出1条数据没有任何问题,大于1就出了上面的问题,求教高手,第一次用POI,急!!!
...全文
4137 26 打赏 收藏 转发到动态 举报
写回复
用AI写文章
26 条回复
切换为时间正序
请发表友善的回复…
发表回复
dashan1121 2011-05-31
  • 打赏
  • 举报
回复
这个问题我碰到过,
如果没猜错的话,你的excel里面有许多样式和公式,将这些东西全部去掉,然后再重新导入,我当时就是这样解决的
caoliang313 2011-01-02
  • 打赏
  • 举报
回复
解决了没有?我也有这个问题!!!!!!!!!!!!!!!!!!
困扰了快一年了!!!!!
而且还不抛异常的!!
Blaider 2010-05-26
  • 打赏
  • 举报
回复
我也老遇到这问题
楼主解决了没有?
貌似和文件大小有一定的关系呢……
zxhao 2010-05-11
  • 打赏
  • 举报
回复
问题怎么解决呢?
lemon520 2010-04-20
  • 打赏
  • 举报
回复
excel单元格字符串长度只支持32767,超过这个长度excel就打不开了。。
小雨转晴 2008-07-14
  • 打赏
  • 举报
回复
期待C友们的回答 为了楼上热心的各位 暂时结贴 lz还未找到答案
sunyujia 2008-07-07
  • 打赏
  • 举报
回复
小雨转晴 今晚没时间给你看了,如果明后天工作不忙的话我会关注。
geweixinerr 2008-07-06
  • 打赏
  • 举报
回复
小雨,偶是MS,偶来接分的................o(∩_∩)o...
eishen 2008-07-06
  • 打赏
  • 举报
回复
代码应该没有问题。。。。
office重装下试试吧

[Quote=引用 5 楼 java2000_net 的回复:]
我修改的部分,没有使用你的数据,而是虚假的写了几个数。如果有问题,只可能
1 你的Excel有问题,
2 你的写入的数据有问题

这2个的原因我都无法猜测

Java code public void writeExcel(String fileName) {
// 目标文件
File file = new File(fileName);
FileOutputStream fOut = null;
try {
// 创建新的Excel 工作簿
HSSFWorkbook workbook = new HSSFWorkbook();
// 在…
[/Quote]
老紫竹 2008-07-06
  • 打赏
  • 举报
回复
那就用简单的字段测试,比如修改你的数据为

1111
2222
3333

这么简单的,看看能否使用,如果能有,则逐步恢复其中一个数据,直到出现错误

这是调试的技巧,与编程无关。
duqiuyingkucha003 2008-07-06
  • 打赏
  • 举报
回复
很好,很强大!
小雨转晴 2008-07-06
  • 打赏
  • 举报
回复
补充个很奇怪的现象,我用mysql的GUI工具navicat导出数据name(标题),content(内容)到Excel,居然没有任何问题,Excel可以正常打开,也就是我的content字段没有超过Excel单元格的最大限制。
那么我怀疑:

1、我的程序有问题,但是竹子他们都没说那里出了问题...
2、POI有Bug
3、rpwt

哼哼 我想3是不会有可能的。

前两个问题 测试中......(打算用jxl试试看...)
小雨转晴 2008-07-06
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 java2000_net 的回复:]
那就用简单的字段测试,比如修改你的数据为

1111
2222
3333

这么简单的,看看能否使用,如果能有,则逐步恢复其中一个数据,直到出现错误

这是调试的技巧,与编程无关。
[/Quote]

竹子 我都测试过了,如果不放content字段上去的话,我的Excel写入没问题的。一加入content字段,我上面的问题就来了...
waykim 2008-07-05
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 zhengguangyi130 的回复:]
帮顶个...

貌似EXCLE很难搞....

潜水学习了...
[/Quote]
sunyujia 2008-07-05
  • 打赏
  • 举报
回复
帮小雨说句,小雨的数据量太大了,超级大的那种每行8千个字符。
光义 2008-07-05
  • 打赏
  • 举报
回复
帮顶个...

貌似EXCLE很难搞....

潜水学习了...
小雨转晴 2008-07-05
  • 打赏
  • 举报
回复
breezewj 也认识小雨哦,哎呀,这可咋办吖!难道我rp不好,怎么老碰上棘手的问题。残酷啊!!
breezewj 2008-07-05
  • 打赏
  • 举报
回复
哈哈~~~
原来小雨还在为这个事情头痛```
找群主仔细摆谈摆谈~~
小雨转晴 2008-07-05
  • 打赏
  • 举报
回复
是啊!竹子,你的代码可以正常运行啊,我的数据就是F列,content,mysql里的longtext类型,有问题吗?POI需要什么设置吗?郁闷 不写F列的话,我的程序也不会出问题,写了就挂~~郁闷ing~~~~

这是content字段的一条数据
-----------------------------
定位点的工具。考生在练习时要渐渐习惯通过人物、时间、地点、数字和专有名词找出题目中的文章定位点。当考生可以熟练解答科普类文章的文章内容时,就会很快做出其他文体的文章。 <BR><BR>  雅思阅读的题目里主要是判断题、选择题、填空题和图表题等。其中最难的题型就是判断题,因为有很多时候考生无法在错误选项和无关选项上做出判断。这种题目是要求考生在读完文章后判断句子是否真实,有三种可能:真实、虚假和未提供。实际上这种题目是为了取得高分才设计的,考生先要把最基本的题目做好,再来做这种题目。对于这种题目,考生要找出每句话主语的关键词回文定为就可以了。其他题型中填空题主要是细节类题目,考生直接按照速读的方法到文章中找答案即可。图表类题目需要考生根据图片和文章结合做出答案,主要是找出文章中的名词和形容词,根据名词和形容词找出正确的图片。 <BR><BR>  综合以上内容,考生在120天的时间段内主要是练习读文章的能力并且熟悉常考题型。熟能生巧,相信考生通过大量练习会在阅读上有质的突破的。
-------------------------------------
有的要比这个多很多,还有html标签在里面。
老紫竹 2008-07-05
  • 打赏
  • 举报
回复
也就是我的代码可以正常运行对吗?呵呵呵!!

那得看你的数据了!
加载更多回复(5)

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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