jxl操作excel
excel操作(jxl)
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
Excel高级操作 Excel高级操作
一、 数据格式化
在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期 Excel中不涉及复杂的数据类型,能够比较好的处理字串、 中不涉及复杂的数据类型 已经能够满足一般的应用。 已经能够满足一般的应用。 字串格式化 字符串的格式化涉及到的是字体、粗细、字号等元素, 字符串的格式化涉及到的是字体、粗细、字号等元素,这些功能主 要由WritableFont WritableCellFormat类来负责 WritableFont和 要由WritableFont和WritableCellFormat类来负责
excel操作 操作(jxl) Java excel操作(jxl)
IBM 课程体系
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
本讲目标
java导入导出excel操作(jxl) Java解释Excel数据(jxl.jar包的使用)
J2EE_Struts
© 2010 IBM Corporation
IBM 课程体系
读取Excel文件 读取Excel文件 Excel
public static void readExcel()throws Exception throws {Workbook workBook=Workbook.getWorkbook(new new File("D:\\my_project\\JXL_Test\\test.xls")); Sheet sheet=workBook.getSheet(0); int totalRow=sheet.getRows();//总行数 List<Person> personList=new ArrayList<Person>(); new for(int for int i=1;i<totalRow;i++) {Person p=new Person(); new Cell personIdCell=sheet.getCell(0,i);//行 列 Cell personNameCell=sheet.getCell(1,i); Cell personAddressCell=sheet.getCell(2,i); Cell personAgeCell=sheet.getCell(3,i); p.setPersonId(Integer.valueOf(personIdCell.getContents()));//得到内容 p.setAddress(personAddressCell.getContents()); p.setAge(Integer.valueOf(personAgeCell.getContents())); p.setPersonName(personNameCell.getContents()); J2EE_Struts personList.add(p);
Java操作Excel(poi、jxl_包介绍)
笔记——Java操作Excel(poi,jxl)使用poi或jxl操作excel的时候,设置格式,是一件挺麻烦的事情,面对用户的各种格式设置需求,你可能跟我开始时一样,无从下手。
多数格式设置,大家在网上都能很容易的找到答案,但是有一些还难注意或发现。
下边分享一下我的经验:用poi设置excel格式Poi设置单元格格式一般使用HSSFCellStyle:HSSFWorkbook book = new HSSFWorkbook();…HSSFCellStyle style = book.createCellStyle();//创建单元格样式style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置水平居中style.setV erticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//设置垂直居中style.setBorderTop(HSSFCellStyle.BORDER.THIN);//单元格上边框style.setBorderBottom(HSSFCellStyle.BORDER.THIN);//单元格下边框style.setBorderLeft(HSSFCellStyle.BORDER.THIN);//单元格左边框style.setBorderRight(HSSFCellStyle.BORDER.THIN);//单元格右边框style.setWrapText(true);//设置自动换行(如果没设置高度,则自适应行高度)…HSSFFont font = book.createFont();//创建字体样式font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//加粗…style.setFont(font);//给单元格设置字体样式…HSSFSheet sheet = book.createSheet(“工作表名称”);//创建工作表sheet.getPrintSetup().setLandscape(true);//页面设置横向打印…HSSFRow row = sheet.createRow(0);//第1行HSSFCell cell = row.createCell((shot)0);//第1列cell.setCellStyle(style);//给单元格设置样式cell.setCellV alue(new HSSFRichTextString(“单元格内容”));…Region region = new Region();region.setRowFrom(0);region.setRowTo(0);region.setColumnFrom((shot)0);region.setColumnTo((shot)12);sheet.addMergedRegion(region);//合并第1行的第1到13列用jxl设置excel格式Jxl设置单元格格式一般使用WritableCellFormat:WritableCellFormat format = new WritableCellFormat();//创建单元格样式format.setAlignment(Alignment.LEFT);//设置居左format.setBorder(Border.ALL,BorderLineStyle.THIN);//设置边框…format.setWarp(true);//设置自动换行(如果没设置高度,则自适应行高度)…WritableWorkBook book = null;…WritableSheet sheet = book.createSheet(“工作表名”,i);sheet.getSettings().setOrientation(NDSCAPE);//页面设置横向打印sheet.addCell(new Label(0,1, “单元格内容”,format));//给单元格设置样式sheet.mergeCells(0,2,18,2);//合并第3行的第1到19列不全,后续补充…。
Java操作Excel之JXL(填充EXCEL模板)转载
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行转列输出
使用jxl将excel行转列输出写在前面的话:最近工作时候领导让我们将如下样式的excel导入到库中刚开始以为是正常的excel导入,结果仔细一看!!字段是竖着的。
正常的字段是横着的,结果这货给的数据是竖着的。
反人类了!所以我们称这个功能是:反人类。
玩笑归玩笑但是没办法领导让做的。
只好做了。
下面是凯哥写的使用jxl将excel的行转列。
使用到的jar:Code:主要的实现方法:/*** excel 列转行** @parma n 表示截断excel的多少列为一行既是数据数量**/publicvoid rowcolumn(String inputfilename,String ouputfilename){intn;Workbook wb = null;WritableSheet ws = null;bel lable = null ;WritableWorkbook wwb = null;//大的第二行的插入行的起始位置intstarth = 0;intc=0;try {wb = Workbook.getWorkbook(new File(inputfilename));} catch (Exception e) {e.printStackTrace();System.out.println(e);}if(null == wb){return;}Sheet [] sheet = wb.getSheets();//获取工作表对象if(null != sheet && sheet.length >0){//创建第一个工作薄对象try {wwb = Workbook.createWorkbook(new File(ouputfilename));if(null != wwb){//创建一个可以写入的表。
第一个是工作薄名、第二个是工作薄的位置ws = wwb.createSheet("sheet1", 0);}} catch (Exception e) {e.printStackTrace();System.out.println(e);}for (inti = 0; i < sheet.length; i++) {//这里一般是由一个sheet 的intrownum = sheet[i].getRows();//工作薄对象的行数intcolumn = sheet[i].getColumns();System.out.println(rownum +" , "+column);n = rownum+1;for (intj = 0; j < column; j++) {//得到当前行的所有单元格Cell [] cell = sheet[i].getColumn(j);System.out.println("cell:"+cell);if(null != cell && cell.length>0){//写入excel文件的行数inthang = (j+1)*(((rownum-1)/rownum+1));//插入位置应该接着上次插入的最后一行的下一行开始for (intk = starth; k <hang; k++) {//写入文件的行数for (intk2 = 0; k2 < n; k2++) {if(0 == k2){lable = new bel(k2,k,cell[0].getContents()); }else{c++;if(c >= cell.length){lable = new bel(k2, k, "");c = 0;}else{lable = new bel(k2,k, cell[c].getContents()); System.out.println("----" + cell[c].getContents());}}try {ws.addCell(lable);//添加到excel} catch (Exception e) {System.out.println(e);}}}starth = hang;//把最后一行号赋值给第二个大行的插入位置System.out.println("start>>>"+starth);}}}}try {wwb.write();//写入excel文件wwb.close();} catch (Exception e) {System.out.println(e);}}测试方法:package com.kaigejava.poi;import java.io.File;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;/**** @author 凯哥java 反人类的excel导入。
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的write方法
jxl的write方法
JXL(Java Excel API)是一个用于读写Microsoft Excel文件
的开源Java库。
它提供了一种在Java应用程序中创建、修改和读
取Excel文件的方式。
在JXL库中,write方法用于将数据写入
Excel文件中。
write方法是用来写入单元格数据的,它可以写入文本、数字、日期等不同类型的数据。
在使用write方法时,首先需要创建一个WritableSheet对象,然后调用其write方法来写入数据。
write方法的具体用法取决于
要写入的数据类型。
例如,如果要写入文本数据,可以使用WritableSheet的write方法来写入Label对象;如果要写入数字
数据,可以使用write方法来写入Number对象;如果要写入日期数据,可以使用write方法来写入DateTime对象。
此外,write方法还可以指定要写入的单元格位置,以及可选
的单元格格式。
通过write方法,可以将数据写入指定的行和列位置,从而实现对Excel文件的定制化操作。
总的来说,JXL库中的write方法提供了灵活而丰富的功能,
可以满足不同类型数据的写入需求。
通过合理的调用write方法,
可以实现对Excel文件的有效管理和编辑,为Java应用程序的数据处理提供了便利。
需要注意的是,JXL库目前已经停止维护,推荐使用Apache POI或者其他更现代的Java Excel库来处理Excel文件。
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的实例讲解优点:Jxl对中⽂⽀持⾮常好,操作简单,⽅法看名知意。
Jxl是纯javaAPI,在跨平台上表现的⾮常完美,代码可以再windows或者Linux上运⾏⽽⽆需重新编写⽀持Excel 95-2000的所有版本(⽹上说⽬前可以⽀持Excel2007了,还没有尝试过)⽣成Excel 2000标准格式⽀持字体、数字、⽇期操作能够修饰单元格属性⽀持图像和图表,但是这套API对图形和图表的⽀持很有限,⽽且仅仅识别PNG格式。
缺点:效率低,图⽚⽀持不完善,对格式的⽀持不如POI强⼤案例:String times = (new SimpleDateFormat("yyyyMMddHHmmss")).format(new Date());String fname = "系统⽇志" + times; // ⽂件名List<Logs> list=logsService.selectForList(hql.toString());String path = request.getSession().getServletContext().getRealPath("/")+ "xls/"+ (new SimpleDateFormat("yyyyMMdd")).format(new Date());File file = new File(path);// 如果⽂件夹不存在则创建if (!file.exists() && !file.isDirectory()) {file.mkdir();}response.setContentType("application/vnd.ms-excel;charset=utf-8");// // 指定⽂件的保存类型。
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测试。
java利用jxl工具包操作Excel文件
java利用jxl工具包操作Excel文件2009-11-27 13:00简单讲解使用操作Excel的常用第三方工具包jxl来实现对Excel文件的读写。
我们先看一下读的操作:Java代码1./**2. * 读3. * @param file 欲读取的Excel文件的路径4. * @return5. * @throws Exception6. */7.public static String read(File file) throws Exception {8. StringBuffer sb = new StringBuffer();9.10. Workbook wb = null;11. try {12. // 获取工作簿对象13. wb = Workbook.getWorkbook(file);14. if (wb != null) {15. // 获取工作簿对象就可以获取工作簿内的工作表对象16. Sheet[] sheets = wb.getSheets();17. if (sheets != null && sheets.length != 0) {18. // 遍历工作簿内所有工作表19. for (int i=0;i<sheets.length;i++) {20. // 获取该工作表内的行数21. int rows = sheets[i].getRows();22. // 遍历行23. for (int j=0;j<rows;j++) {24. // 获取当前行的所有单元格25. Cell[] cells =sheets[i].getRow(j);26. if (cells != null && cells.length !=0) {27. // 遍历单元格28. for(int k=0;k<cells.length;k++){29. // 获取当前单元格的值30. String cell =cells[k].getContents();31. // 缩进32. sb.append(cell + "\t");33. }34. sb.append("\t\n");35. }36. }37. sb.append("\t\n");38. }39. }40. System.out.println("成功读取了:" + file +"\n");41. }42. } catch (Exception e) {43. System.out.println(e.getMessage());44. } finally {45. wb.close();46. }47. return sb.toString();48. }的返回类型是一个String,我定义了一个StringBuffer对象,大家知道StringBuffer 作是 append 和 insert 方法,可以重载这些方法,以接受任意类型的数据。
JXL操作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_ACCOUNTING UnderlineStyle.NO_UNDERLINE UnderlineStyle.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.GENERAL jxl.format.Alignment.JUSTIFY jxl.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,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();可以看到正是刚才所说的四个步骤。
java与Excel(.xls文件)---使用JXL创建,增添表格文件
java与Excel(.xls⽂件)---使⽤JXL创建,增添表格⽂件由于⼀些原因要搞⼀下excel⽂件,个⼈感觉poi太难,所以⽤了JXL(感觉⽐较简单)。
1.添加外部归档 jxl.jar2./** ⽣成的xls⽂件第⼀次需要⼿动选择EXCEL打开** */import java.io.DataOutputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.OutputStream;import java.text.SimpleDateFormat;import java.util.Date;import jxl.Workbook;import bel;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;public class CreateTest {public static void main(String[] args) throws IOException,RowsExceededException, WriteException {String[] title = {"时间", "座位", "菜名", "价格", "数量","总价" };// 获得时间SimpleDateFormat SDF=new SimpleDateFormat("yyyy-MM-dd "); //使⽣成的每天⽇期成为⽂件名(年⽉⽇)String NEWDATA=SDF.format(new Date())+".xml";// 输出的excel路径String path = "d:\\account\\"+NEWDATA;WritableWorkbook wwb;// 建⽴⼀个JXL⽂件,即在d盘⽣成⼀个test.xlsOutputStream os = new FileOutputStream(path);wwb = Workbook.createWorkbook(os);WritableSheet sheet = wwb.createSheet("产品清单", 0);Label label;for (int i = 0; i < title.length; i++) {label = new Label(i, 0, title[i]);sheet.addCell(label);}//填充时间座位菜名价格数量总价/*定义显⽰⽇期的公共模式*如 YYYY-MM-DD HH:MM*/SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm");String newData=sdf.format(new Date());label=new Label(0,1,newData);sheet.addCell(label);//座位 Stringlabel=new Label(1,1, "1号桌");sheet.addCell(label);//菜名 Stringlabel=new Label(2,1, "咖啡");sheet.addCell(label);//价格 numberjxl.write.Number number_1=new jxl.write.Number(3,1,20);sheet.addCell(number_1);//数量 numberjxl.write.Number number_2=new jxl.write.Number(4,1,2);sheet.addCell(number_2);//总价 numberjxl.write.Number number=new jxl.write.Number(5,1,40);sheet.addCell(number);wwb.write();wwb.close();}}感觉⼩⽩都可以看懂,就不详细讲了,欢迎前辈指点⽂章中可能存在的错误,O(∩_∩)O谢谢!。
jxl-jsp页面表格导出excel
Springmvc框架下使用jxl方法把表格导出成excel简单方法步骤:1、导入jxl包D:\dev\repository\net\sourceforge\jexcelapi\jxl\2.6.12\jxl-2.6.12.jar添加依赖:<dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency>2、新建类ExcelOutServiceimport java.io.File;import java.io.IOException;import java.io.OutputStream;import java.text.SimpleDateFormat;import java.util.List;import bel;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableImage;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.mvr.storeManagement.model.StockOut;import jxl.Workbook;import jxl.format.Alignment;import jxl.format.VerticalAlignment;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class ExcelOutService {public void downloadExcel(HttpServletResponse response,List<StockOut>list,HttpServletRequest request) {SimpleDateFormatsdf =new SimpleDateFormat("yyyy/MM/dd");SimpleDateFormatsd =new SimpleDateFormat("yyyy-MM-dd");WritableWorkbook book = null;response.reset();response.setCharacterEncoding("UTF-8");OutputStreamos = null;try {response.setContentType("application/DOWLOAD"); response.setCharacterEncoding("UTF-8");response.setHeader("Content-Disposition", "attachment; filename=out.xls");// 设置生成的文件名字os = response.getOutputStream();book = Workbook.createWorkbook(os);} catch (Exception e) {e.printStackTrace();}try {WritableSheet sheet = book.createSheet("出库单", 0);//wcff代表设置字体加粗字体大小局中WritableFontwfs = newWritableFont(WritableFont.TIMES,15,WritableFont.BOLD,false);//设置字体WritableCellFormatwcff=new WritableCellFormat(wfs);wcff.setAlignment(Alignment.CENTRE);//居中对齐//wcff1代表设置字体大小加粗剧中不加边框WritableFont wfs2 = newWritableFont(WritableFont.TIMES,10,WritableFont.BOLD,false);//设置字体WritableCellFormat wcff1=new WritableCellFormat(wfs2);wcff1.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直剧中//wcff3代表字体加粗加边框WritableFont wfs4 = newWritableFont(WritableFont.TIMES,10,WritableFont.BOLD,false);//设置字体WritableCellFormat wcff3=new WritableCellFormat(wfs4);wcff3.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.TH IN);//设置边框//wcff2代表设置字体不加粗剧中加边框WritableFont wfs3 = newWritableFont(WritableFont.TIMES,10,WritableFont.NO_BOLD,false); //设置字体WritableCellFormat wcff2=new WritableCellFormat(wfs3);wcff2.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直剧中wcff2.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.TH IN);//设置边框Stringpicpath=request.getSession().getServletContext().getRealPath("dark \\image")+"\\mvr.png";File file = new File(picpath);// File file = new File("D:\\test\\mvr.png");WritableImage image = new WritableImage(0, 0, 2, 2, file); sheet.addImage(image);sheet.setColumnView(1, 20);//设置第二列sheet.setColumnView(3, 20);sheet.setRowView(0, 600);sheet.setRowView(1, 400);sheet.mergeCells(1, 0, 6, 0);// 合并第三列列第一行到第六列第一行的所有单元格sheet.mergeCells(1, 1, 6, 1);//合并第3列第二行到第六列第二行sheet.mergeCells(1, 2, 3, 2);//合并第二列第三行到第4列第三行sheet.mergeCells(1, 3, 2, 3);//合并第二列第四行到第三列第四行sheet.mergeCells(4, 3, 6, 3);sheet.mergeCells(0, 0, 1, 1);Label lable= new Label(1,0,"天津科技有限公司",wcff);Label lable1= new Label(1,1,"领用出库单",wcff);Label lable2= new Label(0,2,"单号",wcff1);Label lable7= newLabel(1,2,"MVRCGRK-"+sd.format(list.get(0).getStock_out_time())+" -00",wcff1);Label lable3= new Label(4,2,"库房一",wcff1);Label lable4= new Label(5,2,"制单日期",wcff1);Label lable10= newLabel(6,2,sdf.format(list.get(0).getStock_out_time()),wcff1); Label lable5= new Label(0,3,"出库类型",wcff1);Label lable8= new Label(1,3,"生产出库",wcff1);Label lable6= new Label(3,3,"项目单号",wcff1);// Label lable9= new Label(4,3,"北京兴业",wcff1);Label lable13= new Label(0,4,"设备代码:",wcff3);sheet.mergeCells(0, 4, 2,4);Label lable14= new Label(3,4,"产品编号:",wcff3);sheet.mergeCells(3, 4, 6,4);Label lable15= new Label(0,5,"组装人:",wcff3);sheet.mergeCells(0, 5, 2,5);Label lable16= new Label(3,5,"质检人:",wcff3);sheet.mergeCells(3, 5, 6,5);sheet.addCell(lable);sheet.addCell(lable1);sheet.addCell(lable2);sheet.addCell(lable3);sheet.addCell(lable4);sheet.addCell(lable5);sheet.addCell(lable6);sheet.addCell(lable7);sheet.addCell(lable8);// sheet.addCell(lable9);sheet.addCell(lable10);sheet.addCell(new bel(0, 6, "序号",wcff2));//第一列sheet.addCell(new bel(1, 6, "物料编码",wcff2)); sheet.addCell(new bel(2,6, "货品名称",wcff2));sheet.addCell(new bel(3, 6, "规格型号",wcff2));sheet.addCell(new bel(4, 6, "单位",wcff2));sheet.addCell(new bel(5, 6, "数量",wcff2));sheet.addCell(new bel(6, 6, "备注",wcff2));for (inti = 7; i<list.size() + 7; i++) {sheet.addCell(new bel(0, i, String.valueOf(i-6),wcff2));// 序号从1开始sheet.addCell(new bel(1, i, list.get(i - 7).getMaterial_code(),wcff2)); sheet.addCell(new bel(2, i, list.get(i - 7).getProduct_nm(),wcff2)); sheet.addCell(new bel(3, i, list.get(i - 7).getNorms(),wcff2)); sheet.addCell(new bel(4, i, list.get(i - 7).getUnit(),wcff2));sheet.addCell(new bel(5, i, list.get(i -7).getStock_out_count().toString(),wcff2));sheet.addCell(new bel(6, i, list.get(i - 7).getDetails(),wcff2));}Label lable12= new Label(3,list.size()+7,"库管员:");Label lable17= new Label(5,list.size()+7,"审批人:");sheet.addCell(lable17);sheet.addCell(lable11);sheet.addCell(lable12);sheet.addCell(lable13);sheet.addCell(lable14);sheet.addCell(lable15);sheet.addCell(lable16);book.write();book.close();} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {try {os.flush();os.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}3、控制层request.getSession().setAttribute("soList", soList);stockOutDao.insertStockOut(soList);List<StockOut>rtList = (List<StockOut>)request.getSession().getAttribute("soList");ExcelOutService service=new ExcelOutService();service.downloadExcel(response, rtList,request);。
转: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
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
用jxl读取excel的数据,由于excel数据在录入时的各种原因,数据后面都有空格,而且读出来以后(也许是编码原因),数据口面不是出现"?"就是出现一个不知所谓的乱码符,不要考虑用替换,因为替换只有在你的项目编码方式和内存中excel数据编码方式一样的时候才能替换,否则你连保存都会提示编码问题而保存不了。
直接用subSequence(0, cellContent.length()-1) 就可以了同时提醒一下,读取出来的数据时Cell类型的话,直接getContent是可以得到内容的,但具体内容最好依靠下面的方法获Java代码1.if (cell.getType() == BEL) {2. LabelCell labelCell = (LabelCell) cell;3. String cellContent = labelCell.getString();4. cellContent = (String) cellContent.subSequence(0, cellContent.length()-1);5. column_contents[cols] = cellContent;6.}else7.if (cell.getType() == CellType.NUMBER) {8. //number的话不用去空格就可以,我测试是这样9. NumberCell numberCell = (NumberCell) cell;10. String cellContent = numberCell.getContents();11. column_contents[cols] = cellContent;12.}else13.if (cell.getType() == CellType.DATE) {14. DateCell dateCell = (DateCell) cell;15. Date dateDemo = dateCell.getDate();16. String cellContent = dateDemo.toString();17. column_contents[cols] = cellContent;18.}package com.study.poi;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.text.DecimalFormat;import java.text.ParseException;import java.text.SimpleDateFormat;import java.util.ArrayList;import java.util.Date;import java.util.Iterator;import java.util.List;import ermodel.HSSFDateUtil;import ermodel.HSSFWorkbook;import ermodel.Cell;import ermodel.Row;import ermodel.Sheet;import ermodel.Workbook;import ermodel.XSSFWorkbook;import com.study.entity.Emp;public class PoiExcelTest {public static void main(String[] args) {Class[] clazz=newClass[]{Integer.class,String.class,String.class,Integer.class,Date.cl ass,Double.class,Double.class,Integer.class};List<Emp> list=null;DecimalFormat df=new DecimalFormat("0.00");try {list = readExcel("d:"+File.separator+"test.xls",clazz); } catch (ParseException e) {e.printStackTrace();}for (Iterator<Emp> iter=list.iterator(); iter.hasNext();) { Emp emp=iter.next();System.out.println("Emp:"+emp.getEmpno()+"\t"+emp.getEnam e()+"\t"+df.format(emp.getSal())+"\t"+df.format(emp.getComm())+"\t"+n ewSimpleDateFormat("yyyy-MM-dd").format(emp.getHiredate())+"\t"+emp.get Deptno());}}private static int version2003=2003;private static int version2007=2003;private static int version=version2003;private static Workbook wb;private static Sheet sheet;private static Row row;private static Cell cell;public static List<Emp> readExcel(String excelFilePath,Class[] clazz) throws ParseException{List<Emp> list=new ArrayList<Emp>();Emp emp;version=(excelFilePath.endsWith(".xls")?version2003:version20 07);if(version==2003){try {InputStream stream=new FileInputStream(newFile(excelFilePath));wb=new HSSFWorkbook(stream);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}else if(version==2007){try {wb=new XSSFWorkbook(excelFilePath);} catch (IOException e) {e.printStackTrace();}}sheet=wb.getSheetAt(0);int rows=sheet.getLastRowNum();int cells=sheet.getRow(0).getPhysicalNumberOfCells();for (int i = 0; i < rows; i++) {row=sheet.getRow(i+1);emp=new Emp();for (int j = 0; j < cells; j++) {cell=row.getCell(j);Object obj=getCellValue(cell, clazz[j]);switch (j) {case 0:emp.setEmpno((Integer)obj);break;case 1:emp.setEname((String)obj);break;case 2:emp.setJob((String)obj);break;case 3:emp.setMgr((Integer)obj);break;case 4:emp.setHiredate(newSimpleDateFormat("yyyy-MM-dd").parse(obj.toString()));break;case 5:emp.setSal((Double)obj);break;case 6:emp.setComm((Double)obj);break;case 7:emp.setDeptno((Integer)obj);break;default:break;}}list.add(emp);}return list;}public static Object getCellValue(Cell cell,Class clazz){ String name=clazz.getSimpleName();if("String".equals(name)){return cell.getStringCellValue();}else if("Double".equals(name)){try {double valued=cell.getNumericCellValue();return valued;} catch (Exception e) {return 0.0;}}else if("Integer".equals(name)){try {int valuei=(int)cell.getNumericCellValue();return valuei;} catch (Exception e) {return 0;}}else if("Date".equals(name)){if(HSSFDateUtil.isCellDateFormatted(cell)){Date date=cell.getDateCellValue();if(date==null){return newSimpleDateFormat("yyyy-MM-dd").format(new Date());}else{return newSimpleDateFormat("yyyy-MM-dd").format(date);}}}return null;}}1.public class SummaryHSSF {2.3. public static void main(String[] args) throws IOException {4. //创建Workbook对象(这一个对象代表着对应的一个Excel文件)5. //HSSFWorkbook表示以xls为后缀名的文件6. Workbook wb = new HSSFWorkbook();7. //获得CreationHelper对象,这个应该是一个帮助类8. CreationHelper helper = wb.getCreationHelper();9. //创建Sheet并给名字(表示Excel的一个Sheet)10. Sheet sheet1 = wb.createSheet("HSSF_Sheet_1");11. Sheet sheet2 = wb.createSheet("HSSF_Sheet_2");12. //Row表示一行Cell表示一列13. Row row = null;14. Cell cell = null;15. for(int i=0;i<60;i=i+2){16. //获得这个sheet的第i行17. row = sheet1.createRow(i);18. //设置行长度自动19. //row.setHeight((short)500);20. row.setHeightInPoints(20);21. //row.setZeroHeight(true);22. for(int j=0;j<25;j++){23. //设置每个sheet每一行的宽度,自动,根据需求自行确定24. sheet1.autoSizeColumn(j+1, true);25. //创建一个基本的样式26. CellStyle cellStyle = SummaryHSSF.createStyleCell(wb);27. //获得这一行的每j列28. cell = row.createCell(j);29. if(j==0){30. //设置文字在单元格里面的位置31. cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER );32. //先创建字体样式,并把这个样式加到单元格的字体里面33. cellStyle.setFont(createFonts(wb));34. //把这个样式加到单元格里面35. cell.setCellStyle(cellStyle);36. //给单元格设值37. cell.setCellValue(true);38. }else if(j==1){39. //设置文字在单元格里面的位置40. cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER );41. //设置这个样式的格式(Format)42. cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "#,##0.0000");43. //先创建字体样式,并把这个样式加到单元格的字体里面44. cellStyle.setFont(createFonts(wb));45. //把这个样式加到单元格里面46. cell.setCellStyle(cellStyle);47. //给单元格设值48. cell.setCellValue(new Double(2008.2008));49. }else if(j==2){50. cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER );51. cellStyle.setFont(createFonts(wb));52. cell.setCellStyle(cellStyle);53. cell.setCellValue(helper.createRichTextString("RichString"+i+j));54. }else if(j==3){55. cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER );56. cellStyle = SummaryHSSF.setCellFormat(helper,cellStyle, "MM-yyyy-dd");57. cell.setCellStyle(cellStyle);58. cell.setCellValue(new Date());59. }else if(j==24){60. cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER );61. cellStyle.setFont(createFonts(wb));62. //设置公式63. cell.setCellFormula("SUM(E"+(i+1)+":X"+(i+1)+")");64. }else{65. cellStyle = SummaryHSSF.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER );66. cellStyle = SummaryHSSF.setFillBackgroundColors(cellStyle,IndexedColors.ORANGE.getIndex(),IndexedColors.OR ANGE.getIndex(),CellStyle.SOLID_FOREGROUND);67. cell.setCellStyle(cellStyle);68. cell.setCellValue(1);69. }70. }71. }72. //输出73. OutputStream os = new FileOutputStream(new File("c://SummaryHSSF.xls"));74. wb.write(os);75. os.close();76. }77. /**78. * 边框79. * @param wb80. * @return81. */82. public static CellStyle createStyleCell(Workbook wb){83. CellStyle cellStyle = wb.createCellStyle();84. //设置一个单元格边框颜色85. cellStyle.setBorderBottom(CellStyle.BORDER_THIN);86. cellStyle.setBorderTop(CellStyle.BORDER_THIN);87. cellStyle.setBorderLeft(CellStyle.BORDER_THIN);88. cellStyle.setBorderRight(CellStyle.BORDER_THIN);89. //设置一个单元格边框颜色90. cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());91. cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());92. cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());93. cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());94. return cellStyle;95. }96. /**97. * 设置文字在单元格里面的位置98. * CellStyle.ALIGN_CENTER99. * CellStyle.VERTICAL_CENTER100. * @param cellStyle101. * @param halign102. * @param valign103. * @return104. */105. public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){106. //设置上下107. cellStyle.setAlignment(CellStyle.ALIGN_CENTER); 108. //设置左右109. cellStyle.setVerticalAlignment(CellStyle.VERTICAL_ CENTER);110. return cellStyle;111. }112. /**113. * 格式化单元格114. * 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat 里面找115. * @param cellStyle116. * @param fmt117. * @return118. */119. public static CellStyle setCellFormat(CreationHelper h elper,CellStyle cellStyle,String fmt){120. //还可以用其它方法创建format121. cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));122. return cellStyle;123. }124. /**125. * 前景和背景填充的着色126. * @param cellStyle127. * @param bg IndexedColors.ORANGE.getIndex();128. * @param fg IndexedColors.ORANGE.getIndex();129. * @param fp CellStyle.SOLID_FOREGROUND130. * @return131. */132. public static CellStyle setFillBackgroundColors(CellSt yle cellStyle,short bg,short fg,short fp){133. //cellStyle.setFillBackgroundColor(bg);134. cellStyle.setFillForegroundColor(fg);135. cellStyle.setFillPattern(fp);136. return cellStyle;137. }138. /**139. * 设置字体140. * @param wb141. * @return142. */143. public static Font createFonts(Workbook wb){144. //创建Font对象145. Font font = wb.createFont();146. //设置字体147. font.setFontName("黑体");148. //着色149. font.setColor(HSSFColor.BLUE.index);150. //斜体151. font.setItalic(true);152. //字体大小153. font.setFontHeight((short)300);154. return font;155. }156.}读取Excel文件Java代码1.public class ReadExcel {2. public static void main(String[] args) throws Exception {3. InputStream is = new FileInputStream(new File("c://SummaryHSSF.xls"));4. //根据输入流创建Workbook对象5. Workbook wb = WorkbookFactory.create(is);6. //get到Sheet对象7. Sheet sheet = wb.getSheetAt(0);8. //这个必须用接口9. for(Row row : sheet){10. for(Cell cell : row){11. //cell.getCellType是获得cell里面保存的值的type12. //如Cell.CELL_TYPE_STRING13. switch(cell.getCellType()){14. case Cell.CELL_TYPE_BOOLEAN:15. //得到Boolean对象的方法16. System.out.print(cell.getBooleanCellValue()+" ");17. break;18. case Cell.CELL_TYPE_NUMERIC:19. //先看是否是日期格式20. if(DateUtil.isCellDateFormatted(cell)){21. //读取日期格式22. System.out.print(cell.getDateCellValue()+" ");23. }else{24. //读取数字25. System.out.print(cell.getNumericCellValue()+" ");26. }27. break;28. case Cell.CELL_TYPE_FORMULA:29. //读取公式30. System.out.print(cell.getCellFormula()+" ");31. break;32. case Cell.CELL_TYPE_STRING:33. //读取String34. System.out.print(cell.getRichStringCellValue().toString()+" ");35. break;36. }37. }38. System.out.println("");39. }40. }41.}还有一种传统的读法Java代码1.Sheet sheet = wb.getSheetAt(0);2. for (Iterator rit = sheet.rowIterator(); rit.hasNext(); ) {3. Row row = (Row)rit.next();4. for (Iterator cit = row.cellIterator(); cit.hasNext();) {5. Cell cell = (Cell)cit.next();6. // Do something here7. }8. }9. HSSFSheet sheet = wb.getSheetAt(0);10. for (Iterator<HSSFRow> rit = (Iterator<HSSFRow>)sheet.rowIterator(); rit.hasNext(); ) {11. HSSFRow row = rit.next();12. for (Iterator<HSSFCell> cit = (Iterator<HSSFCell>)row.cellIterator(); cit.hasNext(); ) {13. HSSFCell cell = cit.next();14. // Do something here15. }16. }1.jxl 生成报表Java代码1.package excel;2.3.import java.io.FileOutputStream;4.import java.io.OutputStream;5.import java.text.SimpleDateFormat;6.import java.util.Date;7.8.import jxl.Workbook;9.import jxl.format.Alignment;10.import jxl.format.Border;11.import jxl.format.BorderLineStyle;12.import jxl.format.CellFormat;13.import bel;14.import jxl.write.WritableCellFormat;15.import jxl.write.WritableFont;16.import jxl.write.WritableSheet;17.import jxl.write.WritableWorkbook;18./***********************************************************************19. *20. * jxlCreate.java21. * @copyright Copyright: 2009-201222. * @creator 周辉<br/>23. * @create-time Mar 9, 2010 1:35:19 PM24. * @revision $Id: *25. ***********************************************************************/26.public class jxlCreate {27.28. /**29. * @param args30. */31. public static void main(String[] args) {32. // 准备设置excel工作表的标题33. String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};34. try {35. // 获得开始时间36. long start = System.currentTimeMillis();37. // 输出的excel的路径38. String filePath = "c:\\test.xls";39. // 创建Excel工作薄40. WritableWorkbook wwb;41. // 新建立一个jxl文件,即在C盘下生成test.xls42. OutputStream os = new FileOutputStream(filePath);43. wwb=Workbook.createWorkbook(os);44. // 添加第一个工作表并设置第一个Sheet的名字45. WritableSheet sheet = wwb.createSheet("产品清单", 0);46. Label label;47. for(int i=0;i<title.length;i++){48. // Label(x,y,z)其中x代表单元格的第x+1列,第y+1行, 单元格的内容是y49. // 在Label对象的子对象中指明单元格的位置和内容50. label = new Label(i,0,title[i]);51. // 将定义好的单元格添加到工作表中52. sheet.addCell(label);53. }54. // 下面是填充数据55. /*56. * 保存数字到单元格,需要使用jxl.write.Number57. * 必须使用其完整路径,否则会出现错误58. * */59. // 填充产品编号60. jxl.write.Number number = new jxl.write.Number(0,1,20071001);61. sheet.addCell(number);62. // 填充产品名称63. label = new Label(1,1,"金鸽瓜子");64. sheet.addCell(label);65. /*66. * 定义对于显示金额的公共格式67. * jxl会自动实现四舍五入68. * 例如 2.456会被格式化为2.46,2.454会被格式化为2.4569. * */70. jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");71. jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf);72. // 填充产品价格73. jxl.write.Number nb = new jxl.write.Number(2,1,2.45,wcf);74. sheet.addCell(nb);75. // 填充产品数量76. jxl.write.Number numb = new jxl.write.Number(3,1,200);77. sheet.addCell(numb);78. /*79. * 定义显示日期的公共格式80. * 如:yyyy-MM-dd hh:mm81. * */82. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");83. String newdate = sdf.format(new Date());84. // 填充出产日期85. label = new Label(4,1,newdate);86. sheet.addCell(label);87. // 填充产地88. label = new Label(5,1,"陕西西安");89. sheet.addCell(label);90. /*91. * 显示布尔值92. * */93. jxl.write.Boolean bool = new jxl.write.Boolean(6,1,true);94. sheet.addCell(bool);95. /*96. * 合并单元格97. * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的98. * 表示将从第x+1列,y+1行到m+1列,n+1行合并99. *100. * */101. sheet.mergeCells(0,3,2,3);102. label = new Label(0,3,"合并了三个单元格");103. sheet.addCell(label);104. /*105. *106. * 定义公共字体格式107. * 通过获取一个字体的样式来作为模板108. * 首先通过web.getSheet(0)获得第一个sheet 109. * 然后取得第一个sheet的第二列,第一行也就是"产品名称"的字体110. * */111. CellFormat cf = wwb.getSheet(0).getCell(1, 0).getCellFormat();112. WritableCellFormat wc = new WritableCellFormat ();113. // 设置居中114. wc.setAlignment(Alignment.CENTRE);115. // 设置边框线116. wc.setBorder(Border.ALL, BorderLineStyle.THIN) ;117. // 设置单元格的背景颜色118. wc.setBackground(jxl.format.Colour.RED);119. label = new Label(1,5,"字体",wc);120. sheet.addCell(label);121.122. // 设置字体123. jxl.write.WritableFont wfont = new jxl.write.W ritableFont(WritableFont.createFont("隶书"),20);124. WritableCellFormat font = new WritableCellForm at(wfont);125. label = new Label(2,6,"隶书",font);126. sheet.addCell(label);127.128. // 写入数据129. wwb.write();130. // 关闭文件131. wwb.close();132. long end = System.currentTimeMillis();133. System.out.println("----完成该操作共用的时间是:"+(end-start)/1000);134. } catch (Exception e) {135. System.out.println("---出现异常---");136. e.printStackTrace();137. }138.139. }140.141.}2.POI 生成Java代码1.package excel;2.3.import java.io.FileOutputStream;4.import java.text.SimpleDateFormat;5.import java.util.Date;6.7.import ermodel.HSSFWorkbook;8.import ermodel.Cell;9.import ermodel.CellStyle;10.import ermodel.DataFormat;11.import ermodel.Row;12.import ermodel.Sheet;13.import ermodel.Workbook;14.import org.apache.poi.ss.util.CellRangeAddress;15.16.17./***********************************************************************18. *19. * poiCreate.java20. * @copyright Copyright: 2009-201221. * @creator 周辉<br/>22. * @create-time Mar 9, 2010 2:27:52 PM23. * @revision $Id: *24. ***********************************************************************/25.public class poiCreate {26.27. /**28. * @param args29. */30. public static void main(String[] args) throws Exception {31. //创建一个EXCEL32. Workbook wb = new HSSFWorkbook();33. DataFormat format = wb.createDataFormat();34. CellStyle style;35. //创建一个SHEET36. Sheet sheet1 = wb.createSheet("产品清单");37. String[] title = {"编号","产品名称","产品价格","产品数量","生产日期","产地","是否出口"};38. int i=0;39. //创建一行40. Row row = sheet1.createRow((short)0);41. //填充标题42. for (String s:title){43. Cell cell = row.createCell(i);44. cell.setCellValue(s);45. i++;46. }47. Row row1 = sheet1.createRow((short)1);48. //下面是填充数据49. row1.createCell(0).setCellValue(20071001);50. row1.createCell(1).setCellValue("金鸽瓜子");51. //创建一个单元格子52. Cell cell2=row1.createCell(2);53. // 填充产品价格54. cell2.setCellValue(2.45);55. style = wb.createCellStyle();56. style.setDataFormat(format.getFormat("#.##"));57. //设定样式58. cell2.setCellStyle(style);59. // 填充产品数量60. row1.createCell(3).setCellValue(200);61. /*62. * 定义显示日期的公共格式63. * 如:yyyy-MM-dd hh:mm64. * */65. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");66. String newdate = sdf.format(new Date());67. // 填充出产日期68. row1.createCell(4).setCellValue(newdate);69. row1.createCell(5).setCellValue("陕西西安");70. /*71. * 显示布尔值72. * */73. row1.createCell(6).setCellValue(true);74. /*75. * 合并单元格76. * 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的77. * 表示将first row, last row,first column,last column78. *79. * */80. Row row2 = sheet1.createRow((short) 2);81. Cell cell3 = row2.createCell((short) 0);82. cell3.setCellValue("合并了三个单元格");83. sheet1.addMergedRegion(new CellRangeAddress(2,2,0,2));84.85. FileOutputStream fileOut = new FileOutputStream("d:\\test.xls");86. wb.write(fileOut);87. fileOut.close();88.89.90. }91.92.}上面代码2中方式生成 2张报表,涉及到基本生成报表中的几种单元格类型。