java中jxl操作excel
- 格式:docx
- 大小:32.03 KB
- 文档页数:6
JXL(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(newFile("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();可以看到正是刚才所说的四个步骤。
Jxls是一个基于Excel模板的Java库,用于在生成Excel报表时简化数据填充和格式化的过程。
在Jxls中,可以使用批注(Comment)来向Excel模板添加注释或说明。
以下是使用Jxls模板批注的一般步骤:1. 创建Excel模板:首先,你需要创建一个Excel模板文件,可以使用Microsoft Excel 或其他电子表格软件创建。
在模板中,选择需要添加批注的单元格,并将光标移至该单元格。
2. 添加批注:在选定的单元格上,使用电子表格软件提供的功能添加批注。
方法通常是右键单击单元格,然后选择“添加批注”或类似选项。
输入你想要添加的注释内容,并保存模板。
3. 在代码中使用Jxls:通过引入Jxls库和设置相关配置,你可以在Java代码中使用Jxls来处理Excel模板。
具体步骤包括创建模板引擎、加载模板文件、设置数据源等。
4. 填充数据:在使用Jxls生成Excel报表时,将需要填充到模板中的数据传递给模板引擎。
模板引擎将根据模板文件中的批注位置,将数据填充到对应的单元格,并保留原有的批注内容。
5. 生成Excel报表:最后,使用Jxls生成带有填充数据和批注的最终Excel报表。
这可以通过将填充后的数据保存为新的Excel文件或将数据写入现有的Excel文件来完成。
需要注意的是,使用Jxls模板批注时,确保模板中的批注不会影响数据填充和格式化的过程。
在生成报表时,Jxls会尝试保留模板中的批注内容,但如果有必要,也可以在生成报表前删除批注。
以上是使用Jxls模板批注的一般用法。
通过添加批注,你可以在Excel报表中提供附加信息或说明,使得报表更具可读性和易于理解。
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文件。
在做一个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 说到如何⽤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)// 打开⽂件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();。
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)该方法的作用是设置是否启用模板。
java jxl 单元格宽度样式Java jxl库是一款操作excel的Java第三方库,它可以对excel进行读取、写入、修改、合并等各种操作。
在Jxl中,单元格宽度样式是其中的一种常用功能。
本文将详细介绍如何通过jxl库进行单元格宽度样式的操作。
一、单元格宽度样式概述在excel中,单元格的宽度可以通过拖动列的边框来调整大小。
但是,如果我们需要定制某一列的宽度,或者需要一次性对多个单元格进行宽度的调整,手动拖动不仅费时费力,还容易出错。
这时,我们可以通过代码来设置单元格的宽度,实现更加自动化和高效的操作。
在jxl中,单元格的宽度使用的是宽度值,宽度值的单位是1/256个字符宽度。
因此,如果要设置单元格宽度为30个字符,则需要设置单元格宽度为30*256。
二、单元格宽度样式实现在jxl中,要设置单元格宽度样式需要使用WritableCellFormat类,并通过setWidth方法设置单元格的宽度值。
1. 设置单元格宽度以下代码为设置单元格宽度的示例:WritableCellFormat wcf = new WritableCellFormat();wcf.setWidth(20);2. 合并单元格并设置整行或整列的宽度如果要合并多个单元格并设置整行或整列的宽度,需使用setMerge方法设置单元格合并,使用setWidth方法设置整行或整列的宽度。
以下代码为合并单元格并设置整行或整列宽度的示例:WritableSheet sheet = workbook.createSheet("Sheet1", 0); WritableCellFormat wcf = new WritableCellFormat();wcf.setAlignment(Alignment.CENTRE);wcf.setVerticalAlignment(VerticalAlignment.CENTRE);wcf.setBorder(Border.ALL, BorderLineStyle.THIN);wcf.setBackground(Colour.GRAY_25);wcf.setWrap(true);WritableFont wf = new WritableFont(WritableFont.createFont("Arial"), 10, WritableFont.BOLD, false);wcf.setFont(wf);sheet.mergeCells(0, 0, 4, 0);sheet.setRowView(0, 500);sheet.setColumnView(0, 20);Label titleLabel = new Label(0, 0, "Title", wcf);sheet.addCell(titleLabel);在此示例中,我们首先创建了一个WritableSheet对象,并为其设置了样式。
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操作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.125 41 );sheet.addCell(number);//写入数据并关闭文件book.write();book.close();} catch (Exception e) {System.out.println(e);}}}编译执行后,会产生一个Excel文件。
三、读取文件以刚才我们创建的Excel文件为例,做一个简单的读取操作,程序代码如下:package test;//读取Excel的类import java.io.File;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;public class ReadExcel {public static void main(String args[]) {try {Workbook book = Workbook.getWorkbook( new File( " test.xls " ));//获得第一个工作表对象Sheet sheet = book.getSheet( 0 );//得到第一列第一行的单元格Cell cell1 = sheet.getCell( 0 , 0 );String result = cell1.getContents();System.out.println(result);book.close();} catch (Exception e) {System.out.println(e);}}}程序执行结果:test四、修改文件利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的时候,除了打开文件的方式不同之外,其他操作和创建Excel是一样的。
下面的例子是在我们已经生成的Excel文件中添加一个工作表:package test;import java.io.File;import jxl.Workbook;import bel;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class UpdateExcel {public static void main(String args[]) {try {// 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();} catch (Exception e) {System.out.println(e);}}其他操作一、数据格式化在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用。
1、字串格式化字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由WritableFont和WritableCellFormat类来负责。
假设我们在生成一个含有字串的单元格时,使用如下语句,为方便叙述,我们为每一行命令加了编号:WritableFont font1 =new WritableFont(WritableFont.TIMES, 16 ,WritableFont.BOLD); ①WritableCellFormat format1 = new WritableCellFormat(font1); ②Label label = new Label( 0 , 0 ,”data 4 test”,format1)③其中①指定了字串格式:字体为TIMES,字号16,加粗显示。
WritableFont 有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。
②处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,后面的单元格格式化中会有更多描述。
③处使用了Label类的构造子,指定了字串被赋予那种格式。
在WritableCellFormat类中,还有一个很重要的方法是指定数据的对齐方式,比如针对我们上面的实例,可以指定://把水平对齐方式指定为居中format1.setAlignment(jxl.format.Alignment.CENTRE);//把垂直对齐方式指定为居中format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);二、单元格操作Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。
这些操作相对比较简单,下面只介绍一下相关的API。
1、合并单元格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 );合并既可以是横向的,也可以是纵向的。
合并后的单元格不能再次进行合并,否则会触发异常。
2、行高和列宽WritableSheet.setRowView( int i, int height);//作用是指定第i+1行的高度,比如://将第一行的高度设为200sheet.setRowView( 0 , 200 );WritableSheet.setColumnView( int i, int width);//作用是指定第i+1列的宽度,比如://将第一列的宽度设为30sheet.setColumnView( 0 , 30 );jExcelAPI还有其他的一些功能,比如插入图片等,这里就不再一一介绍,读者可以自己探索。
其中:如果读一个excel,需要知道它有多少行和多少列,如下操作: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();。