- 浏览: 107647 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
wxynxyo:
非常感谢,解决了一个问题
Spring MVC 类型转换 @InitBinder使用 转 -
hxsmile:
很清晰明了
MyEclipse下XFire开发Webservice实例 -
yaoyy:
...
MyEclipse下XFire开发Webservice实例 -
hyl523:
好,明白了,多谢!
MyEclipse下XFire开发Webservice实例
JXL 读写以及修改EXCEL文件
首先引用网上的文章,谈谈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:16px;">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>
- <span style="font-size:16px;">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"));
执行就可以看到进行了修改
- jexcelapi_2_6_12.tar.gz (1.8 MB)
- 下载次数: 19
- JExcelUtil.zip (1.1 KB)
- 下载次数: 8
发表评论
-
JDK使用InvocationHandler和Proxy实现动态代理
2013-06-11 23:54 978----------------------- ... -
java 内存溢出
2013-06-03 16:25 807java虚拟机的内存基本概念: PermGen spac ... -
java Base64encoder 加密解密
2012-11-18 00:11 2035代码: package Encryption; ... -
java NIO (转)
2012-11-06 16:11 7791. 基本 概念 IO 是主存和外部设备 ( 硬盘、终 ... -
Socket + json + tomcat
2012-10-24 15:09 1321本文主要实现不同tomcat服务器之间通过socket通信,数 ... -
java 日志 log4j和slf4j
2012-10-22 23:01 926log4j简易入门 package ... -
java JDBC
2012-10-09 11:34 795分为6个步骤 1. load the driver (1)Cl ... -
java 文件上传下载
2012-09-09 12:05 953文件下载 import java.io.Buff ... -
java JExcelUtil
2012-09-09 11:54 4import java.io.File; imp ... -
java 日记
2012-09-06 23:14 5641、调用本地动态库(.dll),使用技术 jna 2、 ... -
java IO
2012-09-02 17:20 904流(IO管道): 1、inputStream O ... -
java 线程
2012-09-02 00:06 680线程:线程并行;方 ... -
java的基本数据类型
2012-08-16 16:03 7java的8种基本数据类型包括:byte、short、 ... -
java Junit
2012-08-11 00:19 807什么是单元测试 ... -
Java Socket编程
2012-08-08 21:13 617第一步 充分理解Socket ... -
java 反射 获得属性值
2012-05-02 22:55 2857通过java反射获得属性值 J ... -
JAVA IO 乱码
2012-05-02 22:59 42012-04-18 20:38 最近在做HTML静态生 ... -
Java 开发代理服务器
2012-08-07 11:01 713代理服务器的应用非 ...
相关推荐
Java提供了多种库来实现这样的功能,这些库通常能够处理不同版本的Excel文件,包括32位和64位系统上的文件。 首先,我们需要了解Java中的主要库,如Apache POI和JExcelAPI,它们是用于读取和操作Excel文件的流行...
Java Excel API是一个强大的工具,允许Java开发者方便地读取、写入和操作Microsoft Excel文件。在Eclipse这样的集成开发环境中,使用Java Excel API可以轻松处理各种Excel数据操作任务。本教程将详细介绍如何在...
JavaExcel是一个广泛使用的术语,指的是使用Java处理Excel文件的相关技术,特别是Apache POI库。Apache POI是一个开源项目,允许Java开发者读取、写入和修改Microsoft Office格式的文件,其中包括Excel(.xlsx和.xls...
Java Excel比较代码主要涉及到的是Apache POI库的使用,这是一个强大的API,允许Java开发者读取、写入和修改Microsoft Office格式的文件,包括Excel。在本项目中,它被用来对比两个Excel工作表中的数据差异。 ...
JavaExcel是一个纯Java实现的Excel操作组件,它允许开发者在Java应用程序中轻松地读取、创建和修改Excel文件。这个组件通常被称为JExcelAPI,它提供了丰富的API接口,使得处理Excel数据变得简单而高效。JExcelAPI...
java excel 生成6级级联。加一个poi.jar就行。
该项目是一款基于SpringBoot、JDBC、Mybatis和EasyExcel的Java Excel批量导入导出解决方案源码,包含22个文件,其中包括10个Java源文件、2个Markdown文件、2个XML文件、1个Git忽略文件、1个JAR包文件、1个属性文件、...
Java Excel API 是一个开源项目,专门用于在Java环境中处理Excel文件。这个API使得开发者无需依赖Windows操作系统,就能在任何平台上创建、读取和修改Excel文件。由于它是用Java编写的,因此非常适合在Web应用程序中...
### JAVA Excel API教程知识点概述 #### 一、Java Excel API简介 Java Excel API是一种用于处理Microsoft Excel文件(.xls和.xlsx格式)的强大工具。通过Java Excel API,开发人员能够轻松地在Java应用程序中读取、...
java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入java Excel 导出 导入
"javaExcel大数据导出"这个话题涉及到的主要知识点包括:Java与Excel的交互、大数据处理策略、性能优化以及内存管理。 1. **Java与Excel的交互**: Java可以通过多种库来实现与Excel的交互,如Apache POI、...
java Excel相关处理 java Excel相关处理java Excel相关处理 java Excel相关处理java Excel相关处理 java Excel相关处理java Excel相关处理 java Excel相关处理java Excel相关处理 java Excel相关处理java Excel相关...
Java Excel写入与导出是Java开发者在处理数据时经常遇到的任务,特别是在数据分析、报表生成或者数据导入导出等场景。这项技术主要依赖于Apache POI库,它是一个开源项目,提供了读取、写入Microsoft Office格式文件...
本示例主要关注如何使用Apache POI库来实现JavaExcel导出功能。Apache POI是一个开源项目,它提供了读取和写入Microsoft Office格式文件的能力,包括Excel。 首先,你需要在你的项目中引入Apache POI依赖。如果你...
Java Excel API,通常指的是jxl库,是一个广泛使用的开源Java库,用于读写Microsoft Excel文件。这个库使得在Java程序中处理Excel数据变得极其便捷,无论是读取现有的工作簿、创建新的工作簿,还是修改现有表格,jxl...
Java Excel工具类与LIB指的是在Java编程环境中处理Excel文件的一系列方法和库。这些工具能够帮助开发者轻松地创建、读取、修改Excel文件,并且能够将Excel数据转换为Java对象,反之亦然。这里提到的"XLSUtils.java...
在Java编程领域,生成Excel报表是一项常见的任务,尤其在数据可视化和组织结构管理中。"java excel tree"这个主题正是关于如何使用Java来创建一个基于Excel的组织架构报表,它利用了组合模式和一系列算法来实现自动...
Free Spire.XLS for Java是一款专门针对Java平台的开源Excel处理类库,它允许开发者在Java应用程序中创建、读取、修改和导出Excel文件。这个版本为2.2.0,提供了丰富的功能和易用的API,使得与Excel文件交互变得更加...
Java Excel日历控件是一种在Java应用程序中用于展示和交互日期选择的组件,它使得用户能够方便地在GUI(图形用户界面)中处理日期相关的任务。这种控件通常被集成到Java Swing或JavaFX框架中,以提供类似Excel中日历...