jxl文档说明-java excel api 说明手册.doc
jxl.jar使用方法
jxl.jar通过java操作excel表格的工具类库支持Excel 95-2000的所有版本生成Excel 2000标准格式支持字体、数字、日期操作能够修饰单元格属性支持图像和图表应该说以上功能已经能够大致满足我们的需要。
最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
搭建环境将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。
基本操作一、创建文件拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:代码(CreateXLS.java)://生成Excel的类import java.io.*;import jxl.*;import bel;import jxl.write.Number;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class CreateXLS {public static void main(String args[]) {try {// 打开文件WritableWorkbook book = Workbook.createWorkbook(new File("测试.xls"));// 生成名为“第一页”的工作表,参数0表示这是第一页WritableSheet sheet = book.createSheet("第一页", 0);// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)// 以及单元格内容为testLabel label = new Label(0, 0, "test");// 将定义好的单元格添加到工作表中sheet.addCell(label);/** 生成一个保存数字的单元格必须使用Number的完整包路径,否则有语法歧义单元格位置是第二列,第一行,值为789.123*/Number number = new Number(1, 0, 789.123);sheet.addCell(number);// 写入数据并关闭文件book.write();book.close();} catch (Exception e) {System.out.println(e);}}}编译执行后,会在当前位置产生一个Excel文件。
excel操作(jxl)
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
Excel高级操作 Excel高级操作
一、 数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期 Excel中不涉及复杂的数据类型,能够比较好的处理字串、 中不涉及复杂的数据类型 已经能够满足一般的应用。 已经能够满足一般的应用。 字串格式化 字符串的格式化涉及到的是字体、粗细、字号等元素, 字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主 要由WritableFont WritableCellFormat类来负责 WritableFont和 要由WritableFont和WritableCellFormat类来负责
excel操作 操作(jxl) Java excel操作(jxl)
IBM 课程体系
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
本讲目标
java导入导出excel操作(jxl) Java解释Excel数据(jxl.jar包的使用)
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
读取Excel文件 读取Excel文件 Excel
public static void readExcel()throws Exception throws {Workbook workBook=Workbook.getWorkbook(new new File("D:\\my_project\\JXL_Test\\test.xls")); Sheet sheet=workBook.getSheet(0); int totalRow=sheet.getRows();//总行数 List<Person> personList=new ArrayList<Person>(); new for(int for int i=1;i<totalRow;i++) {Person p=new Person(); new Cell personIdCell=sheet.getCell(0,i);//行 列 Cell personNameCell=sheet.getCell(1,i); Cell personAddressCell=sheet.getCell(2,i); Cell personAgeCell=sheet.getCell(3,i); p.setPersonId(Integer.valueOf(personIdCell.getContents()));//得到内容 p.setAddress(personAddressCell.getContents()); p.setAge(Integer.valueOf(personAgeCell.getContents())); p.setPersonName(personNameCell.getContents()); J2EE_Struts personList.add(p);
jxl使用说明文档
jxl.jar概述通过java操作excel表格的工具类库支持Excel 95-2000的所有版本生成Excel 2000标准格式支持字体、数字、日期操作能够修饰单元格属性支持图像和图表应该说以上功能已经能够大致满足我们的需要。
最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
编辑本段搭建环境将下载后的文件解包,得到JXL.JAR,放入classpath,安装就完成了。
如果包不能正常的加载,可以把你下载好的JXL.JAR包放入D:\JAVA\jre\lib\ext 中(我的是JDK1.6)就OK了。
我相信在配置TOMCAT时也需要把相关的三个包放到这里面。
编辑本段基本操作一、创建文件拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:代码(CreateXLS.java)://生成Excel的类import java.io.*;import jxl.*;import jxl.write.*;public class CreateXLS{public static void main(String args[]){try{//打开文件WritableWorkbook book=Workbook.createWorkbook(new File(“测试.xls”));//生成名为“第一页”的工作表,参数0表示这是第一页WritableSheet sheet=book.createSheet(“第一页”,0);//在Label对象的构造子中指名单元格位置是第一列第一行(0,0)//以及单元格内容为testLabel label=new Label(0,0,”test”);//将定义好的单元格添加到工作表中sheet.addCell(label);/*生成一个保存数字的单元格必须使用Number的完整包路径,否则有语法歧义单元格位置是第二列,第一行,值为789.123*/jxl.write.Number number = new jxl.write.Number(1,0,789.123);sheet.addCell(number);//写入数据并关闭文件book.write();book.close();}catch(Exception e){System.out.println(e);}}}编译执行后,会在当前位置产生一个Excel文件。
Java操作Excel(poi、jxl_包介绍)
笔记——Java操作Excel(poi,jxl)使用poi或jxl操作excel的时候,设置格式,是一件挺麻烦的事情,面对用户的各种格式设置需求,你可能跟我开始时一样,无从下手。
多数格式设置,大家在网上都能很容易的找到答案,但是有一些还难注意或发现。
下边分享一下我的经验:用poi设置excel格式Poi设置单元格格式一般使用HSSFCellStyle:HSSFWorkbook book = new HSSFWorkbook();…HSSFCellStyle style = book.createCellStyle();//创建单元格样式style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置水平居中style.setV erticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置垂直居中style.setBorderTop(HSSFCellStyle.BORDER.THIN);//单元格上边框style.setBorderBottom(HSSFCellStyle.BORDER.THIN);//单元格下边框style.setBorderLeft(HSSFCellStyle.BORDER.THIN);//单元格左边框style.setBorderRight(HSSFCellStyle.BORDER.THIN);//单元格右边框style.setWrapText(true);//设置自动换行(如果没设置高度,则自适应行高度)…HSSFFont font = book.createFont();//创建字体样式font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗…style.setFont(font);//给单元格设置字体样式…HSSFSheet sheet = book.createSheet(“工作表名称”);//创建工作表sheet.getPrintSetup().setLandscape(true);//页面设置横向打印…HSSFRow row = sheet.createRow(0);//第1行HSSFCell cell = row.createCell((shot)0);//第1列cell.setCellStyle(style);//给单元格设置样式cell.setCellV alue(new HSSFRichTextString(“单元格内容”));…Region region = new Region();region.setRowFrom(0);region.setRowTo(0);region.setColumnFrom((shot)0);region.setColumnTo((shot)12);sheet.addMergedRegion(region);//合并第1行的第1到13列用jxl设置excel格式Jxl设置单元格格式一般使用WritableCellFormat:WritableCellFormat format = new WritableCellFormat();//创建单元格样式format.setAlignment(Alignment.LEFT);//设置居左format.setBorder(Border.ALL,BorderLineStyle.THIN);//设置边框…format.setWarp(true);//设置自动换行(如果没设置高度,则自适应行高度)…WritableWorkBook book = null;…WritableSheet sheet = book.createSheet(“工作表名”,i);sheet.getSettings().setOrientation(NDSCAPE);//页面设置横向打印sheet.addCell(new Label(0,1, “单元格内容”,format));//给单元格设置样式sheet.mergeCells(0,2,18,2);//合并第3行的第1到19列不全,后续补充…。
通过代码实例跟我学如何应用Java操作Excel电子表格——应用JXL系统库操作Excel电子表格的应用实例
1.1通过代码实例跟我学如何应用Java操作Excel电子表格——应用JXL 系统库操作Excel电子表格的应用实例1.1.1JXL系统库相关的应用技术jxl是一个韩国人写的java操作excel的工具, 在开源世界中,有两套比较有影响的API 可供使用,一个是POI,一个是jExcelAPI。
其中功能相对POI比较弱一点。
但jExcelAPI 对中文支持非常好,API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
在项目中使用jxl需要加载jxl的系统库jxl.jar文件,并将它放入项目的classpath 路径中。
1、新建一个Java应用程序项目2、在项目中导入jxl的系统库jar包文件3、创建CreateExcel程序类文件在本项目jxldemo中的test包中创建一个生成Excel的类,类名为CreateExcel。
该类拟生成一个名为“test.xls”的Excel文件,其中第一个工作表被命名为“第一页”。
4、CreateExcelDemo程序代码package com.px1987.jexcelapi;import java.io.*;import jxl.Workbook;import jxl.write.*;public class CreateExcelDemo {public CreateExcelDemo() throws IOException,WriteException {//在项目所在的根目录下创建一个名称为excelData.xls的Excel 文件WritableWorkbook oneExcelBook = Workbook.createWorkbook(new File("excelData.xls"));//生成名为“2009年销售指标”的工作表,参数0表示这是第一页WritableSheet oneSheetInBook = oneExcelBook.createSheet( "2009年销售指标", 0); //通过Label对象的构造方法中指明单元格位置是第一列第一行以及单元格的数据内容为“销售量”Label oneCell = new Label(0, 0, "销售量" );oneSheetInBook.addCell(oneCell); //将定义好的单元格添加到工作表中//再生成一个单元格,位置为第二列第一行以及单元格的数据内容为“我们所添加的内容”Label twoCell = new Label(1, 0, "我们所添加的内容" );oneSheetInBook.addCell(twoCell); //将定义好的单元格添加到工作表中oneExcelBook.write(); //将所创建出的Excel文件保存到磁盘文件中oneExcelBook.close(); //关闭文件输出流以真正地完成数据输出操作}public static void main(String[] args) throws IOException,WriteException{new CreateExcelDemo();}}5、读取Excel文件中数据的程序代码示例package com.px1987.jexcelapi;import java.io.*;import jxl.*;import jxl.read.biff.BiffException;public class ReadExcelDemo {public ReadExcelDemo() throws BiffException,IOException{Workbook oneExcelBook = Workbook.getWorkbook(new File("excelData.xls"));Sheet firstSheet = oneExcelBook.getSheet(0); //获得第一个工作表对象Cell oneCell1 = firstSheet.getCell(0 , 0); //获得工作表中的第一列第一行的单元格String cellContent = oneCell1.getContents(); //获得该单元格中的内容System.out.println(cellContent);oneExcelBook.close();}public static void main(String[] args) throws BiffException,IOException{new ReadExcelDemo();}}6、修改Excel文件中数据的程序代码示例利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。
Java操作Excel之JXL(填充EXCEL模板)转载
Java操作Excel之JXL(填充EXCEL模板)转载Java操作Excel之理解JXL--读取Excel 说到如何⽤JXL读取Excel⽂件,现在来看看如何读取Excel模板然后把动态数据写⼊到模板以⽣成特定格式的Excel。
同样的思路,先来考虑下会涉及到那些对象,和上篇⽂章读取相⽐这⾥涉及到⼀个写⼊的步骤,所以JXL必然会提供⼀个对象来⽀持写⼊,这就是WritableWorkbook。
那么如何得到到这个类的实例,查看APIDoc发现Workbook类提供了⼏个静态的createWorkbook⽅法返回WritableWorkbook实例,可以看到众多createWorkbook⽅法主要分为两类:⼀个参数和两个参数。
简单分析可以得知前者仅仅是⽤来直接⽣成Excel⽂件,后者先读取模板再向模板写⼊数据然后⽣成Excel。
(还有⼀个三参数⽅法加上⼀个⽤来设置workbook的参数)现在按照上篇⽂章中所讲述的流程来看看读取模板并写⼊需要那些步骤。
第⼀步:选择模板⽂件:Workbook wb = Workbook.getWorkbook(new File(realpath));第⼆步:通过模板得到⼀个可写的Workbook:WritableWorkbook wwb = Workbook.createWorkbook(targetFile, wb);第⼀个参数是⼀个输出流对象,⽐如可以ByteArrayOutputStream targetFile = new ByteArrayOutputStream();这样定义这个输出流对象。
第⼆个参数代表了要读取的模板。
第三步:选择模板中名称为StateResult的Sheet:WritableSheet wws = wwb.getSheet("StateResult");如果需要也可以创建SheetWritableSheet wws = wwb.createSheet("Sheet名称",i);第四步:选择单元格,写⼊动态值,根据单元格的不同类型转换成相应类型的单元格:Label A1 = (Label)wws.getWritableCell(0,0);A1.setString("单元格内容")或Number A2 = (Number)wws.getWritableCell(0,1);//Number是jxl.write.NumberA2.setValue(3.3);也可以创建新的单元格并且加⼊到Sheet中Label C1 = new Label(2,0,"单元格内容");wws.addCell(C1);或Number C1 = new Number(2,0,3.3);wws.addCell(C1);在⽣成Excel报表的时候还会遇到⼀种需求就是数据的格式问题,我们可能希望数值型单元格以某种格式显⽰,⽽字符串型单元格以另⼀种格式显⽰。
JXL操作Excel部分详解(java)
JXL操作Excel部分详解(java)// 打开⽂件WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ));// ⽣成名为“第⼀页”的⼯作表,参数0表⽰这是第⼀页WritableSheet sheet = book.createSheet( " 第⼀页 " , 0 );// 在Label对象的构造⼦中指名单元格位置是第⼀列第⼀⾏(0,0)// 以及单元格内容为testLabel label = new Label( 0 , 0 , " test " );// 将定义好的单元格添加到⼯作表中sheet.addCell(label);/** ⽣成⼀个保存数字的单元格必须使⽤Number的完整包路径,否则有语法歧义单元格位置是第⼆列,第⼀⾏,值为789.123 */jxl.write.Number number = new jxl.write.Number( 1 , 0 , 555.12541 );sheet.addCell(number);// 写⼊数据并关闭⽂件book.write();book.close();// 获得第⼀个⼯作表对象Sheet sheet = book.getSheet( 0 );// 得到第⼀列第⼀⾏的单元格Cell cell1 = sheet.getCell( 0 , 0 );String result = cell1.getContents();System.out.println(result);// Excel获得⽂件Workbook wb = Workbook.getWorkbook( new File( " test.xls " ));// 打开⼀个⽂件的副本,并且指定数据写回到原⽂件WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ),wb);// 添加⼀个⼯作表WritableSheet sheet = book.createSheet( " 第⼆页 " , 1 );sheet.addCell( new Label( 0 , 0 , " 第⼆页的测试数据 " ));book.write();book.close();WritableSheet.mergeCells( int m, int n, int p, int q);// 作⽤是从(m,n)到(p,q)的单元格全部合并,⽐如:WritableSheet sheet = book.createSheet(“第⼀页”, 0 );// 合并第⼀列第⼀⾏到第六列第⼀⾏的所有单元格sheet.mergeCells( 0 , 0 , 5 , 0 );Workbook book = Workbook.getWorkbook( new File( " 测试1.xls " ));// 获得第⼀个⼯作表对象Sheet sheet = book.getSheet( 0 );// 得到第⼀列第⼀⾏的单元格int columnum = sheet.getColumns(); // 得到列数int rownum = sheet.getRows(); // 得到⾏数System.out.println(columnum);System.out.println(rownum);for ( int i = 0 ; i < rownum; i ++ ) // 循环进⾏读写 {for ( int j = 0 ; j < columnum; j ++ ) {Cell cell1 = sheet.getCell(j, i);String result = cell1.getContents();System.out.print(result);System.out.print( " \t " );}System.out.println();}book.close();。
JXL中文开发文档
在开源世界中,有两套比较有影响的 API 可供使用,一个是 POI,一个是 jExcelAPI。
1.3 比较开源工具的优缺点
1.3.1 Jxl 优缺点
Jxl 特征有如下描述: ● 支持 Excel 95-2000 的所有版本 ● 生成 Excel 2000 标准格式 ● 支持字体、数字、日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套 API 是纯 Java 的, 并不依赖 Windows 系统,即使运行在 Linux 下,它同样能够正确的处理 Excel 文件。另 外需要说明的是,这套 API 对图形和图表的支持很有限,而且仅仅识别 PNG 格式。
通过 Workbook,Sheet ,Cell 这三个对象我们就可以实现 Excel 文件的读取工作。 我们先想想一下读取步骤,不管是什么样的 Excel 操作框架必定都要经历
1、 选取 Excel 文件得到工作薄 2、 选择工作表 3、 选择 Cell 4、 读取信息
2.2.1 读取工作薄
选取 Excel 文件得到工作薄 Workbook Workbook workbook = Workbook.getWorkbook(new File("myfile.xls"));
2.3.3.6添加 Boolean 对象
Boolean labelB = new jxl.write.Boolean(0, 2, false); ws.addCell(labelB);
2.3.3.7添加 DateTime 对象
DateTime labelDT = new DateTime(0, 3, new java.util.Date()); ws.addCell(labelDT);
JXL生成的excel文件+JAVA文件下载功能
JXL生成的excel文件+JAVA文件下载功能一个需求,用户点击下载按钮,将指定的excel的报表模板使用数据库数据渲染,然后下载到用户本地;通常而言,对于一个文件的下载,可以有以下几种方式:window.location.href=文件名称URL全路径;window.open(文件名称URL全路径);这种方式不友好的地方在于服务器的目录结构直接暴露出去,而且在IE下很有可能会报错权限问题等,甚至firefox中会触发那个年代久远而依然没有解决的bug。
所以这里不推荐。
对于jxl生成excel文件,有两种方式,一种是生成文件保存到磁盘,另一种是直接保存到输出流中。
对于上述需求,如果生成的文件保存到磁盘,随着系统运行,磁盘会主键被占用,需要手动去删除。
由于文件都较小,所以这里采用第二种方式,直接在内存中生成文件,然后提供给用户下载的时候response回去。
看一个例子:用于响应下载请求的controller/*** 下载个人订单* @param request* @param response* @param modelMap*/@RequestMapping(value="/download.do",method=RequestMethod.GET)public void processDownload(HttpServletRequest request,HttpServletResponse response, ModelMap modelMap) {long userId = getUserId(request);String ids = request.getParameter("ids");try {Long[] idarray =getIdsFromStringArray(ids.split(","));if (null == idarray || 0 == idarray.length) { return;}// 直接往response的输出流中写excelOutputStream outputStream =response.getOutputStream();// 获取文件名称String fileName = getUserFileName(userId);// 下载格式设置response.setContentType("APPLICATION/OCTET-STREAM"); response.setHeader("Content-Disposition", "attachment; filename=/"" + fileName + "/"");// 读取数据渲染模板并写入outputstream中List<PhAdvertiseOrderDO> advertiseOrderList = phAdvertiseOrderService.getAdvertiseOrderByIds(idarray, userId);outputStream =excelFileService.generalExcelFileInOutputStream(outputStream, advertiseOrderList);outputStream.close();} catch (Exception e) {logger.error("下载报表发生异常!", e);}} </pre>其中调用到的文件服务/* (non-Javadoc)* @seeease.photography.service.ExcelFileService#generalExcelF ileInOutputStream(ng.String, java.io.OutputStream, java.util.List)*/public OutputStreamgeneralExcelFileInOutputStream(OutputStream outputStream,List<PhAdvertiseOrderDO> advertiseOrderList) throws BiffException, IOException, WriteException {// 检查参数是否合法checkParam(tempalteFile,"no File",advertiseOrderList);// 获取模板Workbook templatebook = Workbook.getWorkbook(newFile(tempalteFile));WritableWorkbook writeableWorkbook =Workbook.createWorkbook(outputStream, templatebook);// 读取数据写入模板readDataAndWriteTemplate(templatebook, writeableWorkbook, advertiseOrderList);return outputStream;} </pre>其中的重点就在于WritableWorkbook writeableWorkbook = Workbook.createWorkbook(outputStream, templatebook);这句话指定了写入的数据到输出流中。
jxl导出数据到excel的实例讲解
jxl导出数据到excel的实例讲解优点:Jxl对中⽂⽀持⾮常好,操作简单,⽅法看名知意。
Jxl是纯javaAPI,在跨平台上表现的⾮常完美,代码可以再windows或者Linux上运⾏⽽⽆需重新编写⽀持Excel 95-2000的所有版本(⽹上说⽬前可以⽀持Excel2007了,还没有尝试过)⽣成Excel 2000标准格式⽀持字体、数字、⽇期操作能够修饰单元格属性⽀持图像和图表,但是这套API对图形和图表的⽀持很有限,⽽且仅仅识别PNG格式。
缺点:效率低,图⽚⽀持不完善,对格式的⽀持不如POI强⼤案例:String times = (new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date());String fname = "系统⽇志" + times; // ⽂件名List<Logs> list=logsService.selectForList(hql.toString());String path = request.getSession().getServletContext().getRealPath("/")+ "xls/"+ (new SimpleDateFormat("yyyyMMdd")).format(new Date());File file = new File(path);// 如果⽂件夹不存在则创建if (!file.exists() && !file.isDirectory()) {file.mkdir();}response.setContentType("application/vnd.ms-excel;charset=utf-8");// // 指定⽂件的保存类型。
java利用jxl工具包操作Excel文件
java利用jxl工具包操作Excel文件2009-11-27 13:00简单讲解使用操作Excel的常用第三方工具包jxl来实现对Excel文件的读写。
我们先看一下读的操作:Java代码1./**2. * 读3. * @param file 欲读取的Excel文件的路径4. * @return5. * @throws Exception6. */7.public static String read(File file) throws Exception {8. StringBuffer sb = new StringBuffer();9.10. Workbook wb = null;11. try {12. // 获取工作簿对象13. wb = Workbook.getWorkbook(file);14. if (wb != null) {15. // 获取工作簿对象就可以获取工作簿内的工作表对象16. Sheet[] sheets = wb.getSheets();17. if (sheets != null && sheets.length != 0) {18. // 遍历工作簿内所有工作表19. for (int i=0;i<sheets.length;i++) {20. // 获取该工作表内的行数21. int rows = sheets[i].getRows();22. // 遍历行23. for (int j=0;j<rows;j++) {24. // 获取当前行的所有单元格25. Cell[] cells =sheets[i].getRow(j);26. if (cells != null && cells.length !=0) {27. // 遍历单元格28. for(int k=0;k<cells.length;k++){29. // 获取当前单元格的值30. String cell =cells[k].getContents();31. // 缩进32. sb.append(cell + "\t");33. }34. sb.append("\t\n");35. }36. }37. sb.append("\t\n");38. }39. }40. System.out.println("成功读取了:" + file +"\n");41. }42. } catch (Exception e) {43. System.out.println(e.getMessage());44. } finally {45. wb.close();46. }47. return sb.toString();48. }的返回类型是一个String,我定义了一个StringBuffer对象,大家知道StringBuffer 作是 append 和 insert 方法,可以重载这些方法,以接受任意类型的数据。
JXL设置字体、颜色、背景等
使用JXL JExcelApi 生成Excel文档,并且设置字体、颜色、背景等2009-05-20 11:38package com.test.excel;import java.io.File;import java.io.IOException;import jxl.Workbook;import jxl.format.Border;import jxl.format.Colour;import jxl.format.UnderlineStyle;import jxl.format.BorderLineStyle;import jxl.write.Formula;import bel;import jxl.write.Number;import jxl.write.WritableCell;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;public class TestExcel {public static void writeExcel(File file){try {//创建一个Excel文档WritableWorkbook workbook = Workbook.createWorkbook(file);//创建一个SheetWritableSheet sheet = workbook.createSheet("Report-1", 0);//是否显示网格sheet.getSettings().setShowGridLines(true);//设置列宽sheet.getSettings().setDefaultColumnWidth(9);//设置行高sheet.getSettings().setDefaultRowHeight(500);Label label = new Label(1,1,"This is a Lable");sheet.addCell(label);//设置字体WritableFont font = newWritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineS tyle.NO_UNDERLINE,Colour.RED);WritableCellFormat cFormat = new WritableCellFormat(font);//设置背景色cFormat.setBackground(Colour.LIGHT_BLUE);Label label2 = new Label(5,13,"hello new Label",cFormat); sheet.addCell(label2);WritableSheet sheet2 = workbook.createSheet("report-2", 1);WritableCellFormat newFormat = new WritableCellFormat();newFormat.setBorder(Border.ALL, BorderLineStyle.DOUBLE);Label label3 = new Label(3,6,"border",newFormat);sheet.addCell(label3);Formula l3 = new Formula(10,10,"=SUM(C4:C5)");//公式暂未成功,本来准备计算l1与l2的和,并显示到l3,未成功 //WritableCell cell = l3.copyTo(2, 5);Number l1 = new Number(2,3,3);Number l2 = new Number(2,4,4);sheet.addCell(l1);sheet.addCell(l2);//sheet.addCell(cell);workbook.write();workbook.close();} catch (IOException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}public static void main(String args[]){File file = new File("d:/test.xls");writeExcel(file);}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////jxl写入excel时格式处理右对齐粗体颜色等等//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////File tempFile=new File("d:/temp/output.xls");WritableWorkbook workbook = Workbook.createWorkbook(tempFile);WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);//一些临时变量,用于写到excel中Label l=null;jxl.write.Number n=null;jxl.write.DateTime d=null;//预定义的一些字体和格式,同一个Excel中最好不要有太多格式WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD,false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLUE);WritableCellFormat headerFormat = new WritableCellFormat (headerFo nt);WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);WritableCellFormat titleFormat = new WritableCellFormat (titleFont );WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, Wr itableFont.NO_BOLD,false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLACK);WritableCellFormat detFormat = new WritableCellFormat (detFont);NumberFormat nf=new NumberFormat("0.00000"); //用于Number的格式WritableCellFormat priceFormat = new WritableCellFormat (detFont,nf);DateFormat df=new DateFormat("yyyy-MM-dd");//用于日期的WritableCellFormat dateFormat = new WritableCellFormat (detFont, d f);//剩下的事情,就是用上面的内容和格式创建一些单元格,再加到sheet中l=new Label(0, 0, "用于测试的Excel文件", headerFormat);sheet.addCell(l);//add Titleint column=0;l=new Label(column++, 2, "标题", titleFormat);sheet.addCell(l);l=new Label(column++, 2, "日期", titleFormat);sheet.addCell(l);l=new Label(column++, 2, "货币", titleFormat);sheet.addCell(l);l=new Label(column++, 2, "价格", titleFormat);sheet.addCell(l);//add detailint i=0;column=0;l=new Label(column++, i+3, "标题 "+i, detFormat);sheet.addCell(l);d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);sheet.addCell(d);l=new Label(column++, i+3, "CNY", detFormat);sheet.addCell(l);n=new jxl.write.Number(column++, i+3, 5.678, priceFormat);sheet.addCell(n);i++;column=0;l=new Label(column++, i+3, "标题 "+i, detFormat);sheet.addCell(l);d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);sheet.addCell(d);l=new Label(column++, i+3, "SGD", detFormat);sheet.addCell(l);n=new jxl.write.Number(column++, i+3, 98832, priceFormat);sheet.addCell(n);//设置列的宽度column=0;sheet.setColumnView(column++, 20);sheet.setColumnView(column++, 20);sheet.setColumnView(column++, 10);sheet.setColumnView(column++, 20);workbook.write();workbook.close();我正在做的项目里定义了很多样式,好像速度也不算慢,还有一些其他方面的定义,补充到下面://构造格式:ARIAL字体、10号、粗体、非斜体、无下划线、黑色WritableFont fmtx2TotalCaption = new WritableFont(WritableFont. ARIAL,10,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);WritableCellFormat totalx2Format = new WritableCellFormat(fmtx2 TotalCaption);//文字垂直居中对齐totalx2Format.setVerticalAlignment(jxl.format.VerticalAlignment .CENTRE);//文字水平居中对齐totalx2Format.setAlignment(jxl.format.Alignment.CENTRE);//边框深蓝色totalx2Format.setBorder(jxl.format.Border.ALL,jxl.format.Border LineStyle.THIN,jxl.format.Colour.DARK_BLUE);//设置底色为冰蓝totalx2Format.setBackground(jxl.format.Colour.ICE_BLUE);sheet.mergeCells(0, row, 8, row); //合并单元格,row 到 row 行,0 到 8 列sheet.setRowView(row, 600);// 第 row 行的高度另外就是要在 Action(servlet) 中这么写,IE就会直接弹出保存文件的对话框(注意要占用当前窗口):String title = "XXXX统计";OutputStream out = response.getOutputStream();WritableWorkbook wb = Workbook.createWorkbook(out);response.setContentType("aplication/vnd.ms-excel")s;response.addHeader("Content-Disposition","inline; filename=" + new String(title.getBytes("GB2312"),"ISO8859_1") + ".xls"); //有中文必须转码。
JXL,POI 操作Excel
JXL,POI 操作 Excel
前言
• 用Java操作Excel文档,目前有以下方法: • JXL • POI
7、设置单元格字体 // 设置字体 jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont( "楷书"), 20); WritableCellFormat font = new WritableCellFormat(wfont); label = new Label(2, 6, "楷书", font); sheet.addCell(label);
• JXL和POI的区别
• POI Project 与 Java Excel API 在开源世界中可以说是并驾齐 驱,但是也各有优劣,poi在某些细节有些小Bug并且不支持写入 图片(poi其实可以写入图片,不过没有jxl来的方便,比较麻烦) ,其他方面都挺不错的;而JXL提供了对图片的支持(但是仅仅支 持png格式的图片),问题就是对公式支持不是很好,但还是提供 了简单的公式读取支持。因此你的项目中要选用什么样的第三方 插件为完全由你的应用来决定。如果你的软件是跟财务有相当的 关系的话,建议采用 POI Project。
4、填充数据
数据填充这块稍微复杂点,涉及到数据单元格的格式问题。 a)、填充数字 jxl.write.Number numb = new jxl.write.Number(1, 1, 250); sheet.addCell(numb); b)、填充格式化的数字 jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##"); jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf); jxl.write.Number n = new jxl.write.Number(2, 1, 2.451, wcf); sheet.addCell(n);
Java_Excel_API(jxl)
jxl.jar目录编辑本段通过java操作excel表格的工具类库支持Excel 95-2000的所有版本生成Excel 2000标准格式支持字体、数字、日期操作能够修饰单元格属性支持图像和图表应该说以上功能已经能够大致满足我们的需要。
最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
编辑本段搭建环境将下载后的文件解包,得到JXL.JAR,放入classpath,安装就完成了。
如果包不能正常的加载,可以把你下载好的JXL.JAR包放入D:\JAVA\jre\lib\ext中(我的是JDK1.6)就OK了。
我相信在配置TOMCAT时也需要把相关的三个包放到这里面。
编辑本段一、创建文件拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:代码(CreateXLS.java)://生成Excel的类import java.io.*;import jxl.*;import jxl.write.*;public class CreateXLS{public static void main(String args[]){try{//打开文件WritableWorkbook book=Workbook.createWorkbook(new File(“测试.xls”));//生成名为“第一页”的工作表,参数0表示这是第一页WritableSheet sheet=book.createSheet(“第一页”,0);//在Label对象的构造子中指名单元格位置是第一列第一行(0,0) //以及单元格内容为testLabel label=new Label(0,0,”test”);//将定义好的单元格添加到工作表中sheet.addCell(label);/*生成一个保存数字的单元格必须使用Number的完整包路径,否则有语法歧义单元格位置是第二列,第一行,值为789.123*/jxl.write.Number number = new jxl.write.Number(1,0,789.123);sheet.addCell(number);//写入数据并关闭文件book.write();book.close();}catch(Exception e){System.out.println(e);}}}编译执行后,会在当前位置产生一个Excel文件。
用JXL操作Excel
五、单元格操作
1 合并单元格 WritableSheet.mergeCells( int col1, int ro w1, int col2, int row2); 作用:合并(col1,row1)到(col2,row2) 作用:合并(col1,row1)到(col2,row2) 比如: sheet.mergeCells( 0 , 0 , 4 , 0 );
用JXL操作Ex一、JXL概述 二、读操作 三、写操作 四、单元格内容的格式 五、单元格操作 六、其他一些功能
一、JXL概述 JXL概述
1 什么是JXL 什么是JXL jxl 是一个韩国人写的java操作excel的工 是一个韩国人写的java操作excel的工 具, 在开源世界中,有两套比较有影响的API可 在开源世界中,有两套比较有影响的API可 供使用,一个是POI,一个是jExcelAPI。其中功 供使用,一个是POI,一个是jExcelAPI。其中功 能相对POI弱一点。但jExcelAPI对中文支持非常 能相对POI弱一点。但jExcelAPI对中文支持非常 好,API是纯Java的, 并不依赖Windows系统, 好,API是纯Java的, 并不依赖Windows系统, 即使运行在Linux下,它同样能够正确的处理 即使运行在Linux下,它同样能够正确的处理 Excel文件。 另外需要说明的是,这套API对图 Excel文件。 另外需要说明的是,这套API对图 形和图表的支持很有限,而且仅仅识别PNG格 形和图表的支持很有限,而且仅仅识别PNG格 式。
一、 JXL概述 JXL概述
2 JXL的特点 JXL的特点 Reads data from Excel 95, 97, 2000 workbooks Reads and writes formulas (Excel 97 and later only) Generates spreadsheets in Excel 2000 format Supports font, number and date formatting Supports shading and colouring of cells Modifies existing worksheets Supports image creation Preserves macros on copy Customizable logging
java excel jxl oracle imp exp 使用全攻略
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);
//写入数据并关闭文件
book.write();
book.close();
“第一页”,大致效果如下:
代码(CreateXLS.java):
//生成Excel的类
import java.io.*;
import jxl.*;
import jxl.write.*;
public class CreateXLS
{
public static void main(String args[])
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
二、单元格操作
Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI
提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。
搭建环境
将下载后的文件解包,得到jxl.jar(版本为0.9.6时,需导入jxls-core-0.9.6.jar和jxls-reader-0.9.6.jar),
放入classpath,安装就完成了。
基本操作
一、创建文件
拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:
Sheet sheet=book.getSheet(0);
//得到第一列第一行的单元格
使用JXL读取Excel表格,拷贝、更新Excel工作簿
使用JXL读取Excel表格,拷贝、更新Excel工作簿1./**2.* <p>读取Excel表格,拷贝、更新Excel工作薄 </p>3.* <p>Description: 可以读取Excel文件的内容,更新Excel工作薄4.* </p>5.* <p>Copyright: Copyright (c) Corparation 2005</p>6.* <p>程序开发环境为eclipse</p>7.* @author Walker8.* @version 1.09.*/10.package .yitong.xls;11.12.import java.io.File;13.import java.io.FileInputStream;14.import java.io.InputStream;15.import java.util.Vector;16.17.import .yitong.ChartImg;18.import .yitong.VireObj;19.import .yitong.platform.log.YTLogger;20.21.import jxl.CellType;22.import jxl.Workbook;23.import jxl.format.CellFormat;24.import jxl.format.Colour;25.import jxl.format.UnderlineStyle;26.import jxl.write.Formula;27.import bel;28.import jxl.write.Number;29.import jxl.write.WritableCell;30.import jxl.write.WritableCellFormat;31.import jxl.write.WritableFont;32.import jxl.write.WritableImage;33.import jxl.write.WritableSheet;34.import jxl.write.WritableWorkbook;35.import jxl.write.WriteException;36.import jxl.write.biff.RowsExceededException;37.38.public class XLSDemo39.{40.private static final int TITLE_LENGTH = 7;41.private static final int SHEET_WIDTH = 32;42.private static final int SHEET_HEIGHT = 116;43.44./**45.* 创建Excel46.*/47.private void makeXls()48.{49.Workbook workbook = null;50.try51.{52.// 构建Workbook对象, 只读Workbook对象53.// 直接从本地文件创建Workbook, 从输入流创建Workbook54.InputStream ins = new FileInputStream("D:/Workspace /testproj/source.xls");55.workbook = Workbook.getWorkbook(ins);56.57.// 利用已经创建的Excel工作薄创建新的可写入的Excel工作薄58.File outFile = new File("D:/Workspace/testproj/test.xls" );59.WritableWorkbook wwb = Workbook.createWorkboo k(outFile, workbook);60.// 读取第一张工作表61.WritableSheet dataSheet = wwb.getSheet(0);62.// 设置冻结单元格63.dataSheet.getSettings().setVerticalFreeze(7);64.dataSheet.getSettings().setHorizontalFreeze(2);65.66.// 测试模拟数据67.Vector vecData = new Vector();68.for(int i = 0; i < 50; i ++)69.{70.VireObj obj = new VireObj();71.obj.setOrgNo("00" + i + "0");72.obj.setOrgName("机构" + (i + 1));73.obj.setOpenAcc((int)(100 * Math.random()));74.obj.setDestoryAcc((int)(10 * Math.random()));75.obj.setTotalAcc((int)(500 * Math.random()));76.obj.setMonthInCount((int)(500 * Math.random()));77.obj.setMonthInMoney(500 * Math.random());78.obj.setMonthOutCount((int)(500 * Math.random()));79.obj.setMonthOutMoney(500 * Math.random());80.81.vecData.add(obj);82.}83.// 插入数据84.insertData(wwb, dataSheet, vecData);85.// 插入模拟图像数据86.Vector vecImg = new Vector();87.for(int i = 0; i < 3; i ++)88.{89.ChartImg img = new ChartImg();90.img.setImgTitle("图像" + (i + 1));91.img.setImgName("D:/Workspace/testproj/images/bar chart.png");92.vecImg.add(img);93.}94.// 插入图表95.insertImgsheet(wwb, vecImg);96.//写入Excel对象97.wwb.write();98.wwb.close();99.} catch (Exception e)100.{101.YTLogger.logDebug(e);102.} finally103.{104.// 操作完成时,关闭对象,释放占用的内存空间105.workbook.close();106.}107.}108.109./**110.* 插入数据111.* @param wwb WritableWorkbook : 工作簿112.* @param dataSheet WritableSheet : 工作表113.* @throws RowsExceededException114.* @throws WriteException115.*/116.private void insertData(WritableWorkbook wwb, Writa bleSheet dataSheet, Vector vecData) throws RowsExceededExce ption, WriteException117.{118.// 获得标题单元格对象119.modiStrCell(dataSheet, 2, 0, "工商银行江苏省分行个人网上银行业务种类/开销户明细报表(2005-12)", null);120.// 修改数据单元格数据121.for(int i = 0; i < vecData.size(); i ++)122.{123.VireObj obj = (VireObj)vecData.get(i);124.modiStrCell(dataSheet, 0, TITLE_LENGTH + i, obj.getOr gNo(), null);125.modiStrCell(dataSheet, 1, TITLE_LENGTH + i, obj.getOr gName(), null);126.modiNumCell(dataSheet, 2, TITLE_LENGTH + i, obj.get OpenAcc(), null);127.modiNumCell(dataSheet, 3, TITLE_LENGTH + i, obj.get DestoryAcc(), null);128.modiNumCell(dataSheet, 4, TITLE_LENGTH + i, obj.get TotalAcc(), null);129.modiNumCell(dataSheet, 5, TITLE_LENGTH + i, obj.get MonthInCount(), null);130.modiNumCell(dataSheet, 6, TITLE_LENGTH + i, obj.get TotalInMoney(), null);131.modiNumCell(dataSheet, 7, TITLE_LENGTH + i, obj.getMonthOutCount(), null);132.modiNumCell(dataSheet, 8, TITLE_LENGTH + i, obj.get MonthOutMoney(), null);133.}134.// 删除空行135.for (int j = vecData.size() + TITLE_LENGTH; j < SHEET_ HEIGHT; j++)136.{137.dataSheet.removeRow(vecData.size() + TITLE_LENGTH );138.}139.// 插入公式140.for(int i = 2; i < SHEET_WIDTH; i ++)141.{142.modiFormulaCell(dataSheet, i, vecData.size() + TITLE_L ENGTH, 8, vecData.size() + TITLE_LENGTH, null);143.}144.}145.146./**147.* 修改字符单元格的值148.* @param dataSheet WritableSheet : 工作表149.* @param col int : 列150.* @param row int : 行151.* @param str String : 字符152.* @param format CellFormat : 单元格的样式153.* @throws RowsExceededException154.* @throws WriteException155.*/156.private void modiStrCell(WritableSheet dataSheet, intcol, int row, String str, CellFormat format) throws RowsExceeded Exception, WriteException157.{158.// 获得单元格对象159.WritableCell cell = dataSheet.getWritableCell(col, row) ;160.// 判断单元格的类型, 做出相应的转化161.if (cell.getType() == CellType.EMPTY)162.{bel lbl = new Label(col, row, str);164.if(null != format)165.{166.lbl.setCellFormat(format);167.} else168.{169.lbl.setCellFormat(cell.getCellFormat());170.}171.dataSheet.addCell(lbl);172.} else if (cell.getType() == BEL)173.{bel lbl = (Label)cell;175.lbl.setString(str);176.} else if (cell.getType() == CellType.NUMBER)177.{178.// 数字单元格修改179.Number n1 = (Number)cell;180.n1.setValue(42.05);181.}182.}183.185.* 修改数字单元格的值186.* @param dataSheet WritableSheet : 工作表187.* @param col int : 列188.* @param row int : 行189.* @param num double : 数值190.* @param format CellFormat : 单元格的样式191.* @throws RowsExceededException192.* @throws WriteException193.*/194.private void modiNumCell(WritableSheet dataSheet, i nt col, int row, double num, CellFormat format) throws RowsExc eededException, WriteException195.{196.// 获得单元格对象197.WritableCell cell = dataSheet.getWritableCell(col, row) ;198.// 判断单元格的类型, 做出相应的转化199.if (cell.getType() == CellType.EMPTY)200.{201.Number lbl = new Number(col, row, num);202.if(null != format)203.{204.lbl.setCellFormat(format);205.} else206.{207.lbl.setCellFormat(cell.getCellFormat());208.}209.dataSheet.addCell(lbl);210.} else if (cell.getType() == CellType.NUMBER)212.// 数字单元格修改213.Number lbl = (Number)cell;214.lbl.setValue(num);215.} else if (cell.getType() == BEL)216.{bel lbl = (Label)cell;218.lbl.setString(String.valueOf(num));219.}220.}221.222./**223.* 修改公式单元格的值224.* @param dataSheet WritableSheet : 工作表225.* @param col int : 列226.* @param row int : 行227.* @param startPos int : 开始位置228.* @param endPos int : 结束位置229.* @param format230.* @throws RowsExceededException231.* @throws WriteException232.*/233.private void modiFormulaCell(WritableSheet dataShee t, int col, int row, int startPos, int endPos, CellFormat format) thr ows RowsExceededException, WriteException234.{235.String f = getFormula(col, row, startPos, endPos);236.// 插入公式(只支持插入,不支持修改)237.WritableCell cell = dataSheet.getWritableCell(col, row) ;238.if (cell.getType() == CellType.EMPTY)239.{240.// 公式单元格241.Formula lbl = new Formula(col, row, f);242.if(null != format)243.{244.lbl.setCellFormat(format);245.} else246.{247.lbl.setCellFormat(cell.getCellFormat());248.}249.dataSheet.addCell(lbl);250.} else if (cell.getType() == CellType.STRING_FORMULA )251.{252.YTLogger.logWarn("Formula modify not supported!");253.}254.}255.256./**257.* 得到公式258.* @param col int : 列259.* @param row int : 行260.* @param startPos int : 开始位置261.* @param endPos int : 结束位置262.* @return String263.* @throws RowsExceededException264.* @throws WriteException265.*/266.private String getFormula(int col, int row, int startPos, i nt endPos)267.throws RowsExceededException, WriteException268.{269.char base = 'A';270.char c1 = base;271.StringBuffer formula = new StringBuffer(128);272.// 组装公式273.formula.append("SUM(");274.if (col <= 25)275.{276.c1 = (char) (col % 26 + base);277.formula.append(c1).append(startPos).append(":")278..append(c1).append(endPos).append(")");279.} else if (col > 25)280.{281.char c2 = (char) ((col - 26) / 26 + base);282.c1 = (char) ((col - 26) % 26 + base);283.formula.append(c2).append(c1).append(startPos).appe nd(":")284..append(c2).append(c1).append(endPos).append(")");285.}286.287.return formula.toString();288.}289.290./**291.* 插入图表工作表292.* @param wwb WritableWorkbook : 工作簿293.* @param vecImg Vector : 图像链表294.* @throws RowsExceededException295.* @throws WriteException296.*/297.private void insertImgsheet(WritableWorkbook wwb, Vector vecImg)298.throws RowsExceededException, WriteException299.{300.// 插入图像301.WritableSheet imgSheet;302.if((wwb.getSheets()).length < 2)303.{304.imgSheet = wwb.createSheet("图表", 1);305.} else306.{307.imgSheet = wwb.getSheet(1);308.}309.310.for (int i = 0; i < vecImg.size(); i++)311.{312.ChartImg chart = (ChartImg) vecImg.get(i);313.// 插入图像标题bel lbl = new Label(0, 2 + 20 * i, chart.getImgTitle());315.WritableFont font = new WritableFont(WritableFont.A RIAL,316.WritableFont.DEFAULT_POINT_SIZE, WritableFont.NO_ BOLD, false,317.UnderlineStyle.NO_UNDERLINE, Colour.DARK_BLUE2);318.WritableCellFormat background = new WritableCellFo rmat(font);319.background.setWrap(true);320.background.setBackground(Colour.GRAY_25);321.imgSheet.mergeCells(0, 2 + 20 * i, 9, 2 + 20 * i);322.lbl.setCellFormat(background);323.imgSheet.addCell(lbl);324.// 插入图像单元格325.insertImgCell(imgSheet, 2, 4 + 20 * i, 8, 15, chart.getI mgName());326.}327.}328.329./**330.* 插入图像到单元格(图像格式只支持png)331.* @param dataSheet WritableSheet : 工作表332.* @param col int : 列333.* @param row int : 行334.* @param width int : 宽335.* @param height int : 高336.* @param imgName String : 图像的全路径337.* @throws RowsExceededException338.* @throws WriteException339.*/340.private void insertImgCell(WritableSheet dataSheet, in t col, int row, int width,341.int height, String imgName) throws RowsExceededExc eption, WriteException342.{343.File imgFile = new File(imgName);344.WritableImage img = new WritableImage(col, row, wi dth, height, imgFile);345.dataSheet.addImage(img);346.}347.348./**349.* 测试350.* @param args351.*/352.public static void main(String[] args)353.{354.XLSDemo demo = new XLSDemo();355.demo.makeXls();356.}357.}。
[word文档] JXL 中文开发文档
Excel开发文档1开发调研1.1需求描述MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。
作为办公文档,势必要涉及到的电子文档的交换,Excel是一种在企业中非常通用的文件格式,打印和管理也比较方便。
在一个Java应用中,将一部分数据生成Excel格式,是与其他系统无缝连接的重要手段。
1.2Excel开发常用开源工具在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。
1.3比较开源工具的优缺点1.3.1Jxl优缺点Jxl特征有如下描述:●支持Excel 95-2000的所有版本●生成Excel 2000标准格式●支持字体、数字、日期操作●能够修饰单元格属性●支持图像和图表应该说以上功能已经能够大致满足我们的需要。
最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
1.3.2Poi优缺点Jakarta 的POI Project 与Java Excel API 在开源世界中可以说是并驾齐驱,但是也各有优劣,poi在某些细节有些小Bug并且不支持写入图片(poi其实可以写入图片,不过没有jxl来的方便,比较麻烦),其他方面都挺不错的;而JXL提供了对图片的支持(但是仅仅支持png格式的图片),问题就是对公式支持不是很好,但还是提供了简单的公式读取支持。
因此你的项目中要选用什么样的第三方插件为完全由你的应用来决定。
如果你的软件是跟财务有相当的关系的话,建议采用POI Project,就我所在目前的项目来说由于用不到计算公式,而且很可能需要导出图片,因此,我的选择是JXL 。
1.4性能比较以及最终选择1.4.1内存消耗:(来自网络)谈下JVM虚拟机内存消耗的情况.数据量3000条数据,每条60列.JVM虚拟机内存大小64M.使用POI:运行到2800条左右就报内存溢出.使用JXL:3000条全部出来,并且内存还有21M的空间.可想而知,在对内存的消耗方面差距还是挺大的.也许是由于JXL在对资源回收利用方面做的还挺不错的。
jxl学习手册
Jxl.jar 学习通过java操作excel表格的工具类库支持Excel 95-2000的所有版本生成Excel 2000标准格式支持字体、数字、日期操作能够修饰单元格属性支持图像和图表应该说以上功能已经能够大致满足我们的需要。
最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
搭建环境:将下载后的文件解包,得到JXL.JAR,放入classpath,安装就完成了。
如果包不能正常的加载,可以把你下载好的JXL.JAR包放入D:\JA V A\jre\lib\ext中(我的是JDK1.6)就OK了。
我相信在配置TOMCA T时也需要把相关的三个包放到这里面。
基本操作:一、创建文件拟生成一个名为“测试数据.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:代码(CreateXLS.java)://生成Excel的类import java.io.*;import jxl.*;import jxl.write.*;public class CreateXLS {public static void main(String[] args) {try {// 打开文件WritableWorkbook book = Workbook.createWorkbook(new File("d:/测试.xls"));// 生成名为“第一页”的工作表,参数0表示这是第一页WritableSheet sheet = book.createSheet("第一页", 0);// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)// 以及单元格内容为testLabel label = new Label(0, 0, "test");// 将定义好的单元格添加到工作表中sheet.addCell(label);/** 生成一个保存数字的单元格** 必须使用Number的完整包路径,否则有语法歧义** 单元格位置是第二列,第一行,值为789.123*/jxl.write.Number number = new jxl.write.Number(1, 0, 789.123);sheet.addCell(number);// 写入数据并关闭文件book.write();book.close();} catch (Exception e) {System.out.println(e.toString());}}}编译执行后,会在当前位置产生一个Excel文件。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Java excel API 说明手册作者:Rubber整理:calf 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵Excel 文件并不是一件容易的事。
在Web应用日益盛行的今天,通过Web来操作Excel文件的需求越来越强烈,目前较为流行的操作是在JSP或Servlet 中创建一个CSV (comma separated values)文件,并将这个文件以MIME,text/csv类型返回给浏览器,接着浏览器调用Excel并且显示CSV文件。
这样只是说可以访问到Excel文件,但是还不能真正的操纵Excel文件,本文将给大家一个惊喜,向大家介绍一个开放源码项目,Java Excel API,使用它大家就可以方便地操纵Excel文件了。
JAVA EXCEL API简介Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel 文件、更新已经存在的Excel文件。
使用该API非Windows操作系统也可以通过纯Java应用来处理Excel 数据表。
因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel 数据表的访问。
现在发布的稳定版本是V2.0,提供以下功能:∙从Excel 95、97、2000等格式的文件中读取数据;∙读取Excel公式(可以读取Excel 97以后的公式);∙生成Excel数据表(格式为Excel 97);∙支持字体、数字、日期的格式化;∙支持单元格的阴影操作,以及颜色操作;∙修改已经存在的数据表;现在还不支持以下功能,但不久就会提供了:1. 不能够读取图表信息;2. 可以读,但是不能生成公式,任何类型公式最后的计算值都可以读出;应用示例1 从Excel文件读取数据表Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。
读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:(完整代码见ExcelReading.java)一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。
参考下面的代码片段:我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。
如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。
一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。
参考下面的代码片段:如果仅仅是取得Cell的值,我们可以方便地通过getContents()方法,它可以将任何类型的Cell值都作为一个字符串返回。
示例代码中Cell(0, 0)是文本型,Cell(1, 0)是数字型,Cell(1,1)是日期型,通过getContents(),三种类型的返回值都是字符型。
如果有需要知道Cell内容的确切类型,API也提供了一系列的方法。
参考下面的代码片段:在得到Cell对象后,通过getType()方法可以获得该单元格的类型,然后与API提供的基本类型相匹配,强制转换成相应的类型,最后调用相应的取值方法getXXX(),就可以得到确定类型的值。
API提供了以下基本类型,与Excel的数据格式相对应,如下图所示:每种类型的具体意义,请参见Java Excel API Document。
当你完成对Excel电子表格数据的处理后,一定要使用close()方法来关闭先前创建的对象,以释放读取数据表的过程中所占用的内存空间,在读取大量数据时显得尤为重要。
参考如下代码片段:Java Excel API提供了许多访问Excel数据表的方法,在这里我只简要地介绍几个常用的方法,其它的方法请参考附录中的Java Excel API Document。
Workbook类提供的方法1. int getNumberOfSheets()获得工作薄(Workbook)中工作表(Sheet)的个数,示例:2. Sheet[] getSheets()返回工作薄(Workbook)中工作表(Sheet)对象数组,示例:3. String getVersion()返回正在使用的API的版本号,好像是没什么太大的作用。
Sheet接口提供的方法1) String getName()获取Sheet的名称,示例:2) int getColumns()获取Sheet表中所包含的总列数,示例:3) Cell[] getColumn(int column)获取某一列的所有单元格,返回的是单元格对象数组,示例:4) int getRows()获取Sheet表中所包含的总行数,示例:5) Cell[] getRow(int row)获取某一行的所有单元格,返回的是单元格对象数组,示例子:6) Cell getCell(int column, int row)获取指定单元格的对象引用,需要注意的是它的两个参数,第一个是列数,第二个是行数,这与通常的行、列组合有些不同。
2 生成新的Excel工作薄下面的代码主要是向大家介绍如何生成简单的Excel工作表,在这里单元格的内容是不带任何修饰的(如:字体,颜色等等),所有的内容都作为字符串写入。
(完整代码见ExcelWriting.java)与读取Excel工作表相似,首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象,这里要注意的是,只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook 的构造函数,因为类WritableWorkbook的构造函数为protected类型。
示例代码片段如下:API提供了两种方式来处理可写入的输出流,一种是直接生成本地文件,如果文件名不带全路径的话,缺省的文件会定位在当前目录,如果文件名带有全路径的话,则生成的Excel文件则会定位在相应的目录;另外一种是将Excel对象直接写入到输出流,例如:用户通过浏览器来访问Web服务器,如果HTTP头设置正确的话,浏览器自动调用客户端的Excel应用程序,来显示动态生成的Excel电子表格。
接下来就是要创建工作表,创建工作表的方法与创建工作薄的方法几乎一样,同样是通过工厂模式方法获得相应的对象,该方法需要两个参数,一个是工作表的名称,另一个是工作表在工作薄中的位置,参考下面的代码片段:"这锅也支好了,材料也准备齐全了,可以开始下锅了!",现在要做的只是实例化API所提供的Excel基本数据类型,并将它们添加到工作表中就可以了,参考下面的代码片段:WritableFont.BOLD, true);jxl.write.WritableCellFormat wcfF = newjxl.write.WritableCellFormat(wf);bel labelCF = new bel(1, 0, "This is a Label Cell", wcfF);ws.addCell(labelCF);//添加带有字体颜色Formatting的对象jxl.write.WritableFont wfc = newjxl.write.WritableFont(WritableFont.ARIAL, 10,WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);jxl.write.WritableCellFormat wcfFC = newjxl.write.WritableCellFormat(wfc);bel labelCFC = new bel(1, 0, "This is a Label Cell", wcfFC);ws.addCell(labelCF);//2.添加Number对象jxl.write.Number labelN = new jxl.write.Number(0, 1, 3.1415926); ws.addCell(labelN);//添加带有formatting的Number对象jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##"); jxl.write.WritableCellFormat wcfN = newjxl.write.WritableCellFormat(nf);jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);ws.addCell(labelNF);//3.添加Boolean对象jxl.write.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对象jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");jxl.write.WritableCellFormat wcfDF = newjxl.write.WritableCellFormat(df);这里有两点大家要引起大家的注意。
第一点,在构造单元格时,单元格在工作表中的位置就已经确定了。
一旦创建后,单元格的位置是不能够变更的,尽管单元格的内容是可以改变的。
第二点,单元格的定位是按照下面这样的规律(column, row),而且下标都是从0开始,例如,A1被存储在(0, 0),B1被存储在(1, 0)。
最后,不要忘记关闭打开的Excel工作薄对象,以释放占用的内存,参见下面的代码片段:这可能与读取Excel文件的操作有少少不同,在关闭Excel对象之前,你必须要先调用write()方法,因为先前的操作都是存储在缓存中的,所以要通过该方法将操作的内容保存在文件中。
如果你先关闭了Excel对象,那么只能得到一张空的工作薄了。
3 拷贝、更新Excel工作薄接下来简要介绍一下如何更新一个已经存在的工作薄,主要是下面二步操作,第一步是构造只读的Excel工作薄,第二步是利用已经创建的Excel工作薄创建新的可写入的Excel工作薄,参考下面的代码片段:(完整代码见ExcelModifying.java)之所以使用这种方式构建Excel对象,完全是因为效率的原因,因为上面的示例才是API的主要应用。