java读取和写入EXCEL文件

合集下载

用java将数据写入excel(整理)

用java将数据写入excel(整理)

用java将数据写入excel(整理)1. 笔记:OutputStream os ;Label label;File file = new File(srcFilePath);File[] list=file.listFiles();os=new FileOutputStream(dstDir+"pnrdata_a330.xls");WritableWorkbook wwb = Workbook.createWorkbook(os);//创建xls文件WritableSheet ws = wwb.createSheet("PNRDATA",0);//设置sheet名//写抬头label = new Label(0,0,"PNR_ID");ws.addCell(label);label = new Label(1,0,"File_Name");ws.addCell(label);label = new Label(2,0,"Start_Index");ws.addCell(label);label = new Label(3,0,"End_Index");ws.addCell(label);wwb.write();2.首先需要一个JXL包,下载地址:/source/292830(1)生成EXCEL需要手动写查询语句把ORACLE数据库中的数据查询出来,再通过操作写到EXCEL文件里面。

(2)通过EXCEL把数据读取到ORACLE,同样需要去读取EXCEL工作薄里面的内容,再通过INSERT语句去插入数据库操作。

示例:包括从Excel读取数据,生成新的Excel,以及修改Excel Java代码1.package common.util;2.3.import jxl.*;4.import jxl.format.UnderlineStyle;5.import jxl.write.*;6.import jxl.write.Number;7.import jxl.write.Boolean;8.9.import java.io.*;10.11.12.public class ExcelHandle13.{14.public ExcelHandle()15.{16.}17.18./**19.* 读取Excel20.*21.* @param filePath22.*/23.public static void readExcel(String filePath)24.{25.try26.{27.InputStream is = new FileInputStream(filePath);28.Workbook rwb = Workbook.getWorkbook(is);29.//Sheet st = rwb.getSheet("0")这里有两种方法获取sheet 表,1为名字,而为下标,从0开始30.Sheet st = rwb.getSheet("original");31.Cell c00 = st.getCell(0,0);32.//通用的获取cell值的方式,返回字符串33.String strc00 = c00.getContents();34.//获得cell具体类型值的方式35.if(c00.getType() == BEL)36.{belCell labelc00 = (LabelCell)c00;38.strc00 = labelc00.getString();39.}40.//输出41.System.out.println(strc00);42.//关闭43.rwb.close();44.}45.catch(Exception e)46.{47. e.printStackTrace();48.}49.}50.51./**52.* 输出Excel53.*54.* @param os55.*/56.public static void writeExcel(OutputStream os)57.{58.try59.{60./**61.* 只能通过API提供的工厂方法来创建Workbook,而不能使用WritableWorkbook的构造函数,62.* 因为类WritableWorkbook的构造函数为protected类型63.* method(1)直接从目标文件中读取WritableWorkbook wwb = Workbook.createWorkbook(new File(targetfile));64.* method(2)如下实例所示将WritableWorkbook直接写入到输出流65.66.*/67.WritableWorkbook wwb = Workbook.createWorkbook(os);68.//创建Excel工作表指定名称和位置69.WritableSheet ws = wwb.createSheet("Test Sheet 1",0);70.71.//**************往工作表中添加数据*****************72.73.//1.添加Label对象bel label = new Label(0,0,"this is a label test");75.ws.addCell(label);76.77.//添加带有字型Formatting对象78.WritableFont wf = new WritableFont(WritableFont.TIMES,18,WritableFont.BOLD,true);79.WritableCellFormat wcf = new WritableCellFormat(wf);bel labelcf = new Label(1,0,"this is a label test",wcf);81.ws.addCell(labelcf);82.83.//添加带有字体颜色的Formatting对象84.WritableFont wfc = new WritableFont(WritableFont.ARIAL,10,WritableFont.NO_BOLD,fals e,85.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);86.WritableCellFormat wcfFC = new WritableCellFormat(wfc);bel labelCF = new Label(1,0,"This is a Label Cell",wcfFC);88.ws.addCell(labelCF);89.90.//2.添加Number对象91.Number labelN = new Number(0,1,3.1415926);92.ws.addCell(labelN);93.94.//添加带有formatting的Number对象95.NumberFormat nf = new NumberFormat("#.##");96.WritableCellFormat wcfN = new WritableCellFormat(nf);97.Number labelNF = new jxl.write.Number(1,1,3.1415926,wcfN);98.ws.addCell(labelNF);99.100.//3.添加Boolean对象101.Boolean labelB = new jxl.write.Boolean(0,2,false);102.ws.addCell(labelB);103.104.//4.添加DateTime对象105.jxl.write.DateTime labelDT = newjxl.write.DateTime(0,3,new java.util.Date());106.ws.addCell(labelDT);107.108.//添加带有formatting的DateFormat对象109.DateFormat df = new DateFormat("dd MM yyyy hh:mm:ss");110.WritableCellFormat wcfDF = new WritableCellFormat(df);111.DateTime labelDTF = new DateTime(1,3,new java.util.Date(),wcfDF);112.ws.addCell(labelDTF);113.114.115.//添加图片对象,jxl只支持png格式图片116.File image = new File("f:\\2.png");117.WritableImage wimage = new WritableImage(0,1,2,2,image);118.ws.addImage(wimage);119.//写入工作表120.wwb.write();121.wwb.close();122.}123.catch(Exception e)124.{125. e.printStackTrace();126.}127.}128.129./**130.* 拷贝后,进行修改,其中file1为被copy对象,file2为修改后创建的对象131.* 尽单元格原有的格式化修饰是不能去掉的,我们还是可以将新的单元格修饰加上去,132.* 以使单元格的内容以不同的形式表现133.* @param file1134.* @param file2135.*/136.public static void modifyExcel(File file1,File file2)137.{138.try139.{140.Workbook rwb = Workbook.getWorkbook(file1);141.WritableWorkbook wwb = Workbook.createWorkbook(file2,rwb);//copy142.WritableSheet ws = wwb.getSheet(0);143.WritableCell wc = ws.getWritableCell(0,0);144.//判断单元格的类型,做出相应的转换145.if(wc.getType == BEL)146.{bel label = (Label)wc;bel.setString("The value has been modified");149.}150.wwb.write();151.wwb.close();152.rwb.close();153.}154.catch(Exception e)155.{156. e.printStackTrace();157.}158.}159.160.161.//测试162.public static void main(String[] args)163.{164.try165.{166.//读Excel167.ExcelHandle.readExcel("f:/testRead.xls");168.//输出Excel169.File fileWrite = new File("f:/testWrite.xls");170.fileWrite.createNewFile();171.OutputStream os = new FileOutputStream(fileWrite); 172.ExcelHandle.writeExcel(os);173.//修改Excel174.ExcelHandle.modifyExcel(new file(""),new File("")); 175.}176.catch(Exception e)177.{178. e.printStackTrace();179.}180.}181.}2.在jsp中做相关测试,创建一个writeExcel.jspJava代码1.<%2.response.reset();//清除Buffer3.response.setContentType("application/vnd.ms-excel");4.File fileWrite = new File("f:/testWrite.xls");5.fileWrite.createNewFile();6.new FileOutputStream(fileWrite);7.ExcelHandle.writeExcel(new FileOutputStream(fileWrite));8.%>9.在IE中浏览writeExcel.jsp就可以动态生成Excel文档了,其中response.setContentType("application/vnd.ms-excel");语句必须要,才能确保不乱码,在jsp中输入<%@page contentType="application/vnd.ms-excel;charset=GBK"%>不行。

java中easyexsl的用法

java中easyexsl的用法

java中easyexsl的用法Java中EasyExcel的用法在Java开发中,处理Excel文件是一项常见的任务。

而EasyExcel 作为一款优秀的Java Excel解决方案,提供了便捷的API,简化了Excel文件的读写操作。

本文将介绍Java中EasyExcel的用法,包括Excel文件的读取和写入操作。

一、Excel文件读取在使用EasyExcel读取Excel文件时,首先需要定义对应的Java实体类,用于映射Excel文件中的数据。

接着通过EasyExcel提供的监听器,实现对Excel文件的读取操作。

下面是一个简单的读取Excel文件的示例代码:```java// 定义Excel实体类@Datapublic class UserData {@ExcelProperty("姓名")private String name;@ExcelProperty("年龄")private Integer age;@ExcelProperty("性别")private String gender;}// 使用EasyExcel读取Excel文件String fileName = "test.xlsx";String sheetName = "Sheet1";EasyExcel.read(fileName, UserData.class, new AnalysisEventListener<UserData>() {@Overridepublic void invoke(UserData data, AnalysisContext context) {// 处理每一行数据}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {// 读取完成后的操作}}).sheet(sheetName).doRead();```在`invoke`方法中处理每一行数据。

java获取excel文件内容的方法

java获取excel文件内容的方法

一、介绍在开发过程中,我们经常会遇到需要读取Excel文件内容的情况。

而Java作为一种广泛应用的编程语言,具有丰富的库和功能,使得它成为一种很好的选择。

本文将介绍如何使用Java来获取Excel文件的内容,并将分为以下几个部分来进行讲解。

二、使用POI库进行Excel文件操作POI(Poor Obfuscation Implementation)是Apache基金会的一个开源项目,它为Java程序提供了读取和写入Microsoft Office格式文件的功能。

具体来说,POI库中的HSSF模块可以用于读取和操作Excel文件。

以下是使用POI库进行Excel文件操作的步骤。

1. 引入POI库首先需要引入POI库的相关依赖。

可以通过Maven来引入POI库,添加以下依赖到项目的pom.xml文件中即可:```xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>```2. 读取Excel文件接下来,我们可以通过POI库的相关类来读取Excel文件。

首先需要创建一个文件输入流来读取Excel文件,然后通过HSSFWorkbook类来加载文件内容,最后可以通过遍历的方式获取Excel文件的内容。

以下是一个简单的示例:```javaFileInputStream file = new FileInputStream("example.xls"); HSSFWorkbook workbook = new HSSFWorkbook(file); HSSFSheet sheet = workbook.getSheetAt(0);for (Row row : sheet) {for (Cell cell : row) {// 处理单元格的内容}}```3. 处理Excel文件内容在读取Excel文件内容后,我们可以通过POI库提供的类来处理Excel 文件的内容,比如获取单元格的值、设置单元格的值等操作。

Java读取Excel文件的几种方法

Java读取Excel文件的几种方法

Java读取Excel文件的几种方法最近单位有个项目需要读取excel文件的内容,特别对java读取excel文件的方法做了一点学习,也为了其他人以后能更简单地开发,少走弯路,特写此文,以下程序经过了我的测试,可以保证程序可用,如果你照搬都不行,可能是你的环境有问题。

读取excel文件的常用开源免费方法有以下几种:JDBC-ODBC Excel Driverjxl.jarjcom.jarpoi.jar下面分别对这几种方法分别进行探讨1、JDBC-ODBC Excel Driver这种方法是将excel看成是数据库进行操作,使用SQL Select语句即可查询excel表格。

优点是:不需要第三方的jar包。

如下表样首先在控制面板进行数据源ODBC登记具体方法如下:下面就是代码了。

package xuzhe;import java.io.*;import java.sql.*;//java xuzhe.ExcelJDBCpublic class ExcelJDBC {public static void main(String[] args) throws SQLException{Connection con = null;try{Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");con = DriverManager.getConnection( "jdbc:odbc:ExcelJDBC" );Statement st = con.createStatement();ResultSet rs = st.executeQuery( "Select * from [Sheet1$]" );ResultSetMetaData rsmd = rs.getMetaData();int numberOfColumns = rsmd.getColumnCount();System.out.println ("表格列数"+numberOfColumns );System.out.println( rsmd.getColumnName(1)+ "," +rsmd.getColumnName(2) + "," + rsmd.getColumnName(3));while (rs.next()) {for (int i = 1; i <= numberOfColumns; i++) {if (i > 1) System.out.print(", ");String columnValue = rs.getString(i);System.out.print(columnValue);}System.out.println("");}rs.close();st.close();}catch(Exception ex) {System.err.print("Exception: ");System.err.println(ex.getMessage());}finally {con.close();}}}执行结果如下:2、jxl.jarjxl.jar为开源代码,任何运行java虚拟机的操作系统都能使用这个jar包操作excel表格。

Java如何读取Excel格式xls、xlsx数据工具类

Java如何读取Excel格式xls、xlsx数据工具类

Java如何读取Excel格式xls、xlsx数据⼯具类⽬录Java 读取Excel格式xls、xlsx数据⼯具类需要POI的jar包⽀持调⽤⽅式使⽤poi读取xlsx格式的Excel总结今天遇到的坑我使⽤的是springmvc,⾸先是controller部分然后是读取Excel⽂件部分,也就是service部分spring-servlet.xml 配置如下最初的maven是这么配置的Java 读取Excel格式xls、xlsx数据⼯具类需要POI的jar包⽀持调⽤⽅式ReadExcelTest excelTest = new ReadExcelTest();excelTest.readExcel("D:\\data1.xlsx");package com.util;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import ermodel.HSSFWorkbook;import ermodel.Cell;import ermodel.Row;import ermodel.Sheet;import ermodel.Workbook;import ermodel.XSSFWorkbook;import org.apache.xmlbeans.impl.piccolo.io.FileFormatException;public class ReadExcelTest {private static final String EXTENSION_XLS = "xls";private static final String EXTENSION_XLSX = "xlsx";/**** <pre>* 取得Workbook对象(xls和xlsx对象不同,不过都是Workbook的实现类)* xls:HSSFWorkbook* xlsx:XSSFWorkbook* @param filePath* @return* @throws IOException* </pre>*/private Workbook getWorkbook(String filePath) throws IOException {Workbook workbook = null;InputStream is = new FileInputStream(filePath);if (filePath.endsWith(EXTENSION_XLS)) {workbook = new HSSFWorkbook(is);} else if (filePath.endsWith(EXTENSION_XLSX)) {workbook = new XSSFWorkbook(is);}return workbook;}/*** ⽂件检查* @param filePath* @throws FileNotFoundException* @throws FileFormatException*/private void preReadCheck(String filePath) throws FileNotFoundException, FileFormatException {// 常规检查File file = new File(filePath);if (!file.exists()) {throw new FileNotFoundException("传⼊的⽂件不存在:" + filePath);}if (!(filePath.endsWith(EXTENSION_XLS) || filePath.endsWith(EXTENSION_XLSX))) {throw new FileFormatException("传⼊的⽂件不是excel");}}/*** 读取excel⽂件内容* @param filePath* @throws FileNotFoundException* @throws FileFormatException*/public void readExcel(String filePath) throws FileNotFoundException, FileFormatException {// 检查this.preReadCheck(filePath);// 获取workbook对象Workbook workbook = null;try {workbook = this.getWorkbook(filePath);// 读⽂件⼀个sheet⼀个sheet地读取for (int numSheet = 0; numSheet < workbook.getNumberOfSheets(); numSheet++) {Sheet sheet = workbook.getSheetAt(numSheet);if (sheet == null) {continue;}System.out.println("=======================" + sheet.getSheetName() + "========================="); int firstRowIndex = sheet.getFirstRowNum();int lastRowIndex = sheet.getLastRowNum();// 读取⾸⾏即,表头Row firstRow = sheet.getRow(firstRowIndex);for (int i = firstRow.getFirstCellNum(); i <= firstRow.getLastCellNum(); i++) {Cell cell = firstRow.getCell(i);String cellValue = this.getCellValue(cell, true);System.out.print(" " + cellValue + "\t");}System.out.println("");// 读取数据⾏for (int rowIndex = firstRowIndex + 1; rowIndex <= lastRowIndex; rowIndex++) {Row currentRow = sheet.getRow(rowIndex);// 当前⾏int firstColumnIndex = currentRow.getFirstCellNum(); // ⾸列int lastColumnIndex = currentRow.getLastCellNum();// 最后⼀列for (int columnIndex = firstColumnIndex; columnIndex <= lastColumnIndex; columnIndex++) {Cell currentCell = currentRow.getCell(columnIndex);// 当前单元格String currentCellValue = this.getCellValue(currentCell, true);// 当前单元格的值System.out.print(currentCellValue + "\t");}System.out.println("");}System.out.println("======================================================");}} catch (Exception e) {e.printStackTrace();} finally {if (workbook != null) {try {workbook.close();} catch (IOException e) {e.printStackTrace();}}}}/*** 取单元格的值* @param cell 单元格对象* @param treatAsStr 为true时,当做⽂本来取值 (取到的是⽂本,不会把“1”取成“1.0”)* @return*/private String getCellValue(Cell cell, boolean treatAsStr) {if (cell == null) {return "";}if (treatAsStr) {// 虽然excel中设置的都是⽂本,但是数字⽂本还被读错,如“1”取成“1.0”// 加上下⾯这句,临时把它当做⽂本来读取cell.setCellType(Cell.CELL_TYPE_STRING);}if (cell.getCellType() == Cell.CELL_TYPE_BOOLEAN) {return String.valueOf(cell.getBooleanCellValue());} else if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {return String.valueOf(cell.getNumericCellValue());} else {return String.valueOf(cell.getStringCellValue());}}}使⽤poi读取xlsx格式的Excel总结今天遇到的坑公司实习⽣项⽬,其中有个功能是读取Excel数据,之前做过以为很快就能搞定,万万没想到,本地写的⼀切都正常,可就在要发布⽣产了,尼玛测试环境居然出bug了读取xlsx格式的Excel,读不了,本地完全可以,就是测试环境上不⾏,⼼⾥⼀万只曹尼玛奔过下⾯是代码部分:我使⽤的是springmvc,⾸先是controller部分@RequestMapping("ReadFromExcel")@ResponseBodypublic Response ReadFromExcel(@RequestParam(value = "file") MultipartFile file,@RequestAttribute("userNo") String userNo) {try {//校验⽂件checkFile(file);List<ArrayList<String>> list =excelService.readExcel(file);if (CollectionUtils.isEmpty(list)) {return new Response(ERROR_CODE, "导⼊的⽂件没有数据",false);}}catch (Exception e){logger.error("ReadFromExcel异常",e);}return new Response(ERROR_CODE, "导⼊失败", false);}private void checkFile(MultipartFile file) throws IOException {//判断⽂件是否存在if(null == file){logger.error("⽂件不存在!");throw new FileNotFoundException("⽂件不存在!");}//获得⽂件名String fileName = file.getOriginalFilename();("ReadFromExcel fileName",fileName);//判断⽂件是否是excel⽂件if(!fileName.endsWith(xls) && !fileName.endsWith(xlsx)){logger.error(fileName + "不是excel⽂件");throw new IOException(fileName + "不是excel⽂件");}}然后是读取Excel⽂件部分,也就是service部分这些⽹上随便⼀搜都能搜到@Overridepublic List<ArrayList<String>> readExcel(MultipartFile file) {List<ArrayList<String>> list = new ArrayList<ArrayList<String>>();try {// 检查⽂件("ExcelServiceImpl 获取⽂件名", file.getOriginalFilename());// 获得Workbook⼯作薄对象Workbook workbook = getWorkBook(file);// 创建返回对象,把每⾏中的值作为⼀个数组,所有⾏作为⼀个集合返回("获得Workbook⼯作薄对象", file.getOriginalFilename());if (workbook != null) {for (int sheetNum = 0; sheetNum < workbook.getNumberOfSheets(); sheetNum++) { // 获得当前sheet⼯作表Sheet sheet = workbook.getSheetAt(sheetNum);("获得当前sheet⼯作表", file.getOriginalFilename());if (sheet == null) {continue;}// 获得当前sheet的开始⾏int firstRowNum = sheet.getFirstRowNum();// 获得当前sheet的结束⾏int lastRowNum = sheet.getLastRowNum();// 循环除了第⼀⾏的所有⾏for (int rowNum = firstRowNum + 1; rowNum <= lastRowNum; rowNum++) {// 获得当前⾏Row row = sheet.getRow(rowNum);if (row == null) {continue;}// 获得当前⾏的开始列int firstCellNum = row.getFirstCellNum();// 获得当前⾏的列数int lastCellNum = row.getPhysicalNumberOfCells();ArrayList<String> cells = new ArrayList<>();// 循环当前⾏for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) {Cell cell = row.getCell(cellNum);cells.add(getCellValue(cell));}list.add(cells);}}}} catch (Exception e) {logger.error("readExcel Exception", e.getMessage());}return list;}private Workbook getWorkBook(MultipartFile file) {// 获得⽂件名String fileName = file.getOriginalFilename();// 创建Workbook⼯作薄对象,表⽰整个excelWorkbook workbook = null;try {// 获取excel⽂件的io流InputStream is = file.getInputStream();("获取excel⽂件的io流");// 根据⽂件后缀名不同(xls和xlsx)获得不同的Workbook实现类对象if (fileName.endsWith(xls)) {// 2003workbook = new HSSFWorkbook(is);} else if (fileName.endsWith(xlsx)) {// 2007workbook = new XSSFWorkbook(is);}} catch (Exception e) {(e.getMessage());}return workbook;}private String getCellValue(Cell cell) {String cellValue = "";if (cell == null) {return cellValue;}// 把数字当成String来读,避免出现1读成1.0的情况if (cell.getCellType() == Cell.CELL_TYPE_NUMERIC) {cell.setCellType(Cell.CELL_TYPE_STRING);}// 判断数据的类型switch (cell.getCellType()) {case Cell.CELL_TYPE_NUMERIC: // 数字cellValue = String.valueOf(cell.getNumericCellValue());break;case Cell.CELL_TYPE_STRING: // 字符串cellValue = String.valueOf(cell.getStringCellValue());break;case Cell.CELL_TYPE_BOOLEAN: // BooleancellValue = String.valueOf(cell.getBooleanCellValue());break;case Cell.CELL_TYPE_FORMULA: // 公式cellValue = String.valueOf(cell.getCellFormula());break;case Cell.CELL_TYPE_BLANK: // 空值cellValue = "";break;case Cell.CELL_TYPE_ERROR: // 故障cellValue = "⾮法字符";break;default:cellValue = "未知类型";break;}return cellValue;}spring-servlet.xml 配置如下<bean id="multipartResolver" class="monsMultipartResolver"><property name="defaultEncoding" value="utf-8"/><property name="maxUploadSize" value="10485760000"/><property name="maxInMemorySize" value="40960"/></bean>最初的maven是这么配置的<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency>好了,本地⾛起来完全没⽑病,很开⼼,终于可以发布了,可以早点回学校写论⽂了,发到测试环境,测试读取xls也是没⽑病,可尼玛,想读取个xlsx的⽂件试试看,⽹页提⽰404,这什么⿁,打⽇志查问题,还⼀直以为是前端的哥们出问题,可⼀看⽇志不对啊,请求已经进来了,可是⾛到这⼀步就没了 workbook = new XSSFWorkbook(is);这是为什么,赶紧⽹上查,⼀堆解决⽅案,⼀个个试,最后实在没办法把别⼈所有的⽅法⼀个个试,最后⼜加了如下jar包<dependency><groupId>xmlbeans</groupId><artifactId>xmlbeans</artifactId><version>2.3.0</version><type>pom</type></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-examples</artifactId><version>3.9</version></dependency>问题是解决了,可却不知其所以然,记录⼀下。

java操作Excel 详解

java操作Excel 详解

{ for ( int j = 0 ; j < columnum; j ++ ) {
Cell cell1 = sheet.getCell(j, i);
String result = cell1.getContents(); System.out.print(result);
System.out.print( " \t " );
JXL 操作 Excel
Jxl create 代码 java 表格操作类库 jxl poi jxl 是一个韩国人写的 java 操作 excel 的工具, 在开源世界中,有两套比较有影响的 API 可供使用,一 个是 POI,一个是 jExcelAPI。其中功能相对 POI 比较弱一点。但 jExcelAPI 对中文支持非常好,API 是纯 Java 的,并不依赖 Windows 系统,即使运行在 Linux 下,它同样能够正确的处理 Excel 文件。另 外需要说明的是,这套 API 对图形和图表的支持很有限,而且仅仅识别 PNG 格式。 使用如下: 搭建环境 将下载后的文件解包,得到 jxl.jar,放入 classpath,安装就完成了。 基本操作 一、创建、写入文件 拟生成一个名为“test.xls”的 Excel 文件,其中第一个工作表被命名为 “第一页”,大致效果如下: package test;
public class UpdateExcel { public static void main(String args[]) { try { // Excel 获得文件 Workbook wb = Workbook.getWorkbook( new File( " test.xls " )); // 打开一个文件的副本,并且指定数据写回到原文件 WritableWorkbook book = Workbook.createWorkbook( new File( " test.xls " ), wb); // 添加一个工作表 WritableSheet sheet = book.createSheet( " 第二页 " , 1 ); sheet.addCell( new Label( 0 , 0 , " 第二页的测试数据 " )); book.write(); book.close(); } catch (Exception e) { System.out.println(e); } }

java使用poi(XSSFWorkbook)读取excel(.xlsx)文件

java使用poi(XSSFWorkbook)读取excel(.xlsx)文件

java使⽤poi(XSSFWorkbook)读取excel(.xlsx)⽂件经过⼀番搜索发现,java操纵excel⽂件常⽤的有jxl和poi两种⽅式,孰好孰坏看⾃⼰需求⽽定。

其中最主要的区别在于jxl不⽀持.xlsx,⽽poi⽀持.xlsx这⾥介绍的使⽤poi⽅式(XSSFWorkbook),实际上poi提供了HSSFWorkbook和XSSFWorkbook两个实现类。

区别在于HSSFWorkbook是针对.xls⽂件,XSSFWorkbook是针对.xslx⽂件。

⾸先明确⼀下基本概念: 先创建⼀个⼯作簿,⼀个⼯作簿可以有多个⼯作表,⼀个⼯作表可以有多个⾏,⼀个⾏可以有多个单元格 ⼯作簿 ----------->XSSFWorkbook ⼯作表 ----------->XSSFSheet ⾏ ----------->XSSFRow 单元格 ----------->XSSFCell下图为创建的student.xlsx的内容:导⼊依赖:<!--poi--><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.0</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.0</version></dependency>读取student.xlsx⽂件代码:1package com.zjk.testexcel;23import ermodel.*;4import java.io.FileInputStream;5import java.io.IOException;67/**8 * @Auther: zjk9 * @Date: 2019/8/3010 * @Description:11*/12public class TestExcel1 {13public static void main(String[] args) {14try {15//创建⼯作簿16 XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("D:\\test-excel\\student.xlsx"));17 System.out.println("xssfWorkbook对象:" + xssfWorkbook);18//读取第⼀个⼯作表(这⾥的下标与list⼀样的,从0开始取,之后的也是如此)19 XSSFSheet sheet = xssfWorkbook.getSheetAt(0);20 System.out.println("sheet对象:" + sheet);21//获取第⼀⾏的数据22 XSSFRow row = sheet.getRow(0);23 System.out.println("row对象:" + row);24//获取该⾏第⼀个单元格的数据25 XSSFCell cell0 = row.getCell(0);26 System.out.println("cello对象:" + cell0);27 } catch (IOException e) {28 e.printStackTrace();29 }30 }31 }控制台输出结果:可以发现具体到⾏对象时,就解析成xml⽂件了xssfWorkbook对象: Name: /xl/workbook.xml - Content Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xmlsheet对象: Name: /xl/worksheets/sheet1.xml - Content Type: application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xmlrow对象: <xml-fragment r="1" spans="1:4" xmlns:r="/officeDocument/2006/relationships" xmlns:xdr="/drawingml/2006/spreadsheetDraw <main:c r="A1" t="s"> <main:v>0</main:v> </main:c> <main:c r="B1" t="s"> <main:v>1</main:v> </main:c> <main:c r="C1" t="s"> <main:v>2</main:v> </main:c> <main:c r="D1" t="s"><main:v>3</main:v></main:c></xml-fragment>cello对象:姓名以上可以实现了读取某⾏某单元格的数据,那么接下来就该读取整个表的所有数据了:package com.zjk.testexcel;import ermodel.XSSFCell;import ermodel.XSSFRow;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;/*** @Auther: zjk* @Date: 2019/8/30* @Description:*/public class TestExcel2 {public static void main(String[] args) {try {//创建⼯作簿XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("D:\\test-excel\\student.xlsx"));System.out.println("xssfWorkbook对象:" + xssfWorkbook);//读取第⼀个⼯作表XSSFSheet sheet = xssfWorkbook.getSheetAt(0);System.out.println("sheet对象:" + sheet); //获取最后⼀⾏的num,即总⾏数。

java poi excel 读写

java poi excel 读写

java poi excel 读写摘要:1.Java POI 简介2.Java POI Excel 读写功能3.使用Java POI 读取Excel 文件4.使用Java POI 写入Excel 文件5.总结与展望正文:Java POI 是一个开源的Java 库,它允许Java 开发人员操作Microsoft Office 文档,如Word、Excel、PowerPoint 等。

其中,Java POI Excel 提供了读取和写入Excel 文件的功能。

1.Java POI 简介Java POI 是一个基于Apache License 2.0 协议的开源项目,它为Java 开发人员提供了一种操作Microsoft Office 文档的方法。

Java POI 支持读取和写入多种Office 文档格式,包括Excel、Word、PowerPoint 等。

通过使用Java POI,开发人员可以在不安装Microsoft Office 的情况下,对Office 文档进行操作。

2.Java POI Excel 读写功能Java POI Excel 提供了丰富的API,允许Java 开发人员对Excel 文件进行读取和写入操作。

Excel 文件主要包括两种类型:XLS 和XLSX。

Java POI 支持这两种文件格式,同时还支持读取和写入XML 格式的Excel 文件。

3.使用Java POI 读取Excel 文件使用Java POI 读取Excel 文件主要包括以下几个步骤:(1) 导入相关的Java POI 库:```javaimport ermodel.*;import ermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;```(2) 创建一个Workbook 对象,表示Excel 文件:```javaWorkbook workbook = new XSSFWorkbook(new FileInputStream("example.xlsx"));```(3) 获取工作表:```javaSheet sheet = workbook.getSheetAt(0);```(4) 遍历工作表中的行和列,获取单元格数据:```javafor (Row row : sheet) {for (Cell cell : row) {String cellValue = getCellValue(cell);System.out.print(cellValue + "t");}System.out.println();}```4.使用Java POI 写入Excel 文件使用Java POI 写入Excel 文件主要包括以下几个步骤:(1) 创建一个新的Excel 文件:```javaWorkbook workbook = new XSSFWorkbook();```(2) 添加一个新的工作表:```javaSheet sheet = workbook.createSheet("Sheet1");```(3) 创建行:```javaRow row = sheet.createRow(0);```(4) 创建单元格,并设置单元格数据:```javaCell cell = row.createCell(0);cell.setCellValue("Hello, World!");```(5) 将数据写入Excel 文件:```javatry (FileOutputStream fileOut = newFileOutputStream("output.xlsx")) {workbook.write(fileOut);} catch (IOException e) {e.printStackTrace();}```5.总结与展望Java POI 是一个功能强大的Java 库,它允许Java 开发人员轻松地操作Microsoft Office 文档,如Excel、Word、PowerPoint 等。

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

java读取和写入Excel文件
在Java中读取Excel文件的内容
在这里,我使用的是一个叫Java Excel API的东西,类似的还有jakarta的POI,不过感觉那个太复杂了点儿。

而且jxl对中文的支持相当的好,至少我在用的过程中一点问题没出。

一、下载地址
[url]/jexcelapi/[/url]
二、特性
可以读取Excel 95, 97, 2000文件
可以读或写Excel 97及其以后版本的的公式(不过我发现好像有bug)
生成Excel 97格式的电子表格
支持字体、数字和日期格式化
支持单元格的颜色和阴影
可以编辑现有的文件
三、读文件
//声明一下,记得后面要关闭哦。

Workbook workbook = null;
try {
workbook = Workbook.getWorkbook(new File("d:\\temp\\TestRead.xls"));
} catch (Exception e) {
throw new Exception("file to import not found!");
}
Sheet sheet = workbook.getSheet(0);
Cell cell = null;
int columnCount=3;
int rowCount=sheet.getRows();
for (int i = 0; i <rowCount; i++) {
for (int j = 0; j <columnCount; j++) {
//注意,这里的两个参数,第一个是表示列的,第二才表示行
cell=sheet.getCell(j, i);
//要根据单元格的类型分别做处理,否则格式化过的内容可能会不正确
if(cell.getType()==CellType.NUMBER){
System.out.print(((NumberCell)cell).getValue());
}
else if(cell.getType()==CellType.DATE){
System.out.print(((DateCell)cell).getDate());
}
else{
System.out.print(cell.getContents());
}
//System.out.print(cell.getContents());
System.out.print("\t");
}
System.out.print("\n");
}
//关闭它,否则会有内存泄露
workbook.close();
在Java中向Excel文件写入内容
四、导出数据到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 (headerFont);
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, WritableFont.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, df);
//剩下的事情,就是用上面的内容和格式创建一些单元格,再加到sheet中l=new Label(0, 0, "用于测试的Excel文件", headerFormat);
sheet.addCell(l);
//add Title
int 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 detail
int 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()
方正飞鸿智能信息平台 。

相关文档
最新文档