java 修改保存excel,java Excel 工具(修改excel表格并保存)

这篇博客讨论了在Java中使用JXL和POI库进行Excel文件读写时遇到的问题及性能差异。作者发现JXL在修改Excel时需要先读取再复制,导致内存消耗过大,而POI虽然速度较慢,但功能更加强大,如支持部分单元格着色。测试结果显示,POI的解析和输出时间分别是JXL的4倍和2.5倍。尽管如此,JXL因其速度优势仍有一定吸引力。
摘要由CSDN通过智能技术生成

最近搞excel,用到JXL 。然后读写的时候遇到问题 -- jxl竟然修改一个excel还要先读入再copy,然后才能再那份copy上修改,囧;更囧的是copy以后是2份内存啊~偶的机器直接outofmemory。。。加了-xmx128m才勉强过去,为撒这么不人性化。。。记得以前好像大家都使用 POI的,故google之 ,发现版本已经升级到3.6轰轰~

下下来,运行找不到类WorkbookFactory 结果在一个什么ooxml什么的包里,囧。经过测试,的确poi的速度有点大跌眼镜,36116行的数据,2者的解析时间差了4倍,输出时间差了2.5倍。不过POI应该是更强大点,JXL的copy会丢失用户的筛选(小遗憾)。不过JXL用起来真不是很顺手,读和写还要分开,2份东东,实现类是2套,感觉对用户不是很友好,哎,谁叫人家速度快呢~

//测试JXL

long st = System.currentTimeMillis();

InputStream inp = new FileInputStream(

"d:/mydoc/sftp/admin(2010.09.20.152644.798)(.知识库类型树)gai.xls");

Workbook wb = WorkbookFactory.create(inp);

Sheet sheet = wb.getSheetAt(0);

Row row = sheet.getRow(1);

Cell cell = row.getCell(5);

if (cell == null)

cell = row.createCell(3);

CellStyle style = wb.createCellStyle();

style.setFillForegroundColor(IndexedColors.AQUA.getIndex());

style.setFillPattern(CellStyle.SOLID_FOREGROUND);

cell.setCellValue("a test");

System.out.println(System.currentTimeMillis() - st);

cell.setCellStyle(style);

// Write the output to a file

FileOutputStream fileOut = new FileOutputStream("/test.xls");

wb.write(fileOut);

fileOut.close();

System.out.println(System.currentTimeMillis() - st);

//测试POI

long st = System.currentTimeMillis();

InputStream inp = new FileInputStream(

"d:/mydoc/sftp/admin(2010.09.20.152644.798)(.知识库类型树)gai.xls");

FileOutputStream fileOut = new FileOutputStream("/test.xls");

Workbook wb = Workbook.getWorkbook(inp);

System.out.println(System.currentTimeMillis() - st);

WritableWorkbook writeWb = Workbook.createWorkbook(fileOut, wb);

System.out.println(System.currentTimeMillis() - st);

WritableSheet sheet = writeWb.getSheet(0);

try {

WritableCell c = sheet.getWritableCell(5, 1);

WritableCellFormat newFormat = new WritableCellFormat(c

.getCellFormat());

newFormat.setBackground(Colour.RED);

c.setCellFormat(newFormat);

} catch (WriteException e) {

e.printStackTrace();

}

// Write the output to a file

writeWb.write();

writeWb.close();

fileOut.close();

System.out.println(System.currentTimeMillis() - st);

测试结果如下:

JXL

POI

读取/解析时间

469ms

1843ms

copy到写工作簿时间

1200ms

输出时间

800ms

5015ms

PS:后来深入用了,发现POI还真是蛮强大的(新闻组很活跃)。。可以部分着色,Cell有RichTextString。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值