首先引用网上的文章,谈谈JXL与POI的区别

POI为apache公司的一个子项目,主要是提供一组操作windows文档的Java API. 
Java Excel俗称jxl是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。

就这两者的区别,主要谈下JVM虚拟机内存消耗的情况. 
数据量3000条数据,每条60列.JVM虚拟机内存大小64M. 
使用POI:运行到2800条左右就报内存溢出. 
使用JXL:3000条全部出来,并且内存还有21M的空间. 
可想而知,在对内存的消耗方面差距还是挺大的. 
也许是由于JXL在对资源回收利用方面做的还挺不错的. 
关于两者效率方面,没有研究过,我想这个也是基于大数据量而言的,数据量小的话基本上差别不大,也不难被发觉.但是大的数据量,POI消耗的JVM内存远比JXL消耗的多.但相比提供的功能的话,JXL又相对弱了点.所以如果要实现的功能比较复杂的情况下可以考虑使用POI,但如果只想生成一些大数据量可以考虑使用JXL,或者CSV也是一个不错的选择,不过CSV并不是真正的excel.

这里单独介绍JXL对EXCEL的操作

<span style="font-size: medium;">import jxl.*;
import jxl.format.Underlinestyle;
import jxl.write.*;
import jxl.write.Number;
import jxl.write.Boolean; import java.io.*; public class ExcelHandle
{ public ExcelHandle() { } /** * 读取Excel * * @param filePath */ public static void readExcel(String filePath) { try { InputStream is = new FileInputStream(filePath); Workbook rwb = Workbook.getWorkbook(is); //Sheet st = rwb.getSheet("0")这里有两种方法获取sheet表,1为名字,2为下标,从0开始 Sheet st = rwb.getSheet("original"); Cell c00 = st.getCell(0,0); //通用的获取cell值的方式,返回字符串 String strc00 = c00.getContents(); //获得cell具体类型值的方式 if(c00.getType() == CellType.LABEL) { LabelCell labelc00 = (LabelCell)c00; strc00 = labelc00.getString(); } //输出
           System.out.println(strc00); //关闭
           rwb.close(); } catch(Exception e) { e.printStackTrace(); } } /** * 输出Excel * * @param os */ public static void writeExcel(OutputStream os) { try { /** * 只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数, * 因为类WritableWorkbook的构造函数为protected类型 * method(1)直接从目标文件中读取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile)); * method(2)如下实例所示 将WritableWorkbook直接写入到输出流 */ WritableWorkbook wwb = Workbook.createWorkbook(os); //创建Excel工作表 指定名称和位置 WritableSheet ws = wwb.createSheet("Test Sheet 1",0); //**************往工作表中添加数据***************** //1.添加Label对象 Label label = new Label(0,0,"this is a label test"); ws.addCell(label); //添加带有字型formatting对象 WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true); WritableCellformat wcf = new WritableCellformat(wf); Label labelcf = new Label(1,0,"this is a label test",wcf); ws.addCell(labelcf); //添加带有字体颜色的formatting对象 WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,false, Underlinestyle.NO_UNDERLINE,jxl.format.Colour.RED); WritableCellformat wcfFC = new WritableCellformat(wfc); Label labelCF = new Label(1,0,"This is a Label Cell",wcfFC); ws.addCell(labelCF); //2.添加Number对象 Number labelN = new Number(0,1,3.1415926); ws.addCell(labelN); //添加带有formatting的Number对象 Numberformat nf = new Numberformat("#.##"); WritableCellformat wcfN = new WritableCellformat(nf); Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN); ws.addCell(labelNF); //3.添加Boolean对象 Boolean labelB = new jxl.write.Boolean(0,2,false); ws.addCell(labelB); //4.添加DateTime对象 jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new java.util.Date()); ws.addCell(labelDT); //添加带有formatting的Dateformat对象 Dateformat df = new Dateformat("dd MM yyyy hh:mm:ss"); WritableCellformat wcfDF = new WritableCellformat(df); DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF); ws.addCell(labelDTF); //添加图片对象,jxl只支持png格式图片 File image = new File("f:\\2.png"); WritableImage wimage = new WritableImage(0,1,2,2,image); ws.addImage(wimage); //写入工作表
           wwb.write(); wwb.close(); } catch(Exception e) { e.printStackTrace(); } } /** * 拷贝后,进行修改,其中file1为被copy对象,file2为修改后创建的对象;如果不想改名字的话他们可以一样* 尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去, * 以使单元格的内容以不同的形式表现 * @param file1 * @param file2 */ public static void modifyExcel(File file1,File file2) { try { Workbook rwb = Workbook.getWorkbook(file1);
//打开一个文件的副本,并且指定数据写回到原文件      WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy WritableSheet ws = wwb.getSheet(0); WritableCell wc = ws.getWritableCell(0,0); //判断单元格的类型,做出相应的转换 if(wc.getType == CellType.LABEL) { Label label = (Label)wc; label.setString("The value has been modified"); } wwb.write(); wwb.close(); rwb.close(); } catch(Exception e) { e.printStackTrace(); } } //测试 public static void main(String[] args) { try { //读Excel ExcelHandle.readExcel("f:/testRead.xls"); //输出Excel File fileWrite = new File("f:/testWrite.xls"); fileWrite.createNewFile(); OutputStream os = new FileOutputStream(fileWrite); ExcelHandle.writeExcel(os); //修改Excel ExcelHandle.modifyExcel(new file(""),new File("")); } catch(Exception e) { e.printStackTrace(); } }
} 2.在jsp中做相关测试,创建一个writeExcel.jsp
<%
response.reset();//清除Buffer
response.setContentType("application/vnd.ms-excel");
File fileWrite = new File("f:/testWrite.xls");
fileWrite.createNewFile();
new FileOutputStream(fileWrite);
ExcelHandle.writeExcel(new FileOutputStream(fileWrite));
%>
在IE中浏览writeExcel.jsp就可以动态生成Excel文档了,其中response.setContentType("application/vnd.ms-excel");语句必须要,才能确保不乱码,在jsp中输入<%@page contentType="application/vnd.ms-excel;charset=GBK"%>不行。</span>

比如测试一个:

<span style="font-size: medium;">public static void modifyExcel(File file1,File file2)    {    WritableWorkbook workbook=null;WritableSheet sheet=null;Workbook rwb;try {rwb = Workbook.getWorkbook(file1);workbook = Workbook.createWorkbook(file2,rwb);sheet=workbook.getSheet(0);Label label=new Label(2,2,"zzzz");sheet.addCell(label);workbook.write();workbook.close();} catch (BiffException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (RowsExceededException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}    </span>

MAIN方法中调用

modifyExcel(new File("D:/NewExcelDir/aaa.xls"),new File("D:/NewExcelDir/aaa.xls"));

执行就可以看到进行了修改

关于JXL读写以及修改EXCEL文件转相关推荐

  1. Python读写与追加excel文件

    读写与追加excel文件用的是 xlwt(写),xlrd(读),xlutils(操作excel)这三个包 这篇博客从以下几个方面来叙述: 三个模块的安装 读取excel文件(.xls .xlsx) 写 ...

  2. python处理多个excel数据_python 数据分析基础 day8-pandas读写多个excel文件

    今天是读<python数据分析基础>的第8天,今天的读书笔记的内容为利用pandas读写多个excel文件,当中涉及到读写excel文件的多个工作表. 大致原理如下: glob.glob( ...

  3. python关闭excel文件_利用Python读取和修改Excel文件(包括xls文件和xlsx文件)

    本文介绍一下使用Python对Excel文件的基本操作,包括使用xlrd模块读取excel文件,使用xlwt模块将数据写入excel文件,使用openpyxl模块读取写入和修改excel文件. 目录 ...

  4. python 修改excel文件_Python修改并保存当前excel文件

    在工作中经常需要修改excel文件并保存(例如添加行.添加列),如果只使用xlwt和xlrd并不能达成目的,需要用到xlutils.下面以我实际写的代码为例 备注:代码格式本来好好的,不知道为什么发表 ...

  5. 批量提取、修改excel文件名称

    批量提取.修改excel文件名称 一 批量提取excel文件名称 首先,在文档所在目录下用记事本建立一个空文本,存为文件名LS.BAT(注意扩展名不能是TXT,要改成BAT).然后在里边输入如下一行简 ...

  6. 一个操作读写已存在excel 文件的例子

    set xlapp = server.createobject("excel .application") strsource=filepath & "test. ...

  7. 【python】解析Excel中使用xlrd库、xlwt库操作,使用xluils库修改Excel文件详解(三)...

    之前介绍了读和写excel,前两种都不是修改excel的,但是在实际的工作中,经常会遇到修改已经存在的Excel文件这种需求.xlrd中put_cell可以实现原表格上简单的写入,而xlwt直接生成新 ...

  8. java基于jxl.jar包生成Excel文件到指定目录和服务器下载两种模式的使用方法

    导入jxl包 import java.io.File; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableCe ...

  9. java jxl 写 excel文件_使用jxl读和写Excel文件(速成)

    同行整理,简单明了,快速上手! =============================正文1============================ 最近和Excel频繁亲密接触,主要将N个Exc ...

最新文章

  1. 皮一皮:家里出了个不孝子...
  2. Redis的内存淘汰策略
  3. UEditor 插入图片大于2M提示文件大小超出范围解决办法
  4. Acwing 273. 分级
  5. Eclipse 远程调试
  6. java 数组减除值_java – 删除数组中空值的最有效方法是什么.
  7. PTA甲级15进制转换
  8. 老板平常多说点好听的
  9. Atitit TPL(事务处理语言 目录 1.1. 事务隔离级别 1 1.2. Savepoint技术 1 2. Tpl 1 2.1.  打开事务 START TRANSACTION; 1 2.2.
  10. Python可视化——绘制折线图
  11. [刷机教程] android系列 adb操作命令详解,常用adb操作命令详解
  12. VB.net调用蒙恬Write2Go笔迹手写板进行电子签名
  13. 智象运维干货 | HP iLo4 Smash CLP命令行参考
  14. 【凯子哥带你学Framework】Activity启动过程全解析
  15. OLED 屏幕的使用
  16. php怎么实现网页切图,CSS_网站页面切图与CSS注意事项,一、Web页面切图 1) Web页面的 - phpStudy...
  17. [JZOJ5442]【NOIP2017提高A组冲刺11.1】荒诞([BZOJ3060]【POI2012】Tour de Byteotia)
  18. input file 选择图片并显示
  19. html405是什么错误,网站打开显示405错误信息如何解决?
  20. 【我们都爱Paul Hegarty】斯坦福IOS8公开课个人笔记39 AlertActionSheet

热门文章

  1. php冒泡排序的用途,浅谈php冒泡排序
  2. springboot maven项目打jar包
  3. 12.12 带触发器按钮的输入框
  4. JSP自定义标签入门实例
  5. matlab编写文件格式,MATLAB程序设计教程(4)——MATLAB文件操作
  6. antd select option 设置字体颜色_匹配颜色是照片合成重要关键点
  7. linux恢复fat文件系统,使用‘fsck’修复Linux中文件系统错误的方法
  8. jsp向servlet传输数据
  9. JDK8新特性(十二)之并行的Stream流
  10. npm i和npm install命令