excel操作(jxl)
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的简析和应用
在做一个excel项目的时候看到的,自己认为很有用,就收集了下以下是原文地址:第一部分(介绍)/fei/?post=81 和第二部分(应用)/fei/post-82.html ∙∙最近,完成了一个网上报表系统,刚巧用到了一个JAVA操作excel 表格的API.闲来无事,就将其大概的总结了一下.现阶段JAVA操作Excel 的JAR主要有apache 的POI及jxl.因为现在的eclipse操作excel用的插件为jxl,所以在项目中就使用了jxl.想想两者都差不了太多.此简单系列为两个部分,一是API系列,另一部分则是应用系列.一、API系列Jxl的API主要有三个包,jxl,jxl.format,jxl.write.如果单独的分析API,可能对于更明确的了解此API没有太多的帮助,我们还是从Excel文件的层次来剥离此API吧.一个excel文件由一个工作簿组成,一个工作簿又由n个工作表组成.每个工作表又由多个单元格组成.对应于Jxl中的结构为单元格(此处指文本单元格,图像及链接和单元格做为一个层次)分为好多种,所以在API的设计中将Cell作为一个接口而存在.对应的jxl中的结构为:而有的时候,我们可能将几个单元格作为一个整体来处理,在API中对应的则是:jxl.Range虽然数据是电子表格的核心,但是同时其也需要一些辅助类比如文件格式设置,工作表设置与显示效果.单元格设置与显示效果等.按照其层次,则依次有以下接口或类.最后,关于Jxl.format包.此包主要是一些与具体样式有关的接口和枚举.不进行具体描述.第一部分完.(二)应用在进行实践前,我们需要对excel有一个大致的了解,excel文件由一个工作簿(Workbook)组成,工作簿由工作表(sheet)组成,每个工作表又由很多单元格(cell)组成.工作簿有自己的特征,同样工作表,单元格也一样.从大局上了解了excel文件,对于我们更好的使用jxl是有一定的帮助的.具体请查看(一)API在jxl中其大概的层次是这样的Jxl读excel:得到工作簿的方法主要有四个:getWorkbook(File file)getWorkbook(File file,WorkSettings ws)getWorkbook(InputStream is)getWorkbook(InputStream is,WorkSettings ws)参数有两个:第一个参数是必须的:文件或输入流,第二个参数:工作簿ws是作为读出来的excel的一些约定,如地区,编码等. 如果文件错误或格式错误,将会抛出BiffException或IOException.代码段:Workbook wb=null;try{wb = Workbook.getWorkbook(excelFile);wb.close();}catch(BiffException ex){//转换错误}catch(IOException ex){//IO错误}以上如果一切正常的话,将得到此excel文件的工作簿.接下来我们就可以通过此文件簿得到其他的东西了.以下是得到工作表有关的方法int getNumberOfSheets()//工作表个数Sheet getSheet(String name);//得到此对应名称的工作表Sheet getSheet(int index);//得到此序列号的工作表Sheet[] getSheets();//得到工作表数组String[] getSheetNames();//得到工作表名称数组示例代码如下:Sheet sheet;if(wb.getNumberOfSheets()>0){sheet = wb.getSheet(0);}以下的方法除非特别目的,否则用到的地方不多.Range[] finaName(String name);//得到此名称的表格区Cell findCellByName(String name);//得到此名称的CellCell getCell(String loc)String[] getRangeNames();与文件是否可写有关的boolean isProected();得到了工作簿文件的某个工作表时.对于工作表而言其主要的内容就是单元格了.//根据内容查看Cell findCell(Pattern pattern,int firstCol,int firstRow,int lastCol,int lastRow,Boolean reverse)Cell findCell(String content)Cell findCell(String content,omt forstCol,int firstRow,int lastCol,int lastRow,Boolean reverse)LabelCell findLabelCell(String contents)//根据位置得到Cell getCell(int col,int row)Cell getCell(String loc)//loc的格式为A3/B1/C3其相同于getCell(CellReferenceHelper.getColumn(loc0,CellReferenceHelper.getRow(loc)),所以相对而言其性能没有Cell getCell(int col,int row)快//单元格数组Cell[] getRows(int row)//当前行单元格数组Cell[] getCols(int col)//当前列单元格数组//特殊单元格数组//超链接表格Hyperlink[] getHyperlinks();//超链接数组//区域表格Range[] getMergedCells();//区域单元格数组//图像表格Int getNumberOfImages()//拥有图片数Image getDrawing(int index)//对应序号的图片//工作表或多个表格一些自我属性String getName()//工作表名int getRows()//行数int getCols()//列数SheetSettings getSettings()//工作表设置CellView getColumnView(int col)//此列的表格视图CellView getRowV iew(int row)//此行的表格视图以下是与单元格有关的一些操作:CellFeatures getCellFeatures()//主要是与表格内容有关的一些性质如验证等CellFormat getCellFormat()//主要是表格外在表现格式有关的一些性质.int getColumn()//所在列int getRow()//所在行String getContents();//内容boolean isHidden();//可见否CellType getType();//表格类型如果不确定表格如果转换则可以使用此方法来确定表格类型.以下我们讲述如何写excel文件.写文件分为两种情况一种是新建一种则是更新.新建excel文件新建excel文件很简单://文件WritableWorkbook createWorkbook(File file) //无形式的创建一个excel文件WritableWorkbook createWorkbook(File file Workbook in)//以in一样的格式创建一个excel文件,其初始内容与in文件相同(更新文件可以用到此方法)WriteableWorkbook createWorkbook(File file,WorkSetting ws)//以ws的设定创建文件WritableWorkbook createWorkbook(File file,Workbook in,WorkSetting ws)//以ws的设定创建一个与in文件相同的文件//流WritableWorkbook createWorkbook(OutputStream os)WritableWorkbook createWorkbook(OutputStream os Workbook in) WriteableWorkbook createWorkbook(OutputStream os,WorkSetting ws) WritableWorkbook createWorkbook(OutputStream os,Workbook in,WorkSetting ws)代码示例:WritableWorkbook wrb;WriteableWorkbook wrbin;try{wrb = Workbook.createWorkbook(targetfile);wrbin = Workbook.createWorkbook(targetfile,wb);}catch (IOexception e){//IO错误}当创建好工作簿时,我们就需要新建工作表了WritableSheet createSheet(String name,int index);WritableSheet wrs = wrb.createSheet(“demo”,0);//创建一个名为demo的工作表,其为工作簿的第一个工作表.接下来我们就可以进行其他操作了添加文本类单元格:Label label = new Label(0,0,””);wrb.addCell(label);//添加数据单元格Number number = new Number(0,3,1234);wrb.addCell(number);//添加时间单元格DateTime dt = new DateTime(0,4,new Date());Wrb.addCell(dt);//添加公式单元格Fornual formual = new F ormual(0,11,”Sum(A1:A9)”);wrb.addCell(formual);添加超链接类单元格WirtableHyperlink wrlink =new WritableHyperlink(0,1,0,1,new URL(“/fei”),”emlog”); wrb.addHyperlink(wrlink);//添加图像WritableImage wrimage=new WritableImage(1,5,10,10,new File(imageFilepath)); wrb.addImage(wrimage);//注意,API中注明只支持png文件,然而我用其他格式的图片,通过将其后缘改为png也能放到excel文件中.果然,在查看其具体源代码时,发现作者只是检测了文件的后缀名,如果不对给出警告,并没有从图像文件的具体格式进行检测.当然,表格中的数据算是表格的核心部分,但是同时API也提供了大量的其他方法来丰富表格的显示.在此,大家具体在使用过程中进行运用就行.//最后,写完表格后,不要忘记进行写操作,也就是常说的保存wrb.write()wrb.close();保存完后关闭相应资源是一个合格的程序员应该做的.接下来,我们就来讲述写文件的另一方面:更新文件.有时候,并不仅仅只是需要新写文件,可能需要对已有文件进行更新.这时候我们可以这么来实现.Workbook wb= Workbook.getWorkbook(modifyFile);WritableWorkbook wrb = Workbook.createWorkbook(modifyFile, wb);以上就实现了得到一个已存在的文件的可修改副本.//得到第一个工作表WritableSheet wrs = wrb.getSheet(0);//得到A0单元格Cell cell = Wrs.getCell(0,0);//对单元格格式进行判断If (cell.getType()==BEL){Label label=(Label) cell;label.setString(“u r modified.”);}//modify end//save excelwrb.write();wb.close();wrb.close();以上就简单的完成了一次excel文件的修改.API中还提供了复制工作表,复制单元格等操作,大家可以通过查询API来了解其具体的用法.我们可以从作者提供的包中得到很多关于如何使用API的示例.此处不献丑了.jxl官文网站:/jexcelapi/index.html。
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基本操作
熟悉JXL的概念:工作簿Workbook 、工作表sheet、单元格cell// 1. 创建Workbook工作薄//使用file对象File file = new File("E:/student.xls");Workbook wb = Workbook.getWorkbook(file);// 使用inputInputStream input = new FileInputStream(file);Workbook wb = Workbook.getWorkbook(input);// 2. 获取Sheet工作表wb.getNumberOfSheets(); //sheet个数wb.getSheets().length; //sheet个数wb.getSheet(0).getName(); //获取sheetwb.getSheet("Sheet1").getName(); //sheet的名称// 行/列数sheet.getRows();sheet.getColumns();// 该行/列的单元格:cell[]sheet.getRow(0).length;sheet.getColumn(0).length;Cell cell = sheet.getCell(0, 0);cell.getContents(); //单元格内容String// cell的类型cell.getType() == BEL//class:LABEL单元格的类型:LabelCell ,NumberCell 等,无须进行数据类型的转换。
File file = new File("E:/student.xls");Workbook wb = Workbook.getWorkbook(file);Sheet sheet = wb.getSheet(0);int rows = sheet.getRows();int cols = sheet.getColumns();for (int row = 0; row < rows; row++) {for (int col = 0; col < cols; col++) {Cell cell = sheet.getCell(col, row); //注意:行列互换// System.out.println(cell.getContents());// 转换成相应的数据类型:无须进行“数据类型的转换”if (cell.getType() == BEL) {//Label是LabelCell的子类LabelCell labelCell = (LabelCell) cell;System.out.println(labelCell.getString()); // str}if (cell.getType() == CellType.NUMBER) {NumberCell numberCell = (NumberCell) cell;System.out.println(numberCell.getValue());//double}// 其他的子类:CellType.BOOLEAN/CellType.DATE// 释放资源:从“内存”中释放资源wb.close();}}读取XLS文件:封装成List<Bean>返回//封装成List<Bean>List<Goodinfo> goods = new ArrayList<Goodinfo>();for (int row = 2; row < rows - 1; row++) { //从数据Cell读取Goodinfo good = new Goodinfo(); //封装一条记录:Goodinfofor (int col = 0; col < cols - 1; col++) {Cell cell = sheet.getCell(col, row);switch (col) { //对该行的“不同”单元格进行判断case 0:good.setGoodCode(cell.getContents());break;//....case 3://转成相应的单元格类型:NumberCellNumberCell quantityCell = (NumberCell) cell;//double转成intgood.setQuantity((int)quantityCell.getValue())break;//....case 5:DateCell dateCell = (DateCell) cell; //DateCellgood.setArrivedDate(dateCell.getDate());break;default: //不合法的XLS格式throw new IllegalArgumentException("正在读写的xls文件未按照格式要求进行书写!");}}goods.add(good);}对XLS进行写出:// 1. 创建可写的工作簿workbook,使用fileWritableWorkbook wwb = Workbook.createWorkbook(file);//Workbook.createWorkbook(output); //output// 2. sheetWritableSheet ws = wwb.createSheet("进货记录", 0);// 3.文本型labelLabel label = new Label(0, 0, "进货记录");ws.addCell(label);字体与格式:// 4.设置字体:提供了丰富的构造函数WritableFont wf = new WritableFont(WritableFont.createFont("华文新魏"), 12, //JXL字体:WritableFont.TIMES,或者Excel支持的字体WritableFont.BOLD, true, //是否斜体UnderlineStyle.NO_UNDERLINE,Colour.VIOLET);// 仅仅设置格式format://WritableCellFormat wcf = new WritableCellFormat();// 5. 设置format和font:将wf构造注入WritableCellFormat wcf = new WritableCellFormat(wf);wcf.setAlignment(Alignment.RIGHT);wcf.setVerticalAlignment(VerticalAlignment.TOP); //垂直对齐方式//(不是JDK的Color),jxl.write.Colour已过期wcf.setBackground(jxl.format.Colour.YELLOW);wcf.setBorder(Border.BOTTOM, BorderLineStyle.THICK,jxl.format.Colour.RED); //// 构造器:可以没有colour //wcf.setWrap(true); //自动换行,而不是隐藏数据//wcf构造注入Label labelStyle = new Label(0, 1, "进货记录", wcf);ws.addCell(labelStyle);// 6. 设置width,heightws.setColumnView(0, 5); //0.5倍数ws.setColumnView(0, 10); //1倍数ws.setColumnView(0, 20); //2倍数//ws.setRowView(0, 10);ws.setRowView(1, 350); //较为正常的高度//7. cell合并:起始cell到终止cellws.mergeCells(0, 0, 3, 3);Label mergedLabel = new Label(0, 0,"合并单元格");ws.addCell(mergedLabel); //填充新的cell//8. 其他类型数据//数值型,以特定格式显示:原始数据未改变NumberFormat nf = new NumberFormat("#,###.00"); //不足补0 //注入nf和font:new WritableCellFormat(wf, nf); WritableCellFormat wcf2 = new WritableCellFormat(nf);//未设置wcf:new Number(0, 1, 12);Number quantity = new Number(1, 0, 35634.865,wcf2);ws.addCell(quantity);//日期型:可以使用sdf格式化成“字符串”,使用Label写出即可//DateTime arrivedTime = new DateTime(1, 1, new Date());//错误的日期:1899-12-30,必须设置格式DateFormat df = new DateFormat("yyyy年MM月dd日"); WritableCellFormat wcf3 = new WritableCellFormat(df); DateTime arrivedTime = new DateTime(1, 1, new Date(),wcf3); //原始数据:2013-7-16 11:30:36ws.addCell(arrivedTime);// 一定:写出,关闭,否则可能无数据wwb.write();wwb.close();/使用公式:使用Excel内建的公式,更加的灵活,功能强大,“无须大量的编码”//定义数据cellNumber one = new Number(0,0,15);Number two = new Number(1,0,2);//使用XLS自动生成公式:=PRODUCT(A1,B1),=MMULT(A2,B2),注意://必须是“大写”Formula pro1 = new Formula(2,0,"PRODUCT(A1,B1)"); //数的乘积ws.addCell(one);ws.addCell(two);ws.addCell(pro1);Formula pro2 = new Formula(2,1,"MMULT(A2,B2)"); //矩阵乘积System.out.println("pro = " + pro2.getContents());//合并单元格:求和ws.mergeCells(0,2,2,2);//多个单元格求和,使用一个矩阵:SUM(G3:G7)Formula sum = new Formula(0,2,"SUM(C1,C2)");ws.addCell(sum);//写入PNG图像,仅此格式,其他格式:无法显示WritableImage wi = new WritableImage(1, 1, 3, 7,new File("E:/haha.png")); //注意参数:3、7,指的是的单元格个数ws.addImage(wi);//对XLS进行拷贝、修改:场景(对xls“批量”操作:修改)Workbook wb = Workbook.getWorkbook(newFile("E:/student.xls")); //原始工作簿Workbook WritableWorkbook wwb = Workbook.createWorkbook(newFile("E:/student-2.xls"),wb); //拷贝的副本WritableSheet sheet = wwb.getSheet(0);Cell cell = sheet.getCell(0,0);if(cell.getType() == BEL) {Label label = (Label)cell;//LabelCell:无setString()方法,Label是LabelCell的子类型//System.out.println(label.getString());label.setString("超级市场进货记录");//覆盖原有格式:当前Cell的所有format和font都“丢失”掉了!WritableCellFormat wcf = new WritableCellFormat();wcf.setAlignment(Alignment.LEFT);label.setCellFormat(wcf);}wwb.write();wwb.close();wb.close();//批量导出demo//待导出的数据:List<Bean>public List<Goodinfo> getData() {//....new Date();//当前时间:new Date()//特定时间:使用GregorianCalendar构造,Date过期new GregorianCalendar(2013, 7, 15).getTime();}//标题title的格式:format和fontpublic WritableCellFormat getTitleFormat() {//字体fontWritableFont wf = new WritableFont(WritableFont.createFont("隶书"),15,WritableFont.NO_BOLD,true,UnderlineStyle.NO_UNDERLINE,Colour.RED);//格式formatWritableCellFormat titleFormat = new WritableCellFormat(wf);try {titleFormat.setAlignment(Alignment.CENTRE);titleFormat.setVerticalAlignment(VerticalAlignment.BOTTOM);titleFormat.setBackground(Colour.LIGHT_BLUE);titleFormat.setBorder(Border.ALL, BorderLineStyle.THIN, Colour.BLACK);titleFormat.setWrap(false);} catch (WriteException e) {e.printStackTrace();}return titleFormat;}//表格题目headerpublic WritableCellFormat getHeaderFormat(){//...}//表格体的通用样式commonpublic WritableCellFormat getCommonFormat(){//...}//价格format:需要构造传入参数WritableFont,NumberFormatpublic WritableCellFormat getPriceFormat() {WritableFont wf = new WritableFont(WritableFont.createFont("楷体_GB2312"), 11,WritableFont.NO_BOLD,false, UnderlineStyle.NO_UNDERLINE,Colour.GRAY_50);NumberFormat nf = new NumberFormat("#,###.00"); //不足补0WritableCellFormat priceFormat = new WritableCellFormat(wf, nf); //NumberFormat也作为参数传入//...return priceFormat;}//构造传入DateFormatpublic WritableCellFormat getDateTimeFormat() {//...WritableFont wf = new WritableFont(,,,);DateFormat df = new DateFormat("yyyy年MM月dd日");WritableCellFormat dateTimeFormat =new WritableCellFormat(wf,df);//...return dateTimeFormat;}//用作金额加总的格式public WritableCellFormat getAnalisisFormat() {//和getPriceFormat()类似return priceFormat;}//核心操作代码// sheetFile file = new File("E:/student-write.xls");WritableWorkbook wwb = Workbook.createWorkbook(file); WritableSheet ws = wwb.createSheet("进货记录", 0);// 设置row,col的宽度ws.setRowView(0, 450);ws.setColumnView(0, 15);//...// titlews.mergeCells(0, 0, 6, 0);Label title = new Label(0, 0, "进货记录", getTitleFormat());ws.addCell(title);// headerString[] header = new String[] { "商品编号", "品名", "单价(元)", "数量", "产地","到货日期", "小计(元)" };for (int i = 0; i < header.length; i++) {Label header_part = new Label(i, 1, header[i],getHeaderFormat());ws.addCell(header_part);}// bodyList<Goodinfo> goods = getData();for (int i = 0; i < goods.size(); i++) {//得到一条数据记录:goodGoodinfo good = goods.get(i);//循环添加各个字段:data_colfor (int j = 0; j < header.length - 1; j++) {Object data_col = null; //data_col放到switch外部,以便于统一添加switch (j) {case 0:data_col = new Label(j, 2 + i, good.getGoodCode(),getCommonFormat());break;//...case 2:data_col = new jxl.write.Number(j, 2 + i, good.getPrice(), getPriceFormat());break;//...case 5:data_col = new DateTime(j, 2 + i, good.getArrivedDate(), getDateTimeFormat());break;default:break;}ws.addCell((WritableCell) data_col); //可添加的是WritableCell }// 添加小计:使用PRODUCT(乘积)int row_num = i + 3;Formula subTotal = new Formula(header.length - 1, 2 + i,"PRODUCT(C" + row_num + ",D" + row_num + ")",getAnalisisFormat());ws.addCell(subTotal);}//footerLabel total_header = new Label(0, goods.size() + 2, "总计(元)", getHeaderFormat());ws.addCell(total_header);ws.mergeCells(1, goods.size() + 2, header.length - 1, goods.size() + 2);Formula total_body = new Formula(1, goods.size() + 2,"SUM(G3:G" + (2 + goods.size()) + ")", //:代表矩阵getAnalisisFormat());ws.addCell(total_body);wwb.write();wwb.close();。
JXL操作EXCEL的常用类方法参数解析
1. JXL操作EXCEL的常用类方法参数解析Excel的生成方式其实很简单,主要包括几个大的类首先最重要的几个类就是WritableWorkbook,这个类代表的就是一个Excel文档,使用过Excel文档的都应该知道Excel文档的组成,都是由一个一个的sheet组成的,那么这个sheet对应的java类就是WritableSheet。
实际上就是这两个大类的组成,其他的一些小的类都是为了修饰WritableSheet里的内容的。
这些修饰类中用的最多的就是WritableFont ,WritableCellFormat,以及Label类,这三个类构成了修WritableSheet的核心。
<一>抽象类Workbook该类相当于是一个工具类用于生成Excel方法:(1)createWorkbook(File file)createWorkbook(File file,Workbook in)createWorkbook(java.io.OutputStream os)提供了各种形式的产生Excel的方式(2)findByName(String name)该方法的作用是获得名称为name的Range的数组(3)findCellByName(String name)该方法的作用是根据name来获取对应的cell对象(4)getCell(String location)该方法的作用是根据location来获得对应的cell对象(5)getNumberOfSheets()该方法的作用是是获得sheet的总个数(6)getRangeNames()该方法的作用是获得所有Range对象名称的数组(7)getSheet(int index)该方法的作用是根据下标来获取对应的sheet对象(8)getSheet(String name)该方法的作用是根据sheet的名称来获得对应的sheet对象(9)getSheetNames()该方法的作用是获得所有sheet的名称所在的数组(10)getSheets()该方法的作用是获得所有sheet对象所在的数组(11)getVersion()该方法的作用是获得版本号(12)getWorkbook(File file)该方法的作用就是获得一个Excel对象(13)getWorkbook(File file,WorkbookSettings wss)该方法的作用是获取一个Excel对象(14)isProtected()该方法的作用是Excel是否是受保护的<二>WritableWorkbook该类是一个实际的可写的Workbook(1)createSheet(ng.String name,int index)该方法的作用是创建一个WorkSheet放在指定的位置(2)copy (Workbook book)该方法的作用是复制WritableWorkbook(3)copySheet(int s,String name,int index)该方法的作用是复制同一个workbook里处于s位置的sheet放到新的位置index处(4)findByName(String name)该方法的作用是获得名称为name的Range对象的数组(5)findCellByName(String name)该方法的作用是获取名称为name的WritableCell对象(6)getNumberOfSheets()该方法的作用是获得workbook里sheet的个数(7)getRangeNames()该方法的作用是获得所有Range对象的名称所在的数组(8)getSheet(int index)该方法的作用根据位置获取WritableSheet(9)getSheet(String name)该方法的作用是根据名称来获去WritableSheet(10)getSheetNames()该方法的作用是获得workbook里的所有sheet的名称所在的数组(11)getSheets()该方法的作用是获得workbook里的所有的sheet所在的数组(12)importSheet(String name,int index, Sheet sheet)该方法的作用是从另外一个workbook里倒入一个sheetname为新生成的sheet的名称,index为新的sheet在当前workbook里所处的位置(13)moveSheet(int from,int to)该方法的作用是移动一个sheet从from位置到to位置(14)removeRangeName(String name)该方法的作用是移除名称为name的Range对象(15)removeSheet(int index)该方法的作用是移除在index位置的sheet对象(16)setColorRGB(Colour c,int r,int g,int b)该方法的作用是个workbook设置一定的颜色(17)setOutputFile(File file)该方法的作用不太明确(18)setProtected(Boolean protected)该方法的作用是设置workbook是否为被保护(19)write()该方法非常重要,也就是生成一个Excel文档(20)close()该方法非常重要,在最后需要调用这个方法,才能使生成的Excel有效生成,否则,不写此句的话将会导致生成的Excel文件在打开时提示“文件的格式与扩展名指定的格式不一致”<三>接口WritableSheet(1)addCell(WritableCell cell)该方法的作用是添加单元格需要注意的是一个Cell/Label只能使用一次(2)addColumnPageBreak(int break)该方法的作用不详(3)addHyperlink(WritableHyperlink link)该方法的作用是设置超链接(4)addImage(WritableImage image)该方法的作用是向Excel中添加图片对于JExcelAPI来说只支持对PNG图片的操作,而POI的功能则会更加强大一些(5)addRowPageBreak(int break)该方法的作用不详同addColumnPageBreak(int break)一样(6)getImage(int i)该方法的作用是获得sheet中的图片(7)getNumberOfImages()该方法的作用是获得sheet中的图片总数(8)getWritableCell(int column,int row)该方法的作用是获得具体的某个单元格(9)getWritableHyperlinks()该方法的作用是获得sheet里的所有超链接(10)insertColumn(int col)该方法的作用是添加一列(11)insertRow(int row)该方法的作用是添加一行(12)mergeCells(int col1,int row1,int col2,int row2)该方法的作用是合并单元格其中参数指的是需要合并的两个单元格所处的位置,也就是合并这两个单元格之间的所有单元格(13)removeColumn(int col)该方法的作用是删除某一列(14)removeHyperlink(Hyperlink link)该方法的作用是删除某一个超链接(15)removeImage(WritableImage image)该方法的作用是删除图片(16)removeRow(int row)该方法的作用是删除一行(17)setColumnGroup(int col1, int col2, boolean collapsed)该方法的作用是设置一个column组(18)setName(String sheetname)该方法的作用是设置sheet的名称(19)setRowGroup(int row1,int row2,Boolean collapsed) 该方法的作用是设置一个row组(20)unmergeCells(Range r)该方法的作用是合并单元格(21)unsetColumnGroup(int col1,int col2)该方法的作用是解除column组,该方法是相对于setColumnGroup方法(22)unsetRowGroup(int row1,int row2)该方法的作用是解除row组,该方法是相对于setRowGroup方法的(23)setColumnView(int column,int width)该方法的作用是设置一个某一列的宽度(24)setRowView(int row,int height)该方法的作用是设置某一行的高度<四>接口WritableCell(1) copyTo(int col,int row)该方法的作用是深克隆某一行的某一列(2)getWritableCellFeatures()该方法的作用是获得WritableCellFeatures(3)setCellFeatures(WritableCellFeatures wfs) 该方法的作用是设置WritableCellFeatures (4)setCellFormat(CellFormat cf)该方法的作用是对列表进行格式排版<五>WritableCellFeatures<六>WritableFont该类用于设定Excel的字体(1)构造函数a. WritableFont(Font f)b. WritableFont(WritableFont.fontName fn)根据WritableFont的常量来创建WritableFontc. WritableFont(WritableFont.fontName fn, int size)根据WritableFont的常量以及字体的大小来创建WritableFontd. WritableFont(WritableFont.fontName fn, int size, WritableFont.BoldStyle fb)根据WritableFont的常量、字体的大小以及字体的粗细来创建WritableFonte. WritableFont(WritableFont.fontName fn, int size, WritableFont.BoldStyle fb, boolean italic)根据WritableFont的常量、字体的大小、字体的粗细以及是否斜体来创建WritableFontf.WritableFont(WritableFont.FontName fn,int ps,jxl.write.WritableFont.BoldStyle bs,boolean it, UnderlineStyle us)根据WritableFont的常量,字体的大小,字体的粗细,是否斜体,下划线样式来创建WritableFontg. WritableFont(WritableFont.FontName fn,int ps,jxl.write.WritableFont.BoldStyle bs,boolean it, UnderlineStyle us, Colour c)根据WritableFont的常量,字体的大小,字体的粗细,是否斜体,下划线样式以及颜色来创建WritableFonth. WritableFont(WritableFont.FontName fn,int ps,jxl.write.WritableFont.BoldStyle bs,boolean it, UnderlineStyle us, Colour c, ScriptStyle ss) 根据WritableFont的常量,字体的大小,字体的粗细,是否斜体,下划线样式,颜色以及脚本来创建WritableFont(2)createFont(ng.String fontName)该方法的作用是根据名称来设置Excel的title的字体(3)setBoldStyle(BoldStyle boldStyle)该方法的作用是设置Excel的title字体的粗细,但是对应的值只有两个WritableFont.BOLD和WritableFont.NO_BOLD(4)setColor(Color color)该方法的作用是设置Excel的title字体的颜色(5)setItalic(Boolean italic)该方法的作用是设置Excel的title字体是否为斜体(6)setPointSize(int size)该方法的作用是设置Excel的title字体的大小(7)setScriptStyle(ScriptStyle ss)该方法的作用是设置Excel的title的效果,有三个值可供选择ScriptStyle.SUBSCRIPT,ScriptStyle.SUPSCRIPT,ScriptStyle.NOMAL_SCRIPT例如如果设置setScriptStyle(ScriptStyle.SUPSCRIPT)是如下效果如果设置为SUBSCRIPT的话就是如下的样式如果不做设置的话,即默认为NOMAL_SCRIPT则为如下所示(8)setUnderlineStyle(UnderlineStyle us)该方法的作用是设置下划线的样式存在以下值可供选择UnderlineStyle.DOUBLEUnderlineStyle.DOUBLE_ACCOUNTINGUnderlineStyle.NO_UNDERLINEUnderlineStyle.SINGLEUnderlineStyle.SINGLE_ACCOUNTING从上面的结果可以得出SINGLE和DOUBLE只是在字体范围内加下划线,而SINGLE_ACCOUNTING和DOUBLE_ACCOUNTING则是在整个标题的范围内加下划线<六>类Label该类的作用是设置列里的文本信息,此类实现了WritableCell接口(1)构造函数a. Label(int c, int r ,ng.String cont)设置指定的行列的文本信息b. Label(int c,int r,ng.String cont,CellFormat st)设置指定的行列的的文本信息以及列的格式(这个构造是用的比较多的)c. Label(LabelCell lc)根据LabelCell创建Label(2)copyTo(int c, int r)该方法的作用是深克隆指定的某一行的某一列(3)setString(String content)该方法的作用是设置某一列的内容<七>类WritableCellFormat该类的作用是设置列表的格式尤其要注意的是在实际的使用过程中WritableCellFormat是同WritableFont,Label 共同使用的例如:WritableWorkbook book=Workbook.createWorkbook(new File(String path));WritableSheet sheet=book.createSheet(String sheetname,int index);WritableFont font=new WritableFont(WritableFont.fontname ,fontsize,BoldStyle.boldstylename);WritableCellFormat format=new WritableCellFormat(font);Label label=new Label(int column,int row,String content,WritableCellFormat format);sheet.addCell(label);(1)构造函数a. WritableCellFormat()默认的构造函数b. WritableCellFormat(CellFormat format)c. WritableCellFormat(DisplayFormat format)d. WritableCellFormat(WritableFont font)e. WritableCellFormat(WritableFont font,DisplayFormat format)(2)setAlignment(Alignment align)该方法的作用是设置表格的对齐方式可供选择的值有jxl.format.Alignment.CENTREjxl.format.Alignment.FILLjxl.format.Alignment.GENERALjxl.format.Alignment.JUSTIFYjxl.format.Alignment.LEFTjxl.format.Alignment.RIGHT(3)setBackground(Colour c)该方法的作用是设置cell的背景颜色可选的值均为Colour的常量对象(4)setBackground(Colour c,Pattern p) 该方法的作用是设置cell的背景颜色和形式(5)setBorder(Border b,BorderLineStyle bs) 该方法的作用是设置Border(6)setBorder(Border b,BorderLineStyle bs,Colour c) 该方法的作用也是设置Border(7)setIndentation(int identation)该方法的作用是设置单元格的缩进量(8)setLocked(Boolean lock)该方法的作用设置此列的style是否锁定(9)setOrientation(Orientation.orientationname) 该方法的作用是设置列的方向如下图为没有设置时的呈现下图为设置为Orientation.VERTICAL后的效果下图为设置为Orientation.MINUS_45后的效果,所谓MINUS_45表示的也就是整个表格呈现负的45度的效果,如果为Orientation.PLUS_45,则表示的是列表呈现正的45度的效果下图为设置为Orientation.HORIZONTAL后的效果实际上在没有专门给定值的时候,默认值就是HORIZONTAL(10)setShrinkToFit(Boolean flag)该方法的作用是设置自适应大小(11)setVerticalAlignment(VerticalAlignment.alignment) 该方法的作用是设置单元格的垂直对齐方式可供选择的值有VerticalAlignment.TOP/CENTER/BOTTOM/JUSTIFY (12)setWrap(Boolean flag)该方法的作用是设置自动换行<八>类WorkbookSettings(1)setArrayGrowSize(int size)该方法的作用设置Workbook的内存大小,用于保存Workbook里的数据(2)setAutoFilterDisabled(Boolean flag)该方法的作用是设置是否启用自动过滤(3)setCellValidationDisabled(Boolean flag)该方法的作用是设置单元格的验证是否启用(4)setCharacterSet(int cs)该方法的作用是设置Workbook的字符集(5)setDrawingDisabled(Boolean flag)该方法的作用不详(6)setEncoding(String encoding)该方法的作用是设置Workbook的字符编码(7)setExce9file(Boolean excel9file)该方法的作用不详(8)setExcelDisplayLanguage(String language)该方法的作用是设置设置Workbook里的语言(9)setExcelRegionalSettings(String regional)根据字面意思来讲这个方法的作用是设置Workbook的区域信息(10)setFormulaAjust(Boolean flag)该方法的作用是设置是否启用公式调节(11)setGCDisabled(Boolean flag)该方法的作用是设置是否启用垃圾回收机制(12)setIgnoreBlanks(Boolean flag)该方法的作用是设置是否忽略空白(13)setInitialFileSize(int size)该方法的作用是设置文件的初始大小(14)setMergedCellChecking(Boolean flag)该方法的作用是设置是否启用合并列表的检查(15)setRationalization(Boolean flag)该方法的作用是设置在生成Excel前是否合理化设置cellFormat(16)setSuppressWarning(boolean flag) 该方法的作用是设置是否隐藏警告(17)setTemplate(Boolean flag)该方法的作用是设置是否启用模板。
使用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.}。
jxl 单元格格式 长数字处理
JXL是一款Java语言的Excel文件操作工具,可以方便地读取和写入Excel文件。
在使用JXL时,经常会遇到一些长数字的处理问题,比如会出现科学计数法显示,或者精度丢失等情况。
本文将结合实际问题进行讨论,介绍JXL中处理长数字的方法。
1. 长数字的表示在Excel中,长数字通常是指位数较多的数字,比如唯一识别信息、唯一识别号号等。
这些数字在Excel中显示时,可能会出现科学计数法的显示,比如1.23E+12,或者出现精度丢失的情况。
这给数据的准确性和可读性带来了困扰。
2. JXL读取长数字在使用JXL读取Excel文件时,如果单元格中的数据是长数字,可能会出现科学计数法的显示。
这是因为JXL默认采用科学计数法来表示较大的数字。
为了解决这个问题,可以通过设置单元格的格式来改变其显示方式。
3. 设置单元格的格式通过JXL可以设置单元格的格式,包括数据格式、对齐方式、字体颜色等。
要想显示长数字,可以将单元格的格式设置为文本格式,这样就能够正常显示所有位数的数字了。
4. 示例代码下面是一个使用JXL读取Excel文件,并设置单元格格式的示例代码:```File file = new File("test.xls");WorkbookSettings settings = new WorkbookSettings(); settings.setEncoding("ISO-8859-1");Workbook workbook = Workbook.getWorkbook(file, settings); Sheet sheet = workbook.getSheet(0);Cell cell = sheet.getCell(0, 0);WritableCellFormat format = newWritableCellFormat(NumberFormats.TEXT);WritableCell cell = sheet.getWritableCell(0, 0);cell.setCellFormat(format);String value = cell.getContents();System.out.println(value);```5. 长数字的写入除了读取长数字,有时候也需要向Excel文件中写入长数字。
转:jxl导出excel(合并单元格)
转 : jxl导 出 excel( 合 并 单 元 格 )
Demo
代码如下:
1 import java.io.*; 2 import jxl.*; 3 import jxl.format.UnderlineStyle; 4 import jxl.write.*; 5 public class CreateXLS { 6 public static void main(String args[]) { 7 try { 8 //打开文件 9 WritableWorkbook book= Workbook.createWorkbook(new File("测试.xls")); 10 //生成名为“第一页”的工作表,参数0表示这是第一页 11 WritableSheet sheetOne=book.createSheet("第一页",0); 12 13 /** 14 * 定义单元格样式 15 */ 16 WritableFont wf_title = new WritableFont(WritableFont.ARIAL, 11, 17 WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, 18 jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色 19 WritableFont wf_head = new WritableFont(WritableFont.ARIAL, 11, 20 WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, 21 jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色 22 WritableFont wf_table = new WritableFont(WritableFont.ARIAL, 11, 23 WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, 24 jxl.format.Colour.BLACK); // 定义格式 字体 下划线 斜体 粗体 颜色 25 26 WritableCellFormat wcf_title = new WritableCellFormat(wf_title); // 单元格定义 27 wcf_title.setBackground(jxl.format.Colour.WHITE); // 设置单元格的背景颜色 28 wcf_title.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 29 wcf_title.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //设置边框 30 31 WritableCellFormat wcf_title1 = new WritableCellFormat(wf_title); // 单元格定义 32 wcf_title1.setBackground(jxl.format.Colour.LIGHT_GREEN); // 设置单元格的背景颜色 33 wcf_title1.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 34 wcf_title1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //设置边框 35 36 WritableCellFormat wcf_title2 = new WritableCellFormat(wf_title); // 单元格定义 37 wcf_title2.setBackground(jxl.format.Colour.YELLOW2); // 设置单元格的背景颜色 38 wcf_title2.setAlignment(jxl.format.Alignment.CENTRE); // 设置对齐方式 39 wcf_title2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); //设置边框 40 41 WritableCellFormat wcf_head1 = new WritableCellFormat(wf_head); 42 wcf_head1.setBackground(jxl.format.Colour.LIGHT_GREEN); 43 wcf_head1.setAlignment(jxl.format.Alignment.CENTRE); 44 wcf_head1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); 45 46 WritableCellFormat wcf_head2 = new WritableCellFormat(wf_head); 47 wcf_head2.setBackground(jxl.format.Colour.YELLOW2); 48 wcf_head2.setAlignment(jxl.format.Alignment.CENTRE); 49 wcf_head2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); 50 51 52 WritableCellFormat wcf_table1 = new WritableCellFormat(wf_table); 53 wcf_table1.setBackground(jxl.format.Colour.LIGHT_GREEN); 54 wcf_table1.setAlignment(jxl.format.Alignment.CENTRE); 55 wcf_table1.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); 56 57 WritableCellFormat wcf_table2 = new WritableCellFormat(wf_table); 58 wcf_table2.setBackground(jxl.format.Colour.YELLOW2); 59 wcf_table2.setAlignment(jxl.format.Alignment.CENTRE); 60 wcf_table2.setBorder(jxl.format.Border.ALL, jxl.format.BorderLineStyle.THIN,jxl.format.Colour.BLACK); 61
excel操作之jxl
2. * 在第一个字符串中查找匹配字符串的个数3. * @param str4. * @param regexStr5. * @return6. */7. public static int count(String str,String regexStr){8. int count = 0;9. Pattern pt = pile(regexStr);10. Matcher m = pt.matcher(str);11. int start = 0;12. while(m.find()){13. count++;14. str = str.replaceFirst(regexStr, "");15. }16. return count;17. }18.19. /**20. * 根据正则表达式分割str字符串成为一个一个的小的单元!21. * (实际使用:在一个类似语法分析的模块中发挥重要作用)22. * 例如:3+5*4 根据正则表达式+-\* 分割成数组 3,+,5,*,423. * @param str24. * @param regexStr25. * @return26. */27. public static List splitByStr(String str,String regexStr){28. List temp = new ArrayList();29. Pattern pt = pile(regexStr);30. Matcher m = pt.matcher(str);31. int start = 0;32. while(m.find()){33. //去掉下面的字符串中为空串的情况!34. if(m.start()!=start)35. temp.add(str.substring(start, m.start()));36. temp.add(str.substring(m.start(),m.end()));37. start = m.end();38. }39. temp.add(str.substring(start));40. return temp;42.43. /**44. * 检查是否含有指定的正则表达式匹配的子串.45. * @param str 目标字符串46. * @param regex 正则表达式,如果正则表达式含有"^......$"就是查找整个字符串对象是否符合正则表达式.47. * @return48. */49. public static boolean checkInclude(String str,String regex){50. Pattern pattern = pile(regex);51. Matcher matcher = null;52. matcher = pattern.matcher(str);53. return matcher.find();54. }55.56. /**57. * 方法字符串中符合正则表达式的子串的集合.58. * @param str59. * @param regex60. * @return61. */62. public static List getRightSubStr(String str, String regex) {63. List ans = new ArrayList();64. Pattern pattern = pile(regex);65. Matcher matcher = pattern.matcher(str);66. while (matcher.find()) {67. //注意要下面的goup()函数中可以含有数字,表示查找得到正则表达式中的goup匹配串.68. ans.add(matcher.group());69. System.out.println("找到匹配的字符串 \"" + matcher.group()70. + "\" 开始于 " + matcher.start()71. + " 结束于 " + matcher.end() + ".");72. }73. return ans;74. }下面是java正则表达式经常使用的一些方法和说明:Java代码1. (1)使用matches方法快速建设是否表示给定的输入字符串:Pattern.matches("\\d","1")返回true2. (2)split(string)使用方法:pile(":").split("one:two:three:four:five"); 返回:解析出“one two three four five”单词3. 再比如使用数字作为一个分割字符串的方法:(注意下面的\\d不是正则表达式,而是前面加了一个转义符号\)4. pile("\\d").split("one9two4three7four1five");也返回相同的结果。
jxl中读写excel
Cell cell=st.getCell(0,0);//得到工作表的第一个单元格,即A1
String content=cell.getContents();//getContents()将Cell中的字符转为字符串
WritableWorkbook wwb = Workbook.createWorkbook(os);//创建ቤተ መጻሕፍቲ ባይዱ写工作薄
WritableSheet ws = wwb.createSheet("sheet1", 0);//创建可写工作表
Label labelCF=new Label(0, 0, "hello");//创建写入位置和内容
现在可以写了
wwb.write();
写完后关闭
wwb.close();
输出流也关闭吧
os.close;
WritableCellFormat wcfF = new WritableCellFormat(wf);//设置CellFormat
Label labelCF=new Label(0, 0, "hello");//创建写入位置,内容和格式
Label的另一构造函数Label(int c, int r, String cont, CellFormat st)可以对写入内容进行格式化,设置字体及其它的属性.
ws.addCell(labelCF);//将Label写入sheet中
Label的构造函数Label(int x, int y,String aString)xy意同读的时候的xy,aString是写入的内容.
java之excel操作(jxl介绍)
利用JAVA操作EXCEL文件(JXL使用)在开源世界中,有两套比较有影响的Excel操作API可供使用,一个是POI,一个是Java Excel API(简称jxl),jxl功能相对POI比较弱一点。
但jExcelAPI对中文支持非常好,使用起来非常方便,而且不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
本文着重介绍JAVA EXCEL API的简单使用。
JXL简介Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。
使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。
因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。
提供以下功能:∙从Excel 95、97、2000等格式的文件中读取数据;∙读取Excel公式(可以读取Excel 97以后的公式);∙生成Excel数据表(格式为Excel 97);∙支持字体、数字、日期的格式化;∙支持单元格的阴影操作,以及颜色操作;∙修改已经存在的数据表;∙能够读取图表信息(目前只支持PNG格式的图片)JXL对象介绍JXL API中主要对象与Excel中各对象对应关系如下API简单介绍从Excel文件读取数据表Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。
读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:一旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:工作表)。
参考下面的代码片段:也可以通过下列方法获取sheet的个数。
参考代码如下:一旦得到了Sheet,我们就可以通过它来访问Excel Cell(术语:单元格)。
使用JXL读写Exceljxl读取excel代码
Workbook workBook = null;
try {
// 加载excel文件
fs = new FileInputStream(filePath);
// 得到 workbook
import java.util.ArrayList;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
public class ExcelImporter
} catch (WriteException e) {
System.out.println("jxl write WriteException: "+e.getMessage());
} catch (IOException e) {
System.out.println("jxl write file i/o exception!, cause by: "+e.getMessage());
import java.util.ArrayList;
import java.util.List;
import jxl.Workbook;
import bel;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import java.io.FileNotFoundException;
jxl读写excel常见操作搜集整理
jxl读写excel常见操作搜集整理package common.excelTool;import java.io.File;import java.io.FileOutputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.Date;import java.util.HashMap;import jxl.Cell;import jxl.CellType;import jxl.DateCell;import jxl.Range;import jxl.Sheet;import jxl.Workbook;import jxl.WorkbookSettings;import jxl.format.Alignment;import jxl.format.Border;import jxl.format.BorderLineStyle;import jxl.format.CellFormat;import jxl.format.Colour;import jxl.format.UnderlineStyle;import jxl.format.VerticalAlignment;import jxl.write.Formula;import bel;import jxl.write.Number;import jxl.write.NumberFormat;import jxl.write.WritableCell;import jxl.write.WritableCellFeatures;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;public class WriteExcelTest {static HashMap map = new HashMap();public static void main(String[] args) {try {// copyDateFormat(new File("c:\\a.xls"), 0, "c:\\copy of a.xls");// writeExcelUseFormat("c:\\format.xls","test");// buildNewFormTemplete(new File("c:/templete.xls"),new File( "c:/buildNewFormTemplete.xls"));// modifyDirectly1(new File("c:/templete.xls"));// modifyDirectly2(new File("c:/templete.xls"));copyDateAndFormat(new File("c:/a.xls"), 0, "c:/a2.xls");} catch (Exception e) {// TODO 自动生成catch 块e.printStackTrace();}}public static void modifyDirectly2(File inputFile) throws Exception{Workbook w1 = Workbook.getWorkbook(inputFile);WritableWorkbook w2 = Workbook.createWorkbook(inputFile, w1);WritableSheet sheet = w2.getSheet(0);WritableCell cell = null;CellFormat cf = null;//加粗cell = sheet.getWritableCell(0,0);WritableFont bold = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.BOLD);cf = new WritableCellFormat(bold);cell.setCellFormat(cf);//设置下划线cell = sheet.getWritableCell(0,1);WritableFont underline = new WritableFont(WritableFont.ARIAL,WritableFont.DEFAULT_POINT_SIZE,WritableFont.NO_BOLD,false,UnderlineStyle.SINGLE);cf = new WritableCellFormat(underline);cell.setCellFormat(cf);//直截添加可以覆盖掉setCellValueDirectly(sheet,sheet.getCell(0, 2),new Double(4),CellType.NUMBER);w2.write();w2.close();}public static void modifyDirectly1(File file) {try{// Excel获得文件Workbook wb = Workbook.getWorkbook(file);// 打开一个文件的副本,并且指定数据写回到原文件WritableWorkbook book = Workbook.createWorkbook(file,wb);WritableSheet sheet0 = book.getSheet(0);sheet0.addCell(new Label(0, 1, "陈小稳"));// 添加一个工作表WritableSheet sheet = book.createSheet( " 第二页" , 1 );sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据" ));book.write();book.close();} catch (Exception e) {System.out.println(e);}}public static void buildNewFormTemplete(File inputFile, File outputFile){try{// Excel获得文件Workbook wb = Workbook.getWorkbook(inputFile);// 打开一个文件的副本,并且指定数据写回到原文件WritableWorkbook book = Workbook.createWorkbook(outputFile,wb);WritableSheet sheet0 = book.getSheet(0);sheet0.addCell(new Label(0, 1, "陈小稳"));// 添加一个工作表WritableSheet sheet = book.createSheet( " 第二页" , 1 );sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据" ));book.write();book.close();} catch (Exception e) {System.out.println(e);}}public static void copyDateAndFormat(File inputFile, int inputFileSheetIndex, StringoutputFilePath) throws Exception {Workbook book = null;Cell cell = null;//1.避免乱码的设置WorkbookSettings setting = new WorkbookSettings();java.util.Locale locale = new java.util.Locale("zh","CN");setting.setLocale(locale);setting.setEncoding("ISO-8859-1");book = Workbook.getWorkbook(inputFile, setting);Sheet readonlySheet = book.getSheet(inputFileSheetIndex);OutputStream os=new FileOutputStream(outputFilePath);//输出的Excel文件URLWritableWorkbook wwb = Workbook.createWorkbook(os);//创建可写工作薄WritableSheet writableSheet = wwb.createSheet(readonlySheet.getName(), 0);//创建可写工作表//2.誊写不同数据格式的数据for (int rowIndex = 0; rowIndex < readonlySheet.getRows(); rowIndex++) {for (int colIndex = 0; colIndex < readonlySheet.getColumns(); colIndex++) {cell = readonlySheet.getCell(colIndex, rowIndex);//A2B2为合并的单元格,A2有内容,B2为空// if(colIndex == 0 && rowIndex == 1){// System.out.println(colIndex + "," + rowIndex + " type:" + cell.getType() +" :" + cell.getContents());// }//【有各种设置格式】if(cell.getType() == CellType.DA TE || cell.getType() == CellType.DATE_FORMULA){writableSheet.addCell(new jxl.write.DateTime(colIndex, rowIndex, ((DateCell)cell).getDate(),new jxl.write.WritableCellFormat(cell.getCellFormat())));}else if(cell.getType() == CellType.NUMBER || cell.getType() == CellType.NUMBER_FORMULA){writableSheet.addCell(new jxl.write.Number(colIndex, rowIndex, ((jxl.NumberCell)cell).getValue(),new jxl.write.WritableCellFormat(cell.getCellFormat())));}else if(cell.getType() == CellType.EMPTY){//空的以及合并单元格中第一列外的// System.out.println("EMPTY:"+cell.getContents());// System.err.println("空单元格at " + colIndex + "," + rowIndex +" content:" + cell.getContents());}else if(cell.getType() == BEL || cell.getType() == CellType.STRING_FORMULA){writableSheet.addCell(new Label(colIndex, rowIndex, cell.getContents(), new jxl.write.WritableCellFormat(cell.getCellFormat())));}else{System.err.println("其它单元格类型:" + cell.getType() + " at " + colIndex + "," + rowIndex +" content:" + cell.getContents());}// if(cell.getType() == CellType.STRING_FORMULA){// System.err.println(colIndex + "," + rowIndex +":" + cell.getContents() +" type:" + cell.getType());// }}}//3.处理合并单元格的事情(复制合并单元格格式)Range[] range = readonlySheet.getMergedCells();for (int i = 0; i < range.length; i++) {// System.out.println("第"+i+"处合并的单元格:"// +",getTopLeft="+range[i].getTopLeft().getColumn()// +","+range[i].getTopLeft().getRow()// +",getBottomRight="+range[i].getBottomRight().getColumn()// +","+range[i].getBottomRight().getRow()// );//topleftXIndex, topleftYIndex, bottomRightXIndex, bottomRightYIndexwritableSheet.mergeCells(range[i].getTopLeft().getColumn(),range[i].getTopLeft().getRow(),range[i].getBottomRight().getColumn(),range[i].getBottomRight().getRow());}//4.设置行列高宽for (int colIndex = 0; colIndex < readonlySheet.getColumns(); colIndex++) {writableSheet.setColumnView(colIndex,readonlySheet.getColumnView(colIndex));}for (int rowIndex = 0; rowIndex < readonlySheet.getRows(); rowIndex++) {writableSheet.setRowView(rowIndex,readonlySheet.getRowView(rowIndex));}wwb.write();wwb.close();os.close();}public static void writeExcelUseFormat(String outputFilePath,String outputFileSheetName) throws Exception{OutputStream os=new FileOutputStream(outputFilePath);//输出的Excel文件URLWritableWorkbook wwb = Workbook.createWorkbook(os);//创建可写工作薄WritableSheet sheet = wwb.createSheet(outputFileSheetName, 0);//创建可写工作表sheet.addCell(new Label(0, 0, "号码"));sheet.addCell(new Label(1, 0, "有效期"));//1.写入时间的数据格式jxl.write.DateFormat df = new jxl.write.DateFormat("yyyy-MM-dd");jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 1, new Date(), wcfDF); //自定义格式sheet.addCell(labelDTF);//2.字体样式// WritableFont()方法里参数说明:// 这个方法算是一个容器,可以放进去好多属性// 第一个: TIMES是字体大小,他写的是18// 第二个: BOLD是判断是否为斜体,选择true时为斜体// 第三个: ARIAL// 第四个: UnderlineStyle.NO_UNDERLINE 下划线// 第五个: jxl.format.Colour.RED 字体颜色是红色的jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);wcfF.setWrap(true);//自动换行wcfF.setAlignment(jxl.format.Alignment.CENTRE);//把水平对齐方式指定为居中wcfF.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);//把垂直对齐方式指定为居中bel labelC = new bel(0, 1, "This is a Label cell", wcfF);sheet.addCell(labelC);//3.添加带有formatting的Number对象jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);jxl.write.Number labelNF = new jxl.write.Number(0, 2, 3.1415926, wcfN);sheet.addCell(labelNF);//4.添加Boolean对象jxl.write.Boolean labelB = new jxl.write.Boolean(0, 3, false);sheet.addCell(labelB);//5.设置一个注解WritableCellFeatures cellFeatures = new WritableCellFeatures();cellFeatures.setComment("添加Boolean对象");labelB.setCellFeatures(cellFeatures);//6.单元格内换行WritableCellFormat wrappedText = new WritableCellFormat(WritableWorkbook.ARIAL_10_PT);wrappedText.setWrap(true);//可换行的label样式Label label = new Label(4, 0, "测试,\012测试。
jxl 函数
jxl 函数
JXL函数是Google Sheets中的一组函数,用于读取和写入Microsoft Excel 格式的文件。
这些函数允许用户在Google Sheets中打开和编辑Excel文件,而无需将它们转换为Google Sheets格式。
以下是一些常见的JXL函数:
1. JXL():此函数用于打开Excel文件并返回一个指向该文件的句柄。
语法如下:JXL("文件路径")。
2. JXL.SHEETS():此函数用于返回Excel文件中的工作表列表。
语法如下:JXL.SHEETS(句柄)。
3. JXL.READ():此函数用于读取Excel文件中的单元格数据。
语法如下:JXL.READ(句柄, 工作表名称, 单元格地址)。
4. JXL.WRITE():此函数用于将数据写入Excel文件中的单元格。
语法如下:JXL.WRITE(句柄, 工作表名称, 单元格地址, 数据)。
5. JXL.CLOSE():此函数用于关闭Excel文件。
语法如下:JXL.CLOSE(句柄)。
需要注意的是,JXL函数需要安装Google Sheets的JXL插件才能使用。
此外,由于JXL函数是专门用于读写Excel文件的,因此在使用时需要遵循Excel文件
的格式要求,否则可能会出现错误。
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 使用jxl技术excel文件进行导入和导出实验用到的知识与技术
java 使用jxl技术excel文件进行导入和导出实验用到的知识与技术Java是一种流行的编程语言,而JXL技术是一种用于处理Excel文件的Java库。
在本文中,我们将一步一步地介绍如何使用JXL技术导入和导出Excel文件。
我们将从JXL技术的概述开始,然后讨论如何导入Excel文件,接着是如何导出Excel文件。
JXL技术是一个基于Java的开源库,用于读取、写入和操作Microsoft Excel文件。
它提供了一组API,可以方便地处理Excel文件中的单元格、行和列。
不仅可以读取现有的Excel文件,还可以创建新的Excel文件并在其中写入数据。
JXL技术支持Excel的各种版本,包括xls和xlsx格式。
接下来,我们将讨论如何导入Excel文件。
首先,我们需要在项目中引入JXL库的依赖。
在Maven项目中,我们可以将以下依赖添加到pom.xml 文件中:xml<dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency>一旦我们引入了JXL依赖,我们就可以使用它的API来导入Excel文件。
首先,我们需要创建一个Workbook对象,它代表整个Excel文件。
我们可以使用Workbook类的静态方法getWorkbook()来打开一个现有的Excel文件,例如:javaWorkbook workbook = Workbook.getWorkbook(newFile("path/to/excel.xls"));在Workbook对象上,我们可以执行各种操作,例如获取特定的工作表、读取单元格的值等。
jxl操作excel
jxl操作exceljxl是一个韩国人写的java操作excel的工具,在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。
其中功能相对POI比较弱一点。
但jExcelAPI对中文支持非常好,API是纯Java的,并不依赖Windows 系统,即使运行在Linux下,它同样能够正确的处理Excel文件。
另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
使用如下:搭建环境将下载后的文件解包,得到jxl.jar,放入classpath,安装就完成了。
基本操作一、创建文件拟生成一个名为“test.xls”的Excel文件,其中第一个工作表被命名为“第一页”,大致效果如下:package test;//生成Excel的类import java.io.File;import jxl.Workbook;import bel;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class CreateExcel {public static void main(String args[]) {try{//打开文件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();} catch(Exception e) {System.out.println(e);}}}编译执行后,会产生一个Excel文件。
Java操作Excel之理解JXL--读取Excel
Java操作Excel之理解JXL--读取Excel.txtJXL(Java Excel API)是一个用来动态读写Excel文件的开源框架,利用它可以在任何支持Java的操作系统上动态读写Excel文件。
JXL的主页是:/jexcelapi/,可以在这里下载到它的最新的版本。
你可以分别通过如下命令java -jar jxl.jar -xml test.xlsjava -jar jxl.jar -cvs test.xls以xml和cvs格式查看test.xls,这是因为JXL作者实现了一个用来演示的jxl.demo.Demo 的类。
当然我们使用JXL主要是用它来动态读写Excel文件。
现在就来看看JXL在对Excel的读和写上都提供了那些支持。
先来看看Excel文件中都有写上面对象1 文件对象 2工作簿对象 3 单元格对象。
相应的在JXL中就有Workbook,Sheet ,Cell 。
通过这三个对象我们就可以实现Excel文件的读取工作。
我们先想想一下读取步骤,不管是什么样的Excel操作框架必定都要经历1选取Excel文件,2选择工作簿,3选择Cell,4读取信息。
那么现在就可以看看JXL中这四步骤如何体现://通过Workbook的静态方法getWorkbook选取Excel文件Workbook workbook = Workbook.getWorkbook(new File("myfile.xls"));//通过Workbook的getSheet方法选择第一个工作簿(从0开始)Sheet sheet = workbook.getSheet(0);//通过Sheet方法的getCell方法选择位置为C2的单元格(两个参数都从0开始)Cell c2 = sheet.getCell(2,1);//通过Cell的getContents方法把单元格中的信息以字符的形式读取出来String stringc2 = c2.getContents();可以看到正是刚才所说的四个步骤。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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);
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
创建Excel文件
public static void createExcel() throws Exception { File("D:\ my_project\ JXL_Test\ WritableWorkbook workBook=Workbook.createWorkbook(new File("D:\\my_project\\JXL_Test\\test.xls")); sheet=workBook.createSheet("第一页 第一页", WritableSheet sheet=workBook.createSheet("第一页", 0); Label(0,0,"编号 编号"); Label personIdLabel=new Label(0,0,"编号"); Label(1,0,"姓名 姓名"); Label personNameLabel=new Label(1,0,"姓名"); Label(2,0,"地址 地址"); Label personAddressLabel=new Label(2,0,"地址"); Label(3,0,"年龄 年龄"); Label personAgeLabel=new Label(3,0,"年龄"); sheet.addCell(personIdLabel); sheet.addCell(personNameLabel); sheet.addCell(personAddressLabel); sheet.addCell(personAgeLabel); List<Person> personList=new ArrayList<Person>(); Person(1,"张三","武汉 张三","武汉",22)); personList.add(new Person(1,"张三","武汉",22)); Person(2,"李四","武昌 李四","武昌",25)); personList.add(new Person(2,"李四","武昌",25)); Person(3,"王五","上海 王五","上海",20)); personList.add(new Person(3,"王五","上海",20)); Person(4,"赵六","杭州 赵六","杭州",29)); personList.add(new Person(4,"赵六","杭州",29)); Person(5,"刘七","广州 刘七","广州",24)); personList.add(new Person(5,"刘七","广州",24)); for(int i=0;i<personList.size();i++) {Person person=personList.get(i); Label personIdValue=new Label(0,(i+1),String.valueOf(person.getPersonId())); Label personNameValue=new Label(1,(i+1),person.getPersonName()); Label personAddressValue=new Label(2,(i+1),person.getAddress()); Label personAgeValue=new Label(3,(i+1),String.valueOf(person.getAge())); sheet.addCell(personIdValue); J2EE_Struts © 2010 IBM Corporation sheet.addCell(personNameValue); sheet.addCell(personAddressValue);
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
搭建环境
将下载后的文件解包,得到jxl.jar,放入classpath, 安装就完成了。
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
基本操作
一、创建文件
拟生成一个名为“测试数据.xls”的Excel文件 文件, 拟生成一个名为“测试数据.xls 的Excel文件,其中第一个工作表被命 .xls 名为“第一页” 名为“第一页”
IBM 课程体系
特征描述
支持Excel 95-2000的所有版本 生成Excel 2000标准格式 支持字体、数字、日期操作 能够修饰单元格属性 支持图像和图表 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的, 并不依赖Windows系统,即使运行在Linux下,它同样能够正确 的处理Excel文件。 另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。
IBM 课程体系
数据格式化
在WritableCellFormat类中,还有一个很重要的方 法是指定数据的对齐方式
//把水平对齐方式指定为居中 //把水平对齐方式指定为居中 format1.setAlignment(jxl.format.Alignment.CENTRE); //把垂直对齐方式指定为居中 //把垂直对齐方式指定为居中 format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENT RE); //设置自动换行 //设置自动换行 format1.setWrap(true);
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
二、单元格操作
Excel中很重要的一部分是对单元格的操作,比如行 高、列宽、单元格合并等,所幸jExcelAPI提供了这 些支持
J2EE_Struts
© 2010 IBM Corporation
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
数据格式化
WritableFont font1= new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); 或 //设置字体格式为excel支持的格式 WritableFont font3=new WritableFont(WritableFont.createFont("楷体 _GB2312"),12,WritableFont.NO_BOLD ); ① WritableCellFormat format1=new WritableCellFormat(font1); ② Label label=new Label(0,0,”data 4 test”,format1) ③ 其中 I.指定了字串格式:字体为TIMES,字号16,加粗显示。WritableFont有非常丰富 的构造函数,供不同情况下使 用,jExcelAPI的java-doc中有详细列表,这里不 再列出。 II.处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元 格的各种属性,后面的单元格格式化中会有更多 描述。 III.处使用了Label类的构造函数,指定了字串被赋予那种格式 J2EE_Struts © 2010 IBM Corporation