利用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

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中的数据及图片

Java实现读取excel中的数据及图⽚⼀、背景需要完成excel数据的读取与落库⼆、实现Java读取excel数据:指定某⼀⾏,读取整列的数据/*如果是xls格式,使⽤HSSFWorkbook,HSSFSheet,HSSFRow来进⾏相关操作如果是xlsx格式,使⽤XSSFWorkbook,XSSFSheet,XSSFRow来进⾏相关操作,⽬前只⽀持xlsx*/public static HashMap readExcelData(String filename, Integer row, Integer column,Integer sheet) throws IOException {//⽤于存储Exce读取数据HashMap<Integer,String> hashMap=new HashMap();("开始读取excel数据");//读取excel数据File file = ResourceUtils.getFile(filename);InputStream inputStream = new FileInputStream(file);XSSFWorkbook xssfWorkbook=new XSSFWorkbook(inputStream);//获取sheet表格,及读取单元格内容XSSFSheet xssfSheet=xssfWorkbook.getSheetAt(sheet);//先将获取的单元格设置为String类型,下⾯使⽤getStringCellValue获取单元格内容Integer cellIndex = 0;while(cellIndex<=column){//第⼀列为空时直接,赋值为空if (xssfSheet.getRow(row)==null || xssfSheet.getRow(row).getCell(cellIndex)==null){hashMap.put(cellIndex,"");cellIndex++;continue;}xssfSheet.getRow(row).getCell(cellIndex).setCellType(CellType.STRING);String stringValue=xssfSheet.getRow(row).getCell(cellIndex).getStringCellValue();hashMap.put(cellIndex,stringValue);cellIndex++;}("readExcelData:{}",hashMap.toString());return hashMap;}Java读取excel图⽚:获取整个excel的图⽚,可以按照指定的⾏和列来定位读取图⽚/*** 获取Excel中的图⽚* @param xssfSheet* @return*/public static Map<String, XSSFPictureData> getPictures(XSSFSheet xssfSheet){Map<String,XSSFPictureData> map=new HashMap<>();List<XSSFShape> list=xssfSheet.getDrawingPatriarch().getShapes();for (XSSFShape shape:list){XSSFPicture picture = (XSSFPicture) shape;XSSFClientAnchor xssfClientAnchor=(XSSFClientAnchor) picture.getAnchor();XSSFPictureData pdata = picture.getPictureData();// ⾏号-列号String key = xssfClientAnchor.getRow1() + "-" + xssfClientAnchor.getCol1();("key数据:{}",key);map.put(key, pdata);}return map;}实际调⽤测试@Testpublic void test() throws IOException, UnirestException {String filename="classpath:file/org.xlsx";File file = ResourceUtils.getFile(filename);InputStream inputStream = new FileInputStream(file);XSSFWorkbook xssfWorkbook=new XSSFWorkbook(inputStream);Map<String, XSSFPictureData> map=getPictures(xssfWorkbook.getSheetAt(0)); String mapKey="3-15";//指定⾏和列XSSFPictureData xssfPictureData= map.get(mapKey);byte[] data =xssfPictureData.getData();FileOutputStream out = new FileOutputStream("/Users/test12.png");out.write(data);out.close();}}jar包版本<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>。
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等都暂时不⾏。
java workbook 获取表格的数量的方法

一、介绍在Java编程中,经常需要使用Excel或其他表格文件进行数据处理和分析。
而对于一个Excel工作簿(workbook)中包含的表格数量,也是一个常见的需求。
本文将介绍如何使用Java编程获取一个工作簿中包含的表格数量的方法,帮助读者更好地完成数据处理和分析任务。
二、使用POI库Apache的POI库是一个用于处理Microsoft Office文件的开源Java 库,它提供了丰富的API用于读取、写入和操作Excel、Word等文件。
获取Excel工作簿中表格数量的方法就可以使用POI库来实现。
三、创建工作簿对象需要使用POI库来创建Excel工作簿对象。
代码示例如下:```javaFile file = new File("file.xlsx");InputStream inputStream = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(inputStream); ```这段代码首先创建了一个文件对象,然后创建了一个文件输入流并将文件对象传入,最后使用输入流创建了一个XSSFWorkbook对象,代表了Excel工作簿。
四、获取表格数量一旦有了工作簿对象,就可以使用POI库提供的方法来获取工作簿中包含的表格数量。
代码示例如下:```javaint numberOfSheets = workbook.getNumberOfSheets();```这段代码调用了XSSFWorkbook对象的getNumberOfSheets()方法,该方法返回了工作簿中包含的表格数量。
五、完整示例下面是一个完整的示例代码,演示了如何使用POI库来获取Excel工作簿中包含的表格数量:```javaimport java.io.File;import java.io.FileInputStream;import java.io.IOException;import ermodel.XSSFWorkbook;import ermodel.Workbook;import ermodel.Sheet;public class M本人n {public static void m本人n(String[] args) {try {File file = new File("file.xlsx");FileInputStream inputStream = new FileInputStream(file); XSSFWorkbook workbook = newXSSFWorkbook(inputStream);int numberOfSheets = workbook.getNumberOfSheets(); System.out.println("Number of sheets in the workbook: " + numberOfSheets);for (int i = 0; i < numberOfSheets; i++) {Sheet sheet = workbook.getSheetAt(i);System.out.println("Sheet " + (i+1) + " name: " + sheet.getSheetName());}workbook.close();inputStream.close();} catch (IOException e) {e.printStackTrace();}}}```在这个示例中,我们首先创建了一个File对象,然后根据文件对象创建了一个文件输入流。
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 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)。
/** * 读取 Excel 中的数据.将这些数据放入到一个三维数组中. * @author Administrator * @param filePath 文件路径. * @deprecated:读取 Excel 中的数据将它放入到 ArrayList 数组中(此为 三维数组). */ public static ArrayList readExcel(String filePath) {
import jxl.Cell; import jxl.Sheet; import jxl.Workbook;
/** * <p>Title: </p> * <pre>Description: Excel 数据导入到 oracle 数据库类. * </pre> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: 易通技术有限公司</p> * @author Allen * @version 1.0 */ public class ExcelImportOracle {
/** * 将 readExcel 方法读出来的三维数组数据转换成二维数组数据. * @param al * @return 返回二维数组数据. */ public static ArrayList getDisplayData(ArrayList al) { ArrayList result = new ArrayList(); for(int i = 0;i < al.size();i ++)
/** * 用于返回三维数组的 ArrayList.
*/ private static ArrayList subdata = new ArrayList();
/** * Excel 中的表名.
*/ private static String tablename;
/** * 文件的路径
*/ private static String filePath;
for (int a = 0; a < st.length; a++) { ArrayList alList = new ArrayList(); ArrayList tablenames = new ArrayList(); ArrayList tableAndContents = new ArrayList(); tablename = st[a].getName().trim(); int b = 0;
/** * 该方法为完成读取 Excel 中的数据并将数据插入到对应的数据库表中 的操作(在调用前需要先调用 setFilePath(String)这个方法.). * @author Administrator * @param data:读取 Excel 中的数据的数组. * @deprecated:将读取 Excel 中的数据插入到对应的数据库表 中. *
for (int i = 1; i < st[a].getRows(); i++) { ArrayList al = new ArrayList();
for (int j = 0; j < st[a].getColumns(); j++) { Cell c00 = st[a].getCell(j, i); // 通用的获取 cell 值的方式,返回字符串 String strc00 = StringUtil.toISO(c00.getContents().t rim()); // 获得 cell 具体类型值的方式得到内容. al.add(j, strc00); } alList.add(b, al);
try { subdata.clear();//将静态 ArrayList 数组清空.(如果不清空原数据会 不断累加) InputStream is = new FileInputStream(filePath); Workbook rwb = Workbook.getWorkbook(is); // Sheet st = rwb.getSheet(0);//这里有两种方法获取 sheet 表, 1 为名字,而为下标,从 0 开始 // Sheet st = rwb.getSheet("Book1");// Excel 中第一页的页 名称. Sheet st[] = rwb.getSheets();// 得到所有 Excel 中页的列表.
#xuewei2007 发表于 2008-02-18 14:50:07 IP: 168.160.249.* 想问你下,就是在那个 InsertData 方法 for (int i=0; i<data.size(); i++)...{ tablename = ((ArrayList)((ArrayList)data.get(i)).get(0)).get(0).toString(); Contents = (ArrayList)((ArrayList)data.get(i)).get(1); WfdefineDateOperate.currecorde(tablename,Contents);
try { String tablename; ArrayList Contents = new ArrayList();
for (int i=0; i<data.size(); i++){ tablename = ((ArrayList)((ArrayList)data.get(i)).get(0)). get(0).toString(); Contents = (ArrayList)((ArrayList)data.get(i)).get(1); WfdefineDateOperate.currecorde(tablename,Contents); } } catch (Exception e) { e.printStackTrace(); } }
/** * 将读取的 Excel 的三维数组数据进行对应的数据库表插入操作. * @author Administrator * @param data:读取 Excel 中的数据的数组.
* @deprecated:将读取 Excel 中的数据插入到对应的数据库表中. */ private static void InsertData(ArrayList data) {
if(file.exists()) { result = file.delete();
} else
{ System.out.println("文件没有找到,无法删除!"); }
if(result) { System.out.println("删除成功!");
} else
{ System.out.println("删除失败!"); } } return subdata; }
{ ArrayList tmp = (ArrayList)((ArrayList)al.get(i)).get(1);
for(int j = 0;j < tmp.size();j ++) { result.add(tmp.get(j));
} }
return result; }
/** * @param args */ public static void main(String[] args) { }
} WfdefineDateOperate 这个是怎么用的,它有什么作用呢?等待您的解答. 2008-02-19 08:45:20 作者回复 此类的 currecorde 方法的作用就是将 Contents 数据持久化到 tablename 表中。我写的是静态方法直接调用即可! #xuewei2007 发表于 2008-02-19 13:39:59 IP: 168.160.249.* 其实我已经想到了你这个应该是起的这么个作用的, 如果方便的话,可以将你的那个 WfdefineDateOperate 类,也就是你数据 持久化的这个过程给我看看吗? 2008-02-20 09:27:49 作者回复 此类涉及数据持久化底层操作,内容较多,请见谅! #xuewei2007 发表于 2008-02-19 13:45:26 IP: 168.160.249.* 还有我还有其他的问题,就是我发现,好象在读取数据的时候,始终是从第 二行数据开始读的,不知道你碰到这个问题没?
}
发表于 @ 2006 年 07 月 21 日 10:20:00|评论(loading... )|编辑
旧一篇: 关于 Excel 中的数据如何导入到 oracle 数据库中.
评论
#xuewei2007 发表于 2008-02-18 14:43:42 IP: 168.160.249.* 您好! 新年快乐! 看了你的这篇文章后,自己也尝试着操作,可是没有成功.请问可不可以留 下联系,便于请问. MSN :xuewei2007@ 2008-02-19 08:46:15 作者回复 我现在很少上MSN,不过 blog 我经常来,我的 MSN:apicescn@
JAVA EXCEL API 简介
Java Excel 是一开放源码项目,通过它 Java 开发人员可以读取 Excel 文件的内 容、创建新的 Excel 文件、更新已经存在的 Excel 文件。使用该 API 非 Windows 操作系统也可以通过纯 Java 应用来处理 Excel 数据表。因为是使用 Java 编写的, 所以我们在 Web 应用中可以通过 JSP、Servlet 来调用 API 实现对 Excel 数据表 的访问。
b++; } tablenames.add(tablename); tableAndContents.add(0, tablenames); tableAndContents.add(1, alList); subdata.add(a, tableAndContents); } rwb.close(); // 关闭 //System.out.println(subdata);// 输出 } catch (Exception e) { e.printStackTrace(); } finally { //删除上传文件 File file = new File(filePath); boolean result = false;