Java读取Excel文件的几种方法
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文件内容的方法
一、介绍在开发过程中,我们经常会遇到需要读取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文件的几种方法最近单位有个项目需要读取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数据
JAVA如何读取Excel数据1.创建Maven项⽬在pom⽂件中添加依赖<dependencies><!-- 旧的 .xls --><!--<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency>--><!-- 新的 .xlsx --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency></dependencies>2.编写代码import ermodel.*;import ermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.IOException;public class PoiTest {public static void main(String[] args) throws IOException {FileInputStream is = new FileInputStream("src/main/resources/test.xlsx");XSSFWorkbook workbook = new XSSFWorkbook(is);//读取SheetSheet sheet = workbook.getSheetAt(0);Row row = sheet.getRow(0);//获取最⼤⾏数int rownum = sheet.getPhysicalNumberOfRows();//获取最⼤列数int colnum = row.getPhysicalNumberOfCells();for (int i = 0; i < rownum; i++) {//获取第i⾏数据row = sheet.getRow(i);for (int j = 0; j < colnum; j++) {Cell cell = row.getCell(j);cell.setCellType(CellType.STRING);String cellText = cell.getStringCellValue();System.out.print(cellText + "\t");}System.out.println();}}}3.报错3.1 异常解决Cannot get a STRING value from a NUMERIC cell poipoi导⼊excel表格数据时报ng.IllegalStateException: Cannot get a STRING value from a NUMERIC cell异常是因为在读取cell单元格字符串时,有number类型的数据,因此需要把它转化为纯String类型,这样就不会报错了。
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科学计数法处理摘要:1.问题背景2.解决方案3.具体实现4.总结正文:1.问题背景在Java 编程中,读取Excel 文件中的数据时,可能会遇到科学计数法表示的问题。
这是因为Excel 文件中的某些单元格的值可能非常大或非常小,超出了常规数字的范围,因此以科学计数法表示。
但是,在Java 中,以科学计数法表示的数字不能直接用于编程运算,需要将其转换为常规数字格式。
2.解决方案解决Java 读取Excel 科学计数法表示的问题,可以使用以下方法:方法一:使用Apache POI 库Apache POI 是一个流行的Java 库,用于处理Microsoft Office 文档,包括Excel 文件。
使用Apache POI 库读取Excel 文件时,可以指定单元格的格式,从而避免科学计数法的出现。
具体实现:```javaimport ermodel.*;import ermodel.XSSFWorkbook;public class ReadExcel {public static void main(String[] args) {String filePath = "example.xlsx";Workbook workbook = new XSSFWorkbook(new FileInputStream(filePath));Sheet sheet = workbook.getSheetAt(0);Row row = sheet.getRow(0);Cell cell = row.getCell(0);// 指定单元格的格式cell.setCellType(CellType.STRING);// 读取单元格的值String value = cell.getStringCellValue();System.out.println(value);workbook.close();}}```方法二:使用Java 内置库Java 内置的库中也提供了一些处理Excel 文件的方法,例如,可以使用`java.io.FileInputStream`和`ermodel.Workbook`类来读取Excel 文件。
java读取excel科学计数法处理
java读取excel科学计数法处理摘要:一、前言- 介绍Java 读取Excel 文件时可能出现科学计数法的问题二、问题原因- 分析Java 读取Excel 文件时出现科学计数法的原因三、解决方法- 提出解决Java 读取Excel 文件时出现科学计数法的方法四、总结- 总结解决Java 读取Excel 文件时出现科学计数法的方法及其实际应用正文:一、前言在Java 编程中,读取Excel 文件是常见的操作。
但是,有时候读取出来的数据可能会是科学计数法表示,这对于后续的数据处理和分析带来了一定的麻烦。
因此,本文将探讨如何解决Java 读取Excel 文件时出现科学计数法的问题。
二、问题原因Java 读取Excel 文件时,如果单元格的类型是数值型,且该数值超出了Java 所能表示的范围(如:2^31 - 1),那么该数值将会以科学计数法的形式表示。
这是因为Java 在表示大数值时,会使用科学计数法。
而Excel 文件中的数值可能因为单元格设置、数据录入等原因,导致出现这种情况。
三、解决方法要解决Java 读取Excel 文件时出现科学计数法的问题,可以采用以下方法:1.使用Apache POI 库Apache POI 库是Java 读取Excel 文件的一个非常强大的库,支持xls 和xlsx 格式的文件。
使用Apache POI 库读取Excel 文件时,可以通过设置单元格的格式,来避免科学计数法的出现。
例如:```javaCell cell = row.getCell(j);if (cell != null) {cell.setCellType(CellType.STRING);cell.setCellValue(String.valueOf(cell.getNumericCellValue()));}```这段代码将单元格的类型设置为字符串类型,并将数值型的单元格值转换为字符串,从而避免了科学计数法的出现。
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读取Excel文件(支持xls,xlsx,多sheet)
Java读取Excel⽂件(⽀持xls,xlsx,多sheet)1. pom.xml依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>4.0.1</version></dependency>2. ⼯具类封装public class ExcelReadUtil {private static Logger logger = LoggerFactory.getLogger(ExcelReadUtil.class);public static HashMap<String, ArrayList<ArrayList<String>>> readExcel(File file, int ignoreRow) { if (file.getName().toLowerCase().endsWith(".xlsx")) {return readExcelForXlsx(file, ignoreRow);} else if (file.getName().toLowerCase().endsWith(".xls")) {return readExcelForXls(file, ignoreRow);}return null;}/*** 读取Excel xlsx后缀名⽂件数据** @param file*/private static HashMap<String, ArrayList<ArrayList<String>>> readExcelForXlsx(File file, int ignoreRow) {HashMap<String, ArrayList<ArrayList<String>>> map = new HashMap<>();if (!file.exists()) {logger.error("{}⽂件不存在", file.getName());return null;}int rowSize = 0;try (BufferedInputStream in = new BufferedInputStream(new FileInputStream(file))) {XSSFWorkbook workbook = null;try {workbook = new XSSFWorkbook(in);} catch (IOException e) {e.printStackTrace();}XSSFCell cell = null;for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {XSSFSheet sheet = workbook.getSheetAt(sheetIndex);ArrayList<ArrayList<String>> lists = new ArrayList<>();for (int rowIndex = ignoreRow; rowIndex <= sheet.getLastRowNum(); rowIndex++) {XSSFRow row = sheet.getRow(rowIndex);if (null == row) {continue;}int tempRowSize = row.getLastCellNum() + 1;if (tempRowSize > rowSize) {rowSize = tempRowSize;}ArrayList<String> list = new ArrayList<>();int col = 0;for (int colIndex = 0; colIndex <= row.getLastCellNum(); colIndex++) {cell = row.getCell(colIndex);String value = "";if (cell != null) {CellType cellType = cell.getCellType();switch (cellType) {case NUMERIC:if (DateUtil.isCellDateFormatted(cell)) {value = String.valueOf(cell.getDateCellValue());} else {value = String.valueOf(new DecimalFormat("0").format(cell.getNumericCellValue())); }break;case STRING:value = String.valueOf(cell.getStringCellValue());break;case FORMULA:value = String.valueOf(cell.getCellFormula());break;case BLANK:value = "";break;case BOOLEAN:value = String.valueOf(cell.getBooleanCellValue());break;case ERROR:value = String.valueOf(cell.getErrorCellValue());break;default:value = "";}if (StringUtils.isNotBlank(value)) {list.add(value);} else {col++;}}}if (col == row.getRowNum()) {continue;}if (list.size() > 0) {lists.add(list);}}map.put("sheet" + sheetIndex, lists);}} catch (Exception e) {e.printStackTrace();}return map;}/*** 读取excel xls后缀名⽂件** @param file* @param ignoreRow* @return*/private static HashMap<String, ArrayList<ArrayList<String>>> readExcelForXls(File file, int ignoreRow) {HashMap<String, ArrayList<ArrayList<String>>> map = new HashMap<>();if (!file.exists()) {logger.error("{}⽂件不存在", file.getName());return null;}int rowSize = 0;try {BufferedInputStream bufferedInputStream = new BufferedInputStream(new FileInputStream(file));HSSFWorkbook workbook = new HSSFWorkbook(bufferedInputStream);HSSFCell cell = null;for (int sheetIndex = 0; sheetIndex < workbook.getNumberOfSheets(); sheetIndex++) {HSSFSheet sheet = workbook.getSheetAt(sheetIndex);ArrayList<ArrayList<String>> lists = new ArrayList<>();for (int rowIndex = ignoreRow; rowIndex < sheet.getLastRowNum(); rowIndex++) {HSSFRow row = sheet.getRow(rowIndex);if (null == row) {continue;}int tempRowSize = row.getLastCellNum() + 1;if (tempRowSize > rowSize) {rowSize = tempRowSize;}ArrayList<String> list = new ArrayList<>();int col = 0;for (int colIndex = 0; colIndex < row.getLastCellNum(); colIndex++) {cell = row.getCell(colIndex);String value = "";if (cell != null) {CellType cellType = cell.getCellType();switch (cellType) {case NUMERIC:if (DateUtil.isCellDateFormatted(cell)) {value = String.valueOf(cell.getDateCellValue());} else {value = String.valueOf(new DecimalFormat("0").format(cell.getNumericCellValue())); }break;case STRING:value = String.valueOf(cell.getStringCellValue());break;case FORMULA:value = String.valueOf(cell.getCellFormula());break;case BLANK:value = "";break;case BOOLEAN:value = String.valueOf(cell.getBooleanCellValue());break;case ERROR:value = String.valueOf(cell.getErrorCellValue());break;default:value = "";}if (StringUtils.isNotBlank(value)) {list.add(value);} else {col++;}}}if (col == row.getRowNum()) {continue;}if (list.size() > 0) {lists.add(list);}}map.put("sheet" + sheetIndex, lists);}} catch (Exception e) {e.printStackTrace();}return map;}}3. 测试类@Testpublic void testExcelRead(){HashMap<String, ArrayList<ArrayList<String>>> excelReadMap = ExcelReadUtil.readExcel(new File(excelFilePath), 1);if(excelReadMap != null){excelReadMap.entrySet().stream().forEach(entry -> {entry.getValue().stream().forEach(col -> {col.stream().forEach(System.out::println);});});}}原⽂链接:。
java解析Excel的方法(xls、xlsx两种格式)
java解析Excel的⽅法(xls、xlsx两种格式)⼀、需要导⼊的jar mons-collections4-4.1.jar2.poi-3.17-beta1.jar 3.poi-ooxml-3.17-beta1.jar 4.poi-ooxml-schemas-3.17-beta1.jar5.xmlbeans-2.6.0.jar⼆、主要API 1.import ermodel.Workbook,对应Excel⽂档; 2.import ermodel.HSSFWorkbook,对应xls格式的Excel⽂档; 3.import ermodel.XSSFWorkbook,对应xlsx格式的Excel⽂档; 4.import ermodel.Sheet,对应Excel⽂档中的⼀个sheet; 5.import ermodel.Row,对应⼀个sheet中的⼀⾏; 6.import ermodel.Cell,对应⼀个单元格。
三、代码如下package poi;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.Map.Entry;import ermodel.HSSFWorkbook;import ermodel.Cell;import ermodel.DateUtil;import ermodel.Row;import ermodel.Sheet;import ermodel.Workbook;import ermodel.XSSFWorkbook;public class Testpoi {public static void main(String[] args) {Workbook wb =null;Sheet sheet = null;Row row = null;List<Map<String,String>> list = null;String cellData = null;String filePath = "D:\\test.xlsx";String columns[] = {"name","age","score"};wb = readExcel(filePath);if(wb != null){//⽤来存放表中数据list = new ArrayList<Map<String,String>>();//获取第⼀个sheetsheet = wb.getSheetAt(0);//获取最⼤⾏数int rownum = sheet.getPhysicalNumberOfRows();//获取第⼀⾏row = sheet.getRow(0);//获取最⼤列数int colnum = row.getPhysicalNumberOfCells();for (int i = 1; i<rownum; i++) {Map<String,String> map = new LinkedHashMap<String,String>();row = sheet.getRow(i);if(row !=null){for (int j=0;j<colnum;j++){cellData = (String) getCellFormatValue(row.getCell(j)); map.put(columns[j], cellData);}}else{break;}list.add(map);}}//遍历解析出来的listfor (Map<String,String> map : list) {for (Entry<String,String> entry : map.entrySet()) {System.out.print(entry.getKey()+":"+entry.getValue()+","); }System.out.println();}}//读取excelpublic static Workbook readExcel(String filePath){Workbook wb = null;if(filePath==null){return null;}String extString = filePath.substring(stIndexOf(".")); InputStream is = null;try {is = new FileInputStream(filePath);if(".xls".equals(extString)){return wb = new HSSFWorkbook(is);}else if(".xlsx".equals(extString)){return wb = new XSSFWorkbook(is);}else{return wb = null;}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return wb;}public static Object getCellFormatValue(Cell cell){Object cellValue = null;if(cell!=null){//判断cell类型switch(cell.getCellType()){case Cell.CELL_TYPE_NUMERIC:{cellValue = String.valueOf(cell.getNumericCellValue());break;}case Cell.CELL_TYPE_FORMULA:{//判断cell是否为⽇期格式if(DateUtil.isCellDateFormatted(cell)){//转换为⽇期格式YYYY-mm-ddcellValue = cell.getDateCellValue();}else{//数字cellValue = String.valueOf(cell.getNumericCellValue()); }break;}case Cell.CELL_TYPE_STRING:{cellValue = cell.getRichStringCellValue().getString();break;}default:cellValue = "";}}else{cellValue = "";}return cellValue;}}四、运⾏结果 代码运⾏前保证在D盘下有⼀个test.xlsx⽂档,不然报⽂件找不到异常;Excel⽂档中的表头要和代码中的String columns[] = {"name","age","score"}对应起来。
Java注解--实现简单读取excel
Java注解--实现简单读取excel实现⼯具类利⽤注解实现简单的excel数据读取,利⽤注解对类的属性和excel中的表头映射,使⽤Apache的poi就不⽤在业务代码中涉及row,rows这些属性了。
定义注解:@Retention(RetentionPolicy.RUNTIME)@Target(ElementType.FIELD)public @interface Excel {String name();}由于本例中只涉及根据Excel表头部分对Excel进⾏解析,只定义了⼀个name作为和Excel表头的隐射。
⼯具类完整代码如下:public class ExcelUtil<T> {Class<T> clazz;public ExcelUtil(Class<T> clazz) {this.clazz = clazz;}public List<T> importExcel(String sheetName, InputStream input) {int maxCol = 0;List<T> list = new ArrayList<T>();try {Workbook workbook = WorkbookFactory.create(input);Sheet sheet = workbook.getSheet(sheetName);// 如果指定sheet名,则取指定sheet中的内容.if (!sheetName.trim().equals("")) {sheet = workbook.getSheet(sheetName);}// 如果传⼊的sheet名不存在则默认指向第1个sheet.if (sheet == null) {sheet = workbook.getSheetAt(0);}int rows = sheet.getPhysicalNumberOfRows();// 有数据时才处理if (rows > 0) {List<Field> allFields = getMappedFiled(clazz, null);// 定义⼀个map⽤于存放列的序号和field.Map<Integer, Field> fieldsMap = new HashMap<Integer, Field>();// 第⼀⾏为表头Row rowHead = sheet.getRow(0);Map<String, Integer> cellMap = new HashMap<>();int cellNum = rowHead.getPhysicalNumberOfCells();for (int i = 0; i < cellNum; i++){cellMap.put(rowHead.getCell(i).getStringCellValue().toLowerCase(), i);}for (Field field : allFields) {// 将有注解的field存放到map中.if (field.isAnnotationPresent(Excel.class)) {Excel attr = field.getAnnotation(Excel.class);// 根据Name来获取相应的failedint col = cellMap.get(().toLowerCase());field.setAccessible(true);fieldsMap.put(col, field);}}// 从第2⾏开始取数据for (int i = 1; i < rows; i++) {Row row = sheet.getRow(i);T entity = null;for (int j = 0; j < cellNum; j++) {Cell cell = row.getCell(j);if (cell == null) {continue;}int cellType = cell.getCellType();String c = "";if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {DecimalFormat df = new DecimalFormat("0");c = df.format(cell.getNumericCellValue());c = df.format(cell.getNumericCellValue());} else if (cellType == HSSFCell.CELL_TYPE_BOOLEAN) {c = String.valueOf(cell.getBooleanCellValue());} else {c = cell.getStringCellValue();}if (c == null || c.equals("")) {continue;}entity = (entity == null ? clazz.newInstance() : entity);// 从map中得到对应列的field.Field field = fieldsMap.get(j);if (field == null) {continue;}// 取得类型,并根据对象类型设置值.Class<?> fieldType = field.getType();if (String.class == fieldType) {field.set(entity, String.valueOf(c));} else if ((Integer.TYPE == fieldType)|| (Integer.class == fieldType)) {field.set(entity, Integer.valueOf(c));} else if ((Long.TYPE == fieldType)|| (Long.class == fieldType)) {field.set(entity, Long.valueOf(c));} else if ((Float.TYPE == fieldType)|| (Float.class == fieldType)) {field.set(entity, Float.valueOf(c));} else if ((Short.TYPE == fieldType)|| (Short.class == fieldType)) {field.set(entity, Short.valueOf(c));} else if ((Double.TYPE == fieldType)|| (Double.class == fieldType)) {field.set(entity, Double.valueOf(c));} else if (Character.TYPE == fieldType) {if (c.length() > 0) {field.set(entity, c.charAt(0));}}}if (entity != null) {list.add(entity);}}}} catch (Exception e) {e.printStackTrace();}return list;}/*** 得到实体类所有通过注解映射了数据表的字段** @param clazz* @param fields* @return*/private List<Field> getMappedFiled(Class clazz, List<Field> fields) {if (fields == null) {fields = new ArrayList<Field>();}// 得到所有定义字段Field[] allFields = clazz.getDeclaredFields();// 得到所有field并存放到⼀个list中.for (Field field : allFields) {if (field.isAnnotationPresent(Excel.class)) {fields.add(field);}}if (clazz.getSuperclass() != null&& !clazz.getSuperclass().equals(Object.class)) {getMappedFiled(clazz.getSuperclass(), fields);}return fields;}}代码很简单,获取sheet,解析第⼀⾏,并和实体类标有注解的字段⼀⼀对应,⽤hashMap记录下来,然后循环取得Excel中剩下所有的数据,根据map的对应关系将值set到对应字段。
JAVA读取Excel中内容(HSSF和Workbook两种方法)
JAVA读取Excel中内容(HSSF和Workbook两种⽅法)内容添加,以前是⽤的HSSF,前⼏天帮同学写⼀个统计表⽤了Workbook,现在码⼀下。
---新内容(Workbook)--- 同学要统计⼀个xls表格,让表1⾥⾯的某⼀列内容对表2⾥⾯的每列进⾏匹配,匹配到第1列,在表1的另⼀列对应⾏设置1,就是⼀个简单的读取。
要导⼊⼀个jxl操作包,这个包是专门对execel进⾏操作的。
下⾯是代码。
1import java.io.File;2import jxl.Sheet;3import jxl.Workbook;4import bel;5import jxl.write.WritableSheet;6import jxl.write.WritableWorkbook;78public class New {9public static void main(String args[]) {10try {11long stime=System.currentTimeMillis();12boolean flag=false;//设置检查标记13long count=0;//设置计数1415 Workbook bookResource = Workbook.getWorkbook(new File("resource.xls"));//打开表116 Workbook bookKeyWordLib = Workbook.getWorkbook(new File("keyWordLibNew.xls"));//打开表21718 Workbook wb = Workbook.getWorkbook(new File("resourceWrite.xls"));//打开表319//// 打开⼀个⽂件的副本,并且指定数据写回到原⽂件20 WritableWorkbook book = Workbook.createWorkbook(new File("resourceWrite.xls"),21 wb);22//// 添加⼀个⼯作表23 WritableSheet sheet3 = book.getSheet(0);242526// 获得第⼀个⼯作表对象27 Sheet sheet1 = bookResource.getSheet(0);28 Sheet sheet2 = bookKeyWordLib.getSheet(0);2930// 得到第⼀列第⼀⾏的单元格31//⾏数 sheet1.getRows();32//列数 sheet1.getColumns();3334for(int i=1;i<sheet1.getRows();i++)//对表1的每⾏进⾏循环35 {3637 flag=false;//标记为false表⽰该⾏没有被检查或者检查过但是没有填值38for(int columns=0;columns<sheet2.getColumns();columns++)//取表2的列数作为限制39 {40if(flag)41 {42break;43 }//该⾏检查过并且已经有值检查下⼀⾏4445for(int rows=1;rows<sheet2.getColumn(columns).length-1;rows++)//取表2每列的⾏数作为限制条件46 {47if(sheet1.getCell(11, i).getContents().contains(48 sheet2.getCell(columns, rows).getContents()))//匹配对应单元格的内容49 {505152 sheet3.addCell(53new Label(9, i, new String(((Integer)(columns+1)).toString())));//设置对应单元格内容54 System.out.println(columns+" "+rows);55 count++;56 flag=true;//标记为true57break;58 }5960 }61 }62 }63 book.write();6465 System.out.println(count);6667 bookResource.close();68 bookKeyWordLib.close();69 book.close();70 wb.close();//关闭所有表否侧表格会损坏71long etime=System.currentTimeMillis();72 System.out.println(etime-stime);73 } catch (Exception e) {74 System.out.println(e.toString());7576 }77 }78 } 这⾥⽤的时候要注意,⽬前我⽤的时候只能对xls进⾏操作,csv和xlsx等都暂时不⾏。
javaexcel解析常见方法
一、介绍在日常工作中,我们经常会遇到需要处理Excel文件的情况。
而对于Java程序员来说,对Excel文件进行解析是一项常见的任务。
本文将介绍一些常见的JavaExcel解析方法,希望能够帮助大家更好地处理Excel文件。
二、使用POI库解析Excel1. POI库简介POI(Poor Obfuscation Implementation)是Apache软件基金会的开源项目,旨在提供Java程序操作Microsoft Office格式文件的功能。
在处理Excel文件时,可以使用POI库来完成读取、写入和修改Excel文件的操作。
2. 使用POI库解析Excel的基本步骤a. 创建一个输入流,将Excel文件加载到工作簿中。
b. 获取工作表,可以根据工作表的名称或索引来获取。
c. 遍历工作表,获取每一行的数据。
d. 遍历每一行,获取单元格的数值并进行相应的处理。
3. 代码示例```java// 读取Excel文件File file = new File("test.xlsx");FileInputStream fis = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(fis);// 获取工作表XSSFSheet sheet = workbook.getSheetAt(0);// 遍历工作表for (Row row : sheet) {// 遍历行for (Cell cell : row) {// 获取单元格的值String value = cell.getStringCellValue();// 进行相应的处理}}// 关闭流fis.close();```4. 注意事项使用POI库解析Excel时,需要注意处理空单元格、日期格式、数值类型等特殊情况,以确保解析的准确性。
三、使用EasyExcel库解析Excel1. EasyExcel库简介EasyExcel是阿里巴巴开源的一款针对大数据量Excel操作的Java库。
java读取excel科学计数法处理
java读取excel科学计数法处理Java读取Excel科学计数法处理科学计数法是一种表示非常大或非常小的数的方法,它使用指数来表示数字的数量级。
在Excel中,科学计数法的数字通常使用"e"或"E"表示指数部分。
在JAVA中读取Excel文件并处理科学计数法的数字,可以使用Apache POI库。
Apache POI是一个用于操作Excel文件的开放源代码Java库。
它提供了一组API,可以轻松读取、写入和修改Excel文件。
首先,你需要在你的Java项目中导入Apache POI库。
如果你使用的是Maven项目,你可以在pom.xml文件中添加以下依赖:xml<dependencies><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></dependencies>接下来,你需要使用POI库的类来读取Excel文件。
首先,你需要创建一个文件对象,指定要读取的Excel文件的路径。
然后,你可以使用WorkbookFactory类的create方法来创建一个Workbook对象,该对象表示整个Excel文件。
javaFile file = new File("path/to/excelFile.xls");Workbook workbook = WorkbookFactory.create(file);一旦你有了Workbook对象,你可以使用它来访问每个单元格的内容。
java读取excel文件(.xls,xlsx,csv)
<groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency>
1,页面标签及属性
input[type="button"]{background-color: #71BCF3;color: white;}
int numday = (int) Math.round(str);
Calendar d = Calendar.getInstance(); d.set(1900, 0, 1); d.add(Calendar.DAY_OF_MONTH,numday);
int year = d.get(Calendar.YEAR); int month = d.get(Calendar.MONTH) + 1; int day = d.get(Calendar.DAY_OF_MONTH)-2;
String dateStr = year+"-"+month+"-"+day;
Date newDate = DateUtils.parse(dateStr);
System.out.println(DateUtils.format(newDate));
return newDate; } private static String getValue(HSSFCell hssfCell) {
InputStream inStream = upload.getInputStream();//文件流,可直接用 }
Java读写Excel文件中数据的简便方法(附代码)
Java读写Excel文件中数据的简便方法Java开发项目中经常会碰到处理Excel文件中数据的情况,这里通过一个例子来看一下实现方法:从Excel文件orders.xls中读取订单信息,从中找出2010年1月1日(含)之后,并且SELLERID等于18的订单。
找到的数据写入order_result.xls文件。
Excel文件orders.xls的内容如下:ORDERID CLIE NT SE LLERID AMOUNT ORDERDATE1 UJRNP 17 392 2008/11/2 15:282 SJCH 6 4802 2008/11/9 15:283 UJRNP 16 13500 2008/11/5 15:284 P WQ 9 26100 2008/11/8 15:285 P WQ 11 4410 2008/11/12 15:286 HANAR 18 6174 2008/11/7 15:287 E GU 2 17800 2008/11/6 15:288 VILJX 7 2156 2008/11/9 15:289 JAYB 14 17400 2008/11/12 15:2810 JAXE 19 19200 2008/11/12 15:2811 SJCH 7 13700 2008/11/10 15:2812 QUICK 11 21200 2008/11/13 15:2813 HL 12 21400 2008/11/21 15:2814 JAYB 1 7644 2008/11/16 15:2815 MIP 16 3234 2008/11/19 15:2816 AYW YN 4 6566 2008/11/21 15:28…Java程序的编写思路是1、从Excel文件逐行读入数据保存到List对象sourceList中。
2、遍历List对象sourceList,如果满足条件就保存到结果List对象resultList中。
java excel 解析
java excel 解析Java可以使用多种方式解析Excel文件,包括Apache POI、JExcel、EasyExcel等框架。
1. Apache POI。
Apache POI是最流行的Java解析Excel文件的框架之一。
它支持几乎所有的Excel文件格式,包括xls、xlsx、xlsm等,可以通过DOM或SAX方式解析Excel文件,支持读取和写入Excel文件。
使用Apache POI来解析Excel文件需要导入以下maven依赖:```。
<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>。
```。
2. JExcel。
JExcel是一个Java解析Excel文件的框架,支持读取和写入Excel 文件,可以通过DOM方式解析Excel文件,支持xls格式。
使用JExcel来解析Excel文件需要导入以下maven依赖:```。
<dependency>。
<groupId>net.sourceforge.jexcelapi</groupId>。
<artifactId>jxl</artifactId>。
<version>2.6.12</version>。
java hutool的读取execl方法
java hutool的读取execl方法标题: Java hutool的读取execl方法正文:Hutool是一个基于Java的开源命令行工具包,它提供了许多方便的工具和函数,用于处理命令行输入和执行命令。
其中,读取Excel文件是一种常见的命令行操作。
在Java中,可以使用hutool提供的`hutool-excel`包来读取Excel文件。
`hutool-excel`包提供了`ReadExcel`函数,该函数可以读取指定Excel文件并返回相关数据。
以下是一个示例代码,演示如何使用`hutool-excel`包读取Excel文件并将其打印出来:```javaimport hutool.excel.ReadExcel;import hutool.excel.WriteExcel;public class ReadExcelExcel {public static void main(String[] args) {String excelFilePath = "path/to/your/excel/file.xlsx";WriteExcel writeExcel = new WriteExcel();ReadExcel readExcel = new ReadExcel();try {readExcel.read(excelFilePath, writeExcel);System.out.println("Excel data: " + readExcel.get("data"));} catch (IOException e) {e.printStackTrace();}}}```在上面的示例代码中,`excelFilePath`变量指定了要读取的Excel文件的路径。
`WriteExcel`类用于将Excel数据写入Excel文件中。
Java读写excel实战完全解析
Java读写excel实战完全解析背景时值毕业季,很多毕业⽣初⼊职场。
因此,这边也写了⼀些新⼿相关的 Android 技术点。
⽐如上⼀篇的就是列举了⼀些⼩点,避免新⼿ Android 开发者踩坑。
同时,也是恰逢暑假,因此⼤学⽣处于放假阶段。
这⼀篇主要是来⾃⼀位⼤学⽣的提问。
因此这边分享⼀下我个⼈的解题思路和⽅法,希望能够对他有所启发。
欢迎⼤家交流分享。
题⽬使⽤语⾔:JAVA需求:读取⼀个Excel表格⾥⾯的数据(例如:姓名+分数),对其进⾏重新排序(按分数⾼低),然后输出在另⼀个Excel表格。
分析⼀般对需求我们都采取拆分思维。
将⼤问题拆成⼩问题,⼩问题解决了,整个⼤问题也就解决了。
这个需求很明确,需要解决三个问题: 1. 读取 Excel 表格数据 2. 对数据排序 3. 将数据写⼊另⼀个 Excel 表格我们这⾥要求使⽤ Java 语⾔,⽽ Java 语⾔⼀个很重要的点就是⾯向对象。
因此⾸先我们要考虑⼀下,这个题⽬⾥⾯有哪些类需要我们创建。
⼤概可以想象需要下⾯这些类:读取数据类:ExcelReader写⼊数据类:ExcelWriter数据排序类:由于 Java API ⾃带,所以不需要重复造轮⼦数据模型类:StudentScore启动类:ParserStart,带有 main ⽅法⼤概的 UML 图如下:此时我们可以写出 v0.1 代码:ExcelReader.java:import java.util.List;public class ExcelReader {public List<StudentScore> read(String fileName) {//TODOreturn null;}}ExcelWriter.java:import java.util.List;public class ExcelWriter {public void write(String fileName, List<StudentScore> list) {//TODO}}StudentScore.java:public class StudentScore {private String name;private int score;public StudentScore(String name, int score) {super(); = name;this.score = score;}public String getName() {return name;}public void setName(String name) { = name;}public int getScore() {return score;}public void setScore(int score) {this.score = score;}}ParserStart.java:import java.util.List;public class ParserStart {public static void main(String[] args) {// 第⼀步:读取数据List<StudentScore> dataList = new ExcelReader().read("input.xls");// 第⼆步:排序//TODO// 第三部:写⼊数据new ExcelWriter().write("output.xls", dataList);}}好了,基本框架搭好了。
Java读取Excel指定列的数据详细教程和注意事项
Java读取Excel指定列的数据详细教程和注意事项本⽂使⽤jxl.jar⼯具类库实现读取Excel中指定列的数据。
jxl.jar是通过java操作excel表格的⼯具类库,是由java语⾔开发⽽成的。
这套API是纯Java的,并不依赖Windows系统,即使运⾏在Linux下,它同样能够正确的处理Excel⽂件。
⽀持Excel 95-2000的所有版本⽣成Excel 2000标准格式⽀持字体、数字、⽇期操作能够修饰单元格属性⽀持图像和图表jxl操作Excel包括对象Workbook(⼯作簿),Sheet(⼯作表),Cell(单元格)。
⼀个Excel就对应⼀Workbook对象,⼀个Workbook可以有多个Sheet对象,⼀个Sheet对象可以有多个Cell对象。
其主要的API说明如下:新建并获取⼯作薄:Workbook workbook = Workbook.getWorkbook(inputStream);读取⼯作表:workbook.getSheet(int index);//index从0开始,0对应Sheet1获取单元格:sheet.getCell(int columnIndex, int rowIndex);读取单元格内容:cell.getContents();代码如下:/*** 读取excel表格中特定的列** @param file* ⽂件* @param index* 第index列(0开始)* @throws Exception*/public static void readColumn(File file, int index) throws Exception {InputStream inputStream = new FileInputStream(file.getAbsoluteFile());Workbook workbook = Workbook.getWorkbook(inputStream);Sheet sheet = workbook.getSheet(0);int rows = sheet.getRows();int columns = sheet.getColumns();for (int i = 1; i < rows; i++) {Cell cell = sheet.getCell(index, i);System.out.println(cell.getContents());}}⽤桌⾯上的⼀个Excel⽂件进⾏测试:public static void main(String[] args) {File file = new File("C:\\Users\\Administrator\\Desktop\\世界名著.xlsx");try {System.out.println("正在读取书名...");readColumn(file, 0);//读取第⼀列System.out.println("读取完毕");} catch (Exception e) {e.printStackTrace();}}奇怪,竟然报错了:这是使⽤jxl时⼀个需要注意的地⽅,jxl只⽀持Excel 95-2000 ⼯作簿(*.xls),不⽀持Excel ⼯作簿(*.xlsx)。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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表格。
优点是:不依赖其他任何第三方的库。
下载地址:/pub/mirrors/maven2/net/sourceforge/jexcelapi/jxl/2.6.10 /jxl-2.6.10.jar程序如下:package xuzhe;import java.io.File;import jxl.Sheet;import jxl.Workbook;//java-classpath .;E:\eclipse3.6.2\workspace\CrazyJava\lib\jxl.jar xuzhe.ExcelJXLpublic class ExcelJXL{static String sourceFile = "c:\\name.xls"; // 源文件public static void main(String[] args){try{Workbook book = Workbook.getWorkbook(new File(sourceFile));//0代表第一个工作表对象Sheet sheet = book.getSheet(0);int rows = sheet.getRows();int cols = sheet.getColumns();String colname1 = sheet.getCell(0, 0).getContents().trim();String colname2 = sheet.getCell(1, 0).getContents().trim();String colname3 = sheet.getCell(2, 0).getContents().trim();System.out.println(colname1+","+colname2+","+colname3);for (int z = 1; z < rows; z++){//0代表列数,z代表行数String name = sheet.getCell(0, z).getContents();String sex = sheet.getCell(1, z).getContents();String ID = sheet.getCell(2, z).getContents();System.out.println(name+","+sex+","+ID);}}catch(Exception e){e.printStackTrace();}}}执行结果如下:3、jcom.jarjcom.jar是日本人开发的,也是一个开源项目,下载地址:/projects/jcom/files/latest/download将jcom.jar拷贝到classlib目录下,将jcom.dll放到你的JAVA_HOME/bin 目录下,否则会出现下面错误。
程序如下:package xuzhe;import jp.ne.so_net.ga2.no_ji.jcom.excel8.*;import jp.ne.so_net.ga2.no_ji.jcom.*;import java.io.File;import java.util.Date;public class ExcelJCOM {public static void main(String[] args) throws Exception { JCOMReadExcel();JCOMCreateExcel();}static void JCOMReadExcel(){ReleaseManager rm = new ReleaseManager();try{System.out.println("EXCEL startup...");// if already started, open new windowExcelApplication excel = new ExcelApplication(rm);excel.Visible(true);String Filename = "c:\\name.xls";ExcelWorkbooks xlBooks = excel.Workbooks();ExcelWorkbook xlBook = xlBooks.Open(Filename);ExcelWorksheets xlSheets = xlBook.Worksheets();//第一个工作表ExcelWorksheet xlSheet = xlSheets.Item(1);ExcelRange xlRange = xlSheet.Cells();int i;int j;for(j=1;j<=4;j++){for(i=1;i<=3;i++){System.out.print(xlRange.Item(j,i).Value());if(i<3){System.out.print(",");}}System.out.println("");}}catch(Exception e) { e.printStackTrace(); }finally { rm.release(); }}static void JCOMCreateExcel(){ReleaseManager rm = new ReleaseManager();try {System.out.println("EXCEL startup...");// if already started, open new windowExcelApplication excel = new ExcelApplication(rm);excel.Visible(true);// display any informationSystem.out.println("Version="+excel.Version());System.out.println("UserName="+erName());System.out.println("Caption="+excel.Caption());System.out.println("Value="+excel.Value());ExcelWorkbooks xlBooks = excel.Workbooks();ExcelWorkbook xlBook = xlBooks.Add(); // create new book// enumurate all filesSystem.out.println("set infomation of files in current directory to cell ...");ExcelWorksheets xlSheets = xlBook.Worksheets();ExcelWorksheet xlSheet = xlSheets.Item(1);ExcelRange xlRange = xlSheet.Cells();xlRange.Item(1,1).Value("filename" );xlRange.Item(2,1).Value("size" );xlRange.Item(3,1).Value("last modified time");xlRange.Item(4,1).Value("is directory");xlRange.Item(5,1).Value("is file");xlRange.Item(6,1).Value("can read");xlRange.Item(7,1).Value("can write");File path = new File("./");String[] filenames = path.list();for(int i=0; i<filenames.length; i++) {File file = new File(filenames[i]);System.out.println(file);xlRange.Item(1,i+2).Value( file.getName() );xlRange.Item(2,i+2).Value( (int)file.length() );xlRange.Item(3,i+2).Value( newDate(stModified()) );xlRange.Item(4,i+2).Value( file.isDirectory()?"Yes":"No" );xlRange.Item(5,i+2).Value( file.isFile()?"Yes":"No" );xlRange.Item(6,i+2).Value( file.canRead()?"Yes":"No" );xlRange.Item(7,i+2).Value( file.canWrite()?"Yes":"No");}char start = 'B';char end = (char)((byte)start + filenames.length - 1);System.out.println("end=[" + end + "]");String expression = "=Sum(B2:" + String.valueOf(end) + "2)";System.out.println("expression=[" + expression + "]");System.out.println("embed equation, calculate sum of filesize: "+expression);xlRange.Item(1,filenames.length+2).Value("sum");xlRange.Item(2,filenames.length+2).Formula(expression);xlRange.Columns().AutoFit(); // fit columns// comment out, if print out.// output default printer.// System.out.println("print out...");// xlSheet.PrintOut();// comment out, if book save to file.// if no path, save to(My Documents)// System.out.println// ("save to file... (My Documents)\\testExcel.xls");xlBook.SaveAs("testExcel.xls");xlBook.Close(false,null,false);excel.Quit();System.out.println("thank you .");}catch(Exception e) { e.printStackTrace(); }finally { rm.release(); }}}执行结果如下:4、poi.jarpoi.jar是apache旗下的一个开源项目,下载地址:/dyn/closer.cgi/poi/release/bin/poi-bin-3.8-20120326.zip程序如下:package xuzhe;import ermodel.*;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import ermodel.HSSFCell;import ermodel.HSSFRow;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;//public class ExcelPOI {/*** @param args* @throws IOException* java xuzhe.ExcelPOI*/@SuppressWarnings("deprecation")public static void main(String[] args) throws IOException { // TODO Auto-generated method stubExcelPOI.POICreateExcel();ExcelPOI.POIReadExcel();}public static void POICreateExcel() throws IOException{HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("new sheet");//0行HSSFRow row = sheet.createRow((short)0);//1列row.createCell((short)1).setCellValue("HelloWorld");FileOutputStream fileOut = newFileOutputStream("c:\\workbook.xls");wb.write(fileOut);fileOut.close();}private static HSSFWorkbook readFile(String filename) throws IOException {return new HSSFWorkbook(new FileInputStream(filename));}public static void POIReadExcel() throws IOException{String fileName = "c:\\name.xls";HSSFWorkbook wb = ExcelPOI.readFile(fileName);System.out.println("Data dump:\n");for (int k = 0; k < wb.getNumberOfSheets(); k++){HSSFSheet sheet = wb.getSheetAt(k);int rows = sheet.getPhysicalNumberOfRows();System.out.println("Sheet "+ k + " \""+ wb.getSheetName(k) + "\" has " + rows+ " row(s).");for (int r = 0; r < rows; r++){HSSFRow row = sheet.getRow(r);if (row == null) {continue;}int cells = row.getPhysicalNumberOfCells();System.out.println("\nROW "+ row.getRowNum() + " has " + cells+ " cell(s).");for (int c = 0; c < cells; c++){HSSFCell cell = row.getCell(c);String value = null;switch (cell.getCellType()){case HSSFCell.CELL_TYPE_FORMULA:value = "FORMULA value=" +cell.getCellFormula();break;case HSSFCell.CELL_TYPE_NUMERIC:value = "NUMERIC value=" +cell.getNumericCellValue();break;case HSSFCell.CELL_TYPE_STRING:value = "STRING value=" +cell.getStringCellValue();break;default:}System.out.println("CELL col=" +cell.getColumnIndex() + " VALUE="+ value);}}}}}执行结果如下:以上就是我的一点心得体会,有误的地方请指正,来信发xuzhe_hn@。