1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java JXL操作Excel文件

java JXL操作Excel文件

时间:2023-06-08 00:28:12

相关推荐

java JXL操作Excel文件

-------------jxl和POI的区别(来自网络,感谢)-----jxl优点:①Jxl对中文支持非常好,操作简单,方法看名知意。②Jxl是纯javaAPI,在跨平台上表现的非常完美③生成Excel 2000标准格式④支持字体、数字、日期操作⑤能够修饰单元格属性④支持图像和图表,但是这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。缺点:效率低,图片支持不完善,对格式的支持不如POI强大POI优点:①效率高,效率测试,可参考:/jarvis_java/article/details/4924099②支持公式,宏,一些企业应用上会非常实用③能够修饰单元格属性④支持字体、数字、日期操作缺点:不成熟,bug较多

用于项目,主要是读取少量数据的导入和导出,需要稳定性,则选择jxl

pom.xml

<!-- execel --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.13</version></dependency><dependency><groupId>net.sourceforge.jexcelapi</groupId><artifactId>jxl</artifactId><version>2.6.12</version></dependency>

操作代码如下:

package my.demo.java.z.file;import java.io.File;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import jxl.Cell;import jxl.CellType;import jxl.Sheet;import jxl.Workbook;import jxl.format.Alignment;import jxl.format.VerticalAlignment;import jxl.read.biff.BiffException;import jxl.write.Boolean;import jxl.write.Label;import jxl.write.Number;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;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/*** Binary Interchange File Format:Biff 二进制文件交换格式* @desc 导入读取和导出写入* * */public class RWExcelFile_jxl {//logprivate static final Logger LOG = LoggerFactory.getLogger(ExcelFile_jxl.class);/*** 读取excel工作簿信息.<br>* @param book Excel工作簿* */public void readExcel(Workbook book){try {//获取excel下的sheet页总个数int maxSheet = book.getNumberOfSheets();LOG.info("Excel工作簿的sheet页总数:" + maxSheet + "页.");//获取各个excel,可以控制需要导入那个页for(int sheeti = 0; sheeti < maxSheet; sheeti++){LOG.info("第" + (sheeti + 1) + "页读取开始……");//获取sheet页Sheet sheet = book.getSheet(sheeti);//通过名称获取sheet页//Sheet sheet = book.getSheet("sheet3");//获取sheet的名称String sheetName = sheet.getName();LOG.info("第" + (sheeti + 1) + "页名称:" + sheetName + ".");//当前sheet实际行总数int realRows = sheet.getRows();LOG.info("第" + (sheeti + 1) + "页实际行总数:" + realRows + "行.");//当前sheet实际列总数int realColumns = sheet.getColumns();LOG.info("第" + (sheeti + 1) + "页实际列总数:" + realColumns + "列.");//遍历每行每列的单元格 --类似二位数组定位excel单元格读取//行for(int row = 0; row < realRows; row++){//列for(int column = 0; column < realColumns; column++){//定位的单元格Cell cell = sheet.getCell(column, row);//获取单元格类型CellType type = cell.getType();//获取单元格内容 -- 注:数据验证格式/纯数字需对科学计数法转换String content = cell.getContents();LOG.info("单元格[第" + (sheeti + 1) + "页-第" + (row + 1) + "行-第" + (column + 1) + "列(类型:" + type + ")]:" + content);}}//释放资源sheet = null;}} catch (IndexOutOfBoundsException e) {LOG.info("读取excel工作簿信息数组下标越界:" + e.getMessage(), e);}finally{//释放资源book.close();}}/*** 写入数据导出excel工作簿 -- 数据格式化* */public void writeExcel(){WritableWorkbook book = null;try {//不加路径,导出在项目根目录String excelName = "writeExcel.xls";File excel = new File(excelName);book = Workbook.createWorkbook(excel);//参数一:名称,写入名为"batchexport"sheet页,参数二:0表示这是第一页WritableSheet sheet = book.createSheet("batchexport", 0);//行高和列宽//将第一行的高度设为320sheet.setRowView(0 , 320);//将第4列的宽度设为30sheet.setColumnView(3 , 300);sheet.setColumnView(1 , 30);//构造Label对象,并指定单元格位置是第一列第一行(0,0)--(列,行)Label str1 = new Label(0, 0, "卡卡");//将定义好的str1添加到工作表中sheet.addCell(str1);Number num1 = new Number(1, 0, 17400005555.889d);sheet.addCell(num1);Boolean bool1 = new Boolean(2, 0, true);sheet.addCell(bool1);String time = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(System.currentTimeMillis());//---字串格式化//WritableFont不同情况下有非常丰富的构造方法,jExcelAPI的java-doc中有详细介绍,也可搜索.//字串格式:字体为TIMES,字号16,加粗显示 --WritableFont.createFont("宋体")WritableFont font1 = new WritableFont(WritableFont.TIMES, 16, WritableFont.BOLD);//WritableCellFormat类,通过它可以指定单元格的各种属性,单元格格式化WritableCellFormat format1 = new WritableCellFormat(font1);//定数据的对齐方式//水平对齐方式指定为居中format1.setAlignment(Alignment.CENTRE);format1.setVerticalAlignment(VerticalAlignment.CENTRE);//垂直对齐方式指定为居中//字串被赋予format1格式Label date = new Label(3, 0, "时间:" +time,format1);sheet.addCell(date);//合并第一列,第二行到第六列,第一行的所有单元格sheet.mergeCells(0 , 1, 5, 1);//写入数据到工作簿book.write();LOG.info(excelName + "写入文件导出成功.");} catch (RowsExceededException e) {LOG.info("写入Excel工作簿内容行超过异常:" + e.getMessage(), e);} catch (WriteException e) {LOG.info("写入Excel工作簿内容写入异常:" + e.getMessage(), e);} catch (IOException e) {LOG.info("写入Excel工作簿内容输入输出流异常:" + e.getMessage(), e);}finally{try {//关闭文件book.close();} catch (WriteException e) {LOG.info("写入Excel工作簿内容写入异常:" + e.getMessage(), e);} catch (IOException e) {LOG.info("写入Excel工作簿内容输入输出流异常:" + e.getMessage(), e);}}}/*** 修改数据导出excel工作簿* */public void editExcel(){String excelName = "writeExcel.xls";Workbook orgBook = null;WritableWorkbook reBook = null;try {File orgExcel = new File(excelName);File reExcel = new File(excelName);//获得excel文件orgBook = Workbook.getWorkbook(orgExcel);//打开一个excel文件的副本,并且指定数据写回到原文件reBook = Workbook.createWorkbook(reExcel, orgBook);//添加一个工作页WritableSheet sheet = reBook.createSheet("editSheet", 1);sheet.addCell(new Label(0, 0, "编辑excel文件测试数据"));reBook.write();LOG.info(excelName + "编辑文件导出成功.");} catch (RowsExceededException e) {LOG.info("编辑Excel工作簿内容异常:" + e.getMessage(), e);} catch (BiffException e) {LOG.info("编辑Excel工作簿内容异常:" + e.getMessage(), e);} catch (WriteException e) {LOG.info("编辑Excel工作簿内容异常:" + e.getMessage(), e);} catch (IOException e) {LOG.info("编辑Excel工作簿内容异常:" + e.getMessage(), e);}finally{try {reBook.close();orgBook.close();} catch (WriteException e) {LOG.info("编辑Excel工作簿内容写入异常:" + e.getMessage(), e);} catch (IOException e) {LOG.info("编辑Excel工作簿内容输入输出流异常:" + e.getMessage(), e);}}}/*** 文件形式.<br>* 操作Excel工作簿.<br>* @param file Excel文件* */public void readExcelOfFile(File file){Workbook book = null;try {book = Workbook.getWorkbook(file);readExcel(book);} catch (BiffException e) {LOG.info("读取Excel工作簿文件二进制文件交换格式异常:" + e.getMessage(), e);} catch (IOException e) {LOG.info("读取Excel工作簿文件输入输出流异常:" + e.getMessage(), e);}}/*** 输入流形式.<br>* 操作Excel工作簿.<br>* @param is Excel输入流,比如上传* @throws IOException * */public void readExcelOfInputStream(InputStream is) throws IOException{Workbook book = null;try {book = Workbook.getWorkbook(is);readExcel(book);} catch (BiffException e) {LOG.info("读取Excel工作簿文件二进制文件交换格式异常:" + e.getMessage(), e);} catch (IOException e) {LOG.info("读取Excel工作簿文件输入输出流异常:" + e.getMessage(), e);}finally{is.close();}}//测试public static void main(String[] args) {RWExcelFile_jxl jxlrw1 = new RWExcelFile_jxl();//读取//单元格格式--此处都为"文本"String excelPath = "D:/RWExcelFile_jxl.xls";File excel = new File(excelPath);jxlrw1.readExcelOfFile(excel);//导出jxlrw1.writeExcel();//编辑jxlrw1.editExcel();}}

测试结果:

第一次导出:

底部:

编辑:

底部:

读取:

底部:

读取结果:

15:58:47.810 [main] INFO my.demo.java.z.file.ExcelFile_jxl - Excel工作簿的sheet页总数:5页.

15:58:47.813 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第1页读取开始……

15:58:47.870 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第1页名称:批量注册.

15:58:47.870 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第1页实际行总数:10行.

15:58:47.871 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第1页实际列总数:5列.

15:58:47.871 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第1列(类型:Label)]:姓名

15:58:47.871 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第2列(类型:Label)]:手机号

15:58:47.872 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第3列(类型:Label)]:执证号

15:58:47.872 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第4列(类型:Empty)]:

15:58:47.872 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第1行-第5列(类型:Empty)]:

15:58:47.872 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第1列(类型:Label)]:本兮

15:58:47.872 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第2列(类型:Number)]:15500005550

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第3列(类型:Number)]:44556600000

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第4列(类型:Empty)]:

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第2行-第5列(类型:Empty)]:

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第1列(类型:Label)]:童可可

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第2列(类型:Number)]:15500005551

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第3列(类型:Number)]:44556600001

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第4列(类型:Empty)]:

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第3行-第5列(类型:Empty)]:

15:58:47.873 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第1列(类型:Empty)]:

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第2列(类型:Empty)]:

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第3列(类型:Empty)]:

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第4列(类型:Empty)]:

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第4行-第5列(类型:Empty)]:

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第1列(类型:Empty)]:

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第2列(类型:Label)]:true

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第3列(类型:Label)]:-12-31 09:50:55

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第4列(类型:Empty)]:

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第5行-第5列(类型:Empty)]:

15:58:47.874 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第1列(类型:Empty)]:

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第2列(类型:Empty)]:

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第3列(类型:Empty)]:

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第4列(类型:Empty)]:

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第6行-第5列(类型:Label)]:测试总列数

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第1列(类型:Label)]:@#$%^&*B11

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第2列(类型:Label)]:AAAAaaaa

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第3列(类型:Empty)]:

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第4列(类型:Empty)]:

15:58:47.875 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第7行-第5列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第1列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第2列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第3列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第4列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第8行-第5列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第1列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第2列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第3列(类型:Empty)]:

15:58:47.876 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第4列(类型:Empty)]:

15:58:47.877 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第9行-第5列(类型:Empty)]:

15:58:47.877 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第1列(类型:Empty)]:

15:58:47.877 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第2列(类型:Empty)]:

15:58:47.877 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第3列(类型:Label)]:测试总行数

15:58:47.877 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第4列(类型:Empty)]:

15:58:47.877 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 单元格[第1页-第10行-第5列(类型:Empty)]:

15:58:47.877 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第2页读取开始……

15:58:47.935 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第2页名称:Sheet1.

15:58:47.935 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第2页实际行总数:0行.

15:58:47.935 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第2页实际列总数:0列.

15:58:47.935 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第3页读取开始……

15:58:47.980 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第3页名称:Sheet2.

15:58:47.980 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第3页实际行总数:0行.

15:58:47.980 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第3页实际列总数:0列.

15:58:47.980 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第4页读取开始……

15:58:48.017 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第4页名称:Sheet3.

15:58:48.017 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第4页实际行总数:0行.

15:58:48.017 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第4页实际列总数:0列.

15:58:48.017 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第5页读取开始……

15:58:48.057 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第5页名称:Sheet4.

15:58:48.057 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第5页实际行总数:0行.

15:58:48.057 [main] INFO my.demo.java.z.file.ExcelFile_jxl - 第5页实际列总数:0列.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。