JXL设置字体、颜色、背景等

合集下载

excel操作(jxl)

excel操作(jxl)

J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
Excel高级操作 Excel高级操作
一、 数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期 Excel中不涉及复杂的数据类型,能够比较好的处理字串、 中不涉及复杂的数据类型 已经能够满足一般的应用。 已经能够满足一般的应用。 字串格式化 字符串的格式化涉及到的是字体、粗细、字号等元素, 字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主 要由WritableFont WritableCellFormat类来负责 WritableFont和 要由WritableFont和WritableCellFormat类来负责
excel操作 操作(jxl) Java excel操作(jxl)
IBM 课程体系
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
本讲目标
java导入导出excel操作(jxl) Java解释Excel数据(jxl.jar包的使用)
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
读取Excel文件 读取Excel文件 Excel
public static void readExcel()throws Exception throws {Workbook workBook=Workbook.getWorkbook(new new File("D:\\my_project\\JXL_Test\\test.xls")); Sheet sheet=workBook.getSheet(0); int totalRow=sheet.getRows();//总行数 List<Person> personList=new ArrayList<Person>(); new for(int for int i=1;i<totalRow;i++) {Person p=new Person(); new Cell personIdCell=sheet.getCell(0,i);//行 列 Cell personNameCell=sheet.getCell(1,i); Cell personAddressCell=sheet.getCell(2,i); Cell personAgeCell=sheet.getCell(3,i); p.setPersonId(Integer.valueOf(personIdCell.getContents()));//得到内容 p.setAddress(personAddressCell.getContents()); p.setAge(Integer.valueOf(personAgeCell.getContents())); p.setPersonName(personNameCell.getContents()); J2EE_Struts personList.add(p);

[word文档] JXL 中文开发文档

[word文档] JXL 中文开发文档

Excel开发文档1开发调研1.1需求描述MS的电子表格(Excel)是Office的重要成员,是保存统计数据的一种常用格式。

作为办公文档,势必要涉及到的电子文档的交换,Excel是一种在企业中非常通用的文件格式,打印和管理也比较方便。

在一个Java应用中,将一部分数据生成Excel格式,是与其他系统无缝连接的重要手段。

1.2Excel开发常用开源工具在开源世界中,有两套比较有影响的API可供使用,一个是POI,一个是jExcelAPI。

1.3比较开源工具的优缺点1.3.1Jxl优缺点Jxl特征有如下描述:●支持Excel 95-2000的所有版本●生成Excel 2000标准格式●支持字体、数字、日期操作●能够修饰单元格属性●支持图像和图表应该说以上功能已经能够大致满足我们的需要。

最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。

另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。

1.3.2Poi优缺点Jakarta 的POI Project 与Java Excel API 在开源世界中可以说是并驾齐驱,但是也各有优劣,poi在某些细节有些小Bug并且不支持写入图片(poi其实可以写入图片,不过没有jxl来的方便,比较麻烦),其他方面都挺不错的;而JXL提供了对图片的支持(但是仅仅支持png格式的图片),问题就是对公式支持不是很好,但还是提供了简单的公式读取支持。

因此你的项目中要选用什么样的第三方插件为完全由你的应用来决定。

如果你的软件是跟财务有相当的关系的话,建议采用POI Project,就我所在目前的项目来说由于用不到计算公式,而且很可能需要导出图片,因此,我的选择是JXL 。

1.4性能比较以及最终选择1.4.1内存消耗:(来自网络)谈下JVM虚拟机内存消耗的情况.数据量3000条数据,每条60列.JVM虚拟机内存大小64M.使用POI:运行到2800条左右就报内存溢出.使用JXL:3000条全部出来,并且内存还有21M的空间.可想而知,在对内存的消耗方面差距还是挺大的.也许是由于JXL在对资源回收利用方面做的还挺不错的。

jxl操作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模板)转载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报表的时候还会遇到⼀种需求就是数据的格式问题,我们可能希望数值型单元格以某种格式显⽰,⽽字符串型单元格以另⼀种格式显⽰。

JAVA操作JXL(写入)实例

JAVA操作JXL(写入)实例
ws.addCell(labelC);
在Label()方法里面有三个参数
第一个是代表列数,
第二是代表行数,
第三个代表要写入的内容
第四个是可选项,是输入这个label里面的样式
然后通过写sheet的方法addCell()把内容写进sheet里面。
(2)添加带有formatting的Number对象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
DateTime()方法的参数说明
前两个表示输入的位置
第三个表示输入的当前时间
第五个: jxl.format.Colour.RED 字体颜色是红色的
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
bel labelC = new bel(0, 0, "This is a Label cell" ,wcfF);
* */
bel label;
for ( int i= 0 ; i<title.length; i++){
//Label(列号,行号 ,内容 )
label = new bel(i, 0 , title[i]); //put the title in row1
JAVA操作JXL(写入)实例.txt世上有三种人:一是良心被狗吃了的人,二是良心没被狗吃的人,三是良心连狗都不吃的人。︶﹋丶 爱情是个梦,而我却睡过了头﹌要往xls文件里面写入数据的时候需要注意的是第一要新建一个xls文件

jxl基本操作

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字段样式

第四个是可选项,是输入这个label里面的样式
然后通过写sheet的方法addCell()把内容写进sheet里面。
(2)添加带有formatting的Number对象
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##" );
ws.addCell(labelDTF);
(7)添加带有字体颜色Formatting的对象
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
(3)添加Number对象
(3.1)显示number对象数据的格式
jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##" );
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
import="jxl.format.*
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);

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(JavaExcelAPI)使用方法【2】

jxl(JavaExcelAPI)使⽤⽅法【2】JAVA EXCEL API简介Java Excel是⼀开放源码项⽬,通过它Java开发⼈员可以读取Excel⽂件的内容、创建新的Excel⽂件、更新已经存在的Excel⽂件。

使⽤该API⾮Windows操作系统也可以通过纯Java应⽤来处理Excel数据表。

因为是使⽤Java编写的,所以我们在Web应⽤中可以通过JSP、Servlet来调⽤API实现对Excel数据表的访问。

现在发布的稳定版本是V2.0,提供以下功能:* 从Excel 95、97、2000等格式的⽂件中读取数据;* 读取Excel公式(可以读取Excel 97以后的公式);* ⽣成Excel数据表(格式为Excel 97);* ⽀持字体、数字、⽇期的格式化;* ⽀持单元格的阴影操作,以及颜⾊操作;* 修改已经存在的数据表;现在还不⽀持以下功能,但不久就会提供了:1. 不能够读取图表信息;2. 可以读,但是不能⽣成公式,任何类型公式最后的计算值都可以读出;回页⾸应⽤⽰例1 从Excel⽂件读取数据表Java Excel API既可以从本地⽂件系统的⼀个⽂件(.xls),也可以从输⼊流中读取Excel数据表。

读取Excel数据表的第⼀步是创建Workbook(术语:⼯作薄),下⾯的代码⽚段举例说明了应该如何操作:(完整代码见ExcelReading.java)import java.io.*;import jxl.*;… … … …try{//构建Workbook对象, 只读Workbook对象//直接从本地⽂件创建Workbook//从输⼊流创建WorkbookInputStream is = new FileInputStream(sourcefile);jxl.Workbook rwb = Workbook.getWorkbook(is);}catch (Exception e){e.printStackTrace();}⼀旦创建了Workbook,我们就可以通过它来访问Excel Sheet(术语:⼯作表)。

Java通过POI和JXL给Excel动态添加水印

一:设置水印要显示的model类(非必要)package zp.ExcelUtil;import java.text.SimpleDateFormat;import java.util.Date;public class Model {private String ip;private String user;private Date date;public Model() {// TODO Auto-generated constructor stub}public Model(String ip, String user, Date date) {this.ip = ip;er = user;this.date = date;}public String getIp() {return ip;}public void setIp(String ip) {this.ip = ip;}public String getUser() {return user;}public void setUser(String user) {er = user;}public String getDate() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");return sdf.format(date);}public void setDate(Date date) {this.date = date;}}二.编写工具类package zp.ExcelUtil;import java.awt.AlphaComposite;import java.awt.BasicStroke;import java.awt.Color;import java.awt.Font;import java.awt.Graphics2D;import java.awt.font.FontRenderContext;import java.awt.geom.Rectangle2D;import java.awt.image.BufferedImage;import java.io.File;import java.io.IOException;import ng.reflect.Method;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import javax.imageio.ImageIO;import org.json.JSONException;import org.json.JSONObject;public class Utilss {private static int width = 900; // 水印图片的宽度private static int height = 1020; // 水印图片的高度因为设置其他的高度会有黑线,所以拉高高度/*** 将JavaBean转换成JSONObject(通过Map中转)** @param bean* javaBean* @return json对象* @throws Exception*/public static JSONObject modelToJSON(Object bean) throws Exception {return new JSONObject(toMap(bean));}/*** 将Javabean转换为Map** @param javaBean* javaBean* @return Map对象*/@SuppressWarnings({ "unchecked", "rawtypes" })public static Map toMap(Object javaBean) throws Exception { Map result = new HashMap();Method[] methods = javaBean.getClass().getDeclaredMethods();for (Method method : methods) {if (method.getName().startsWith("get")) {String field = method.getName();field = field.substring(field.indexOf("get") + 3);field = field.toLowerCase().charAt(0) + field.substring(1);Object value = method.invoke(javaBean, (Object[]) null);result.put(field, null == value ? "" : value.toString());}}return result;}/*** 将Json对象转换成Map** @param jsonObject* json对象* @return Map对象* @throws JSONException*/@SuppressWarnings({ "rawtypes", "unchecked" })public static Map toMap(String jsonString) throws JSONException { JSONObject jsonObject = new JSONObject(jsonString);Map result = new HashMap();Iterator iterator = jsonObject.keys();String key = null;String value = null;while (iterator.hasNext()) {key = (String) iterator.next();value = jsonObject.getString(key);result.put(key, value);}return result;}/*** 生成水印图片** @param watermark* @return* @throws IOException*/public static File createWaterMark(String watermark) throws IOException { int width = 800;int height = 1020;File file = new File("watermark.bmp");Font font = new Font("Serif", Font.ITALIC, 20);BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D g2 = bi.createGraphics();// 设置字体颜色为灰色g2.setColor(Color.LIGHT_GRAY);// 设置字体g2.setFont(font);// 设置字体倾斜度g2.rotate(Math.toRadians(0), (double) bi.getWidth() / 2, (double) bi.getHeight() / 2);g2.setBackground(Color.WHITE);g2.clearRect(0, 0, width, height);FontRenderContext context = g2.getFontRenderContext();Rectangle2D bounds = font.getStringBounds(watermark, context);double x = (width - bounds.getWidth()) / 2;double y = (height - bounds.getHeight()) / 2;double ascent = -bounds.getY();double baseY = y + ascent;g2.drawString(watermark, (int) x, (int) baseY);// ImageIO.write(bi, "bmp", file);// 通过bmp写入文件//BMPEncoder.write(bi, file);return file;}@SuppressWarnings({ "rawtypes", "unchecked" })public static Map createWaterMark1(Map watermarkMessage) throws IOException { Map map = new HashMap();File file = new File("watermark.bmp");// 获取bufferedImage对象BufferedImage bi = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);// 处理背景色,设置为白色int minx = bi.getMinX();int miny = bi.getMinY();for (int i = minx; i < width; i++) {for (int j = miny; j < height; j++) {bi.setRGB(i, j, 0xffffff);}}// 获取Graphics2d对象Graphics2D g2d = bi.createGraphics();// 设置字体颜色为灰色g2d.setColor(Color.LIGHT_GRAY);// 设置图片的属性g2d.setStroke(new BasicStroke(1));// 设置字体g2d.setFont(new Font("Serif", Font.ITALIC, 40));// 设置字体倾斜度g2d.rotate(Math.toRadians(-8));// 写入水印文字原定高度过小,所以累计写水印,增加高度for (int i = 1; i < 7; i++) {Object[] key = watermarkMessage.keySet().toArray();for (int j = 0; j < key.length; j++) {if (key[j].equals("date")) {g2d.drawString("日期: " + watermarkMessage.get(key[j]), 0, 180 * i + 40 * (j + 1));} else if (key[j].equals("user")) {g2d.drawString("用户: " + watermarkMessage.get(key[j]), 0, 180 * i + 40 * (j + 1));} else if (key[j].equals("ip")) {g2d.drawString("IP地址: " + watermarkMessage.get(key[j]), 0, 180 * i + 40 * (j + 1));} else {g2d.drawString((String) key[j] + " : " + watermarkMessage.get(key[j]), 0, 180 * i + 40 * (j + 1));}}}// 设置透明度g2d.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));// 释放对象g2d.dispose();// 通过bmp写入文件// BMPEncoder.write(bi, file);ImageIO.write(bi, "bmp", file);map.put("file", file);map.put("width", width);map.put("height", height);return map;}}三.编写处理类package zp.ExcelUtil;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.Map;import org.json.JSONObject;import jxl.Workbook;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class ExcelUtil {/**** @param xls_filePath_in 要添加水印的excel文件路径(必须是*.xls文件,如"/in.xls")* @param xls_filePath_out excel文件输出路径(必须是*.xls文件,如"/out.xls")* @param watermarkText* @throws Exception*/@SuppressWarnings("rawtypes")public static void addWatermark(String xls_filePath_in,String xls_filePath_out,JSONObject watermarkText) throws Exception{InputStream is = new FileInputStream(new File(xls_filePath_in));Workbook wb = Workbook.getWorkbook(is); // 获得原始文档WritableWorkbook wwb = Workbook.createWorkbook(new File(xls_filePath_out),wb);WritableSheet ws1 = wwb.getSheet(0);// 得到工作薄中的第一个工作表//String watermarkMessage = jsonObject.toString();Map watermarkMessage = Utilss.toMap(watermarkText.toString());Map map = Utilss.createWaterMark1(watermarkMessage);File fileImg = (File) map.get("file");//File fileImg = new File("kkkk.bmp");byte imageData[] = new byte[(int) fileImg.length()];FileInputStream fis = new FileInputStream(fileImg);fis.read(imageData);// must be 24 bit true-colour,bmp file// * @param imageByte// * @param widthPixel// * @param heightPixelws1.setWaterMarkImage(imageData, (int)map.get("width"), (int)map.get("height"));wwb.write();wwb.close();fis.close();}}四.测试package zp.ExcelUtil;import java.util.Date;import org.json.JSONObject;public class test {public static void main(String[] args) throws Exception {Model model = new Model("1.1.1.1", "tom", new Date());JSONObject jo = Utilss.modelToJSON(model);ExcelUtil.addWatermark("in.xls", "out.xls", jo);}}。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用JXL JExcelApi 生成Excel文档,并且设置字体、颜色、背景等2009-05-20 11:38package com.test.excel;import java.io.File;import java.io.IOException;import jxl.Workbook;import jxl.format.Border;import jxl.format.Colour;import jxl.format.UnderlineStyle;import jxl.format.BorderLineStyle;import jxl.write.Formula;import bel;import jxl.write.Number;import jxl.write.WritableCell;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;public class TestExcel {public static void writeExcel(File file){try {//创建一个Excel文档WritableWorkbook workbook = Workbook.createWorkbook(file);//创建一个SheetWritableSheet sheet = workbook.createSheet("Report-1", 0);//是否显示网格sheet.getSettings().setShowGridLines(true);//设置列宽sheet.getSettings().setDefaultColumnWidth(9);//设置行高sheet.getSettings().setDefaultRowHeight(500);Label label = new Label(1,1,"This is a Lable");sheet.addCell(label);//设置字体WritableFont font = newWritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineS tyle.NO_UNDERLINE,Colour.RED);WritableCellFormat cFormat = new WritableCellFormat(font);//设置背景色cFormat.setBackground(Colour.LIGHT_BLUE);Label label2 = new Label(5,13,"hello new Label",cFormat); sheet.addCell(label2);WritableSheet sheet2 = workbook.createSheet("report-2", 1);WritableCellFormat newFormat = new WritableCellFormat();newFormat.setBorder(Border.ALL, BorderLineStyle.DOUBLE);Label label3 = new Label(3,6,"border",newFormat);sheet.addCell(label3);Formula l3 = new Formula(10,10,"=SUM(C4:C5)");//公式暂未成功,本来准备计算l1与l2的和,并显示到l3,未成功 //WritableCell cell = l3.copyTo(2, 5);Number l1 = new Number(2,3,3);Number l2 = new Number(2,4,4);sheet.addCell(l1);sheet.addCell(l2);//sheet.addCell(cell);workbook.write();workbook.close();} catch (IOException e) {e.printStackTrace();} catch (WriteException e) {e.printStackTrace();}}public static void main(String args[]){File file = new File("d:/test.xls");writeExcel(file);}}////////////////////////////////////////////////////////////////////////////////////////////////////////////////////jxl写入excel时格式处理右对齐粗体颜色等等//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////File tempFile=new File("d:/temp/output.xls");WritableWorkbook workbook = Workbook.createWorkbook(tempFile);WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);//一些临时变量,用于写到excel中Label l=null;jxl.write.Number n=null;jxl.write.DateTime d=null;//预定义的一些字体和格式,同一个Excel中最好不要有太多格式WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD,false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLUE);WritableCellFormat headerFormat = new WritableCellFormat (headerFo nt);WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);WritableCellFormat titleFormat = new WritableCellFormat (titleFont );WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, Wr itableFont.NO_BOLD,false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLACK);WritableCellFormat detFormat = new WritableCellFormat (detFont);NumberFormat nf=new NumberFormat("0.00000"); //用于Number的格式WritableCellFormat priceFormat = new WritableCellFormat (detFont,nf);DateFormat df=new DateFormat("yyyy-MM-dd");//用于日期的WritableCellFormat dateFormat = new WritableCellFormat (detFont, d f);//剩下的事情,就是用上面的内容和格式创建一些单元格,再加到sheet中l=new Label(0, 0, "用于测试的Excel文件", headerFormat);sheet.addCell(l);//add Titleint column=0;l=new Label(column++, 2, "标题", titleFormat);sheet.addCell(l);l=new Label(column++, 2, "日期", titleFormat);sheet.addCell(l);l=new Label(column++, 2, "货币", titleFormat);sheet.addCell(l);l=new Label(column++, 2, "价格", titleFormat);sheet.addCell(l);//add detailint i=0;column=0;l=new Label(column++, i+3, "标题 "+i, detFormat);sheet.addCell(l);d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);sheet.addCell(d);l=new Label(column++, i+3, "CNY", detFormat);sheet.addCell(l);n=new jxl.write.Number(column++, i+3, 5.678, priceFormat);sheet.addCell(n);i++;column=0;l=new Label(column++, i+3, "标题 "+i, detFormat);sheet.addCell(l);d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);sheet.addCell(d);l=new Label(column++, i+3, "SGD", detFormat);sheet.addCell(l);n=new jxl.write.Number(column++, i+3, 98832, priceFormat);sheet.addCell(n);//设置列的宽度column=0;sheet.setColumnView(column++, 20);sheet.setColumnView(column++, 20);sheet.setColumnView(column++, 10);sheet.setColumnView(column++, 20);workbook.write();workbook.close();我正在做的项目里定义了很多样式,好像速度也不算慢,还有一些其他方面的定义,补充到下面://构造格式:ARIAL字体、10号、粗体、非斜体、无下划线、黑色WritableFont fmtx2TotalCaption = new WritableFont(WritableFont. ARIAL,10,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK);WritableCellFormat totalx2Format = new WritableCellFormat(fmtx2 TotalCaption);//文字垂直居中对齐totalx2Format.setVerticalAlignment(jxl.format.VerticalAlignment .CENTRE);//文字水平居中对齐totalx2Format.setAlignment(jxl.format.Alignment.CENTRE);//边框深蓝色totalx2Format.setBorder(jxl.format.Border.ALL,jxl.format.Border LineStyle.THIN,jxl.format.Colour.DARK_BLUE);//设置底色为冰蓝totalx2Format.setBackground(jxl.format.Colour.ICE_BLUE);sheet.mergeCells(0, row, 8, row); //合并单元格,row 到 row 行,0 到 8 列sheet.setRowView(row, 600);// 第 row 行的高度另外就是要在 Action(servlet) 中这么写,IE就会直接弹出保存文件的对话框(注意要占用当前窗口):String title = "XXXX统计";OutputStream out = response.getOutputStream();WritableWorkbook wb = Workbook.createWorkbook(out);response.setContentType("aplication/vnd.ms-excel")s;response.addHeader("Content-Disposition","inline; filename=" + new String(title.getBytes("GB2312"),"ISO8859_1") + ".xls"); //有中文必须转码。

相关文档
最新文档