JAVA读写EXCEL及XML

合集下载

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数据

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,多sheet)

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文件

Java中读excel文件

使用POI开发EXCEl文档Microsoft 的office系列产品拥有大量的用户,Word,Excel也成为办公文件的首选。

在Java中,已经有很多对于Word,Excel的开源的解决方案,其中比较出色的是Apache的Jakata项目的POI子项目。

POI包括一系列的API,它们可以操作基于Mricrosoft OLE 2 compound Document Format 的各种格式文件,可以通过这些API在java中读写Excel、Word等文件。

POI是完全的Java Excel 和Java Word 解决方案。

从poi3.5开始就可以支持MS最新的docx,xsls格式的文档了,而现在poi3.6已经引入了对OOXML,OutLook,Visio,Publisher等诸多文件格式的支持。

Poi3.6中API包含HSSF,HWPF,XSSF,HSLF,HDGF,HPBF。

其中:HSSF—提供读写Microsoft Excel XLS格式档案的功能。

HWPF—提供读写Microsoft Word DOC格式档案的功能。

XSSF—提供读写Microsoft Excel XLSX格式档案的功能。

HSLF—提供读写Microsoft PowerPoint格式档案的功能。

HDGF—提供读写Microsoft Visio格式档案的功能。

HPBF—提供读写Microsoft Publisher格式档案的功能。

使用POI,导入Poi jar包后,还需要导入的jar包有:dom4j-1.6.1.jar,xmlbeans-2.3.0.jar。

下面是一个使用Poi读取Excel 2003 的例子:。

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 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 等。

JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析

JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析

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

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

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

⾸先明确⼀下基本概念: 先创建⼀个⼯作簿,⼀个⼯作簿可以有多个⼯作表,⼀个⼯作表可以有多个⾏,⼀个⾏可以有多个单元格 ⼯作簿 >>>>>>>>XSSFWorkbook ⼯作表 >>>>>>>>XSSFSheet ⾏ >>>>>>>>XSSFRow 单元格 >>>>>>>>XSSFCell下图为创建的student.xlsx的内容:读取student.xlsx⽂件代码:package com.zjk.testexcel;import ermodel.*;import java.io.FileInputStream;import java.io.IOException;/*** @Auther: zjk* @Date: 2019/8/30* @Description:*/public class TestExcel1 {public static void main(String[] args) {try {//创建⼯作簿XSSFWorkbook xssfWorkbook = new XSSFWorkbook(new FileInputStream("D:\\test-excel\\student.xlsx"));System.out.println("xssfWorkbook对象:" + xssfWorkbook);//读取第⼀个⼯作表(这⾥的下标与list⼀样的,从0开始取,之后的也是如此)XSSFSheet sheet = xssfWorkbook.getSheetAt(0);System.out.println("sheet对象:" + sheet);//获取第⼀⾏的数据XSSFRow row = sheet.getRow(0);System.out.println("row对象:" + row);//获取该⾏第⼀个单元格的数据XSSFCell cell0 = row.getCell(0);System.out.println("cello对象:" + cell0);} catch (IOException e) {e.printStackTrace();}}}控制台输出结果:可以发现具体到⾏对象时,就解析成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/spreadsheetDrawing" xmlns:x14="/office/spre <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,即总⾏数。

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

2.判断单元格数据类型
• String类型:
cell.getCellType()==HSSFCell.CELL_TYPE_STRING
• boolean类型:
cell.getCellType()==HSSFCell.CELL_TYPE_BOOLEAN
• 数字类型:
cell.getCellType()==HSSFCell.CELL_TYPE_NUMERIC
JAVA读改 XML
1.读取XML
读取XML文件 Document document = saxReader.read(new File(filename));
2.根据条件修改
• 找出所有book下show属性
List list = document.selectNodes("/books/book/@show"); • 遍历并赋值 Iterator i = list.iterator(); while(i.hasNext()){ Attribute attribute=(Attribute)i.next(); //如果属性的值为yes,则改为no if(attribute.getValue().equals("yes")){ attribute.setValue("no"); } }
jaxen-1.1-beta-6.jar
JAVA写XML
1.示例XML文books.xml
<?xml version="1.0" encoding="UTF-8"?> <books> <!--This is a test for dom4j, holen, 2004.9.11--> <book show="yes"> <title>Dom4j Tutorials</title> </book> <book show="yes"> <title>Lucene Studing</title> </book> <book show="no">
• 设置文本
setText方法
eg:titleElement.setText("Lucene Studing");
3.输出
XMLWriter writer=new XMLWriter(new FileWriter(new File(filename))); writer.write(document); writer.close(); 其中filename为自定义路径
4.删除节点
bookElement.remove(titleElement);
5.写入另一个XML
Document document = saxReader.read(new File(filename));
XMLWriter writer=new XMLWriter(new FileWriter(new File(newfilename))); writer.write(document); writer.close();
Thank you!
3.多重遍历
//找出所有的book list=document.selectNodes("/books/book"); i=list.iterator(); while(i.hasNext()){ Element bookElement=(Element) i.next(); //找出所有book下的title Iterator<Object> iterator=bookElement.elementIterator("title "); while(iterator.hasNext()){ Element titleElement=(Element) iterator.next();
1.创建XML
• 创建XML对象 eg:Document
document=DocumentHelper.createDocum ent();
• 创建根books eg:Element
booksElement=document.addElement("bo oks");
• 创建注释 eg:booksElement.addComment("This
System.out.println("单元格是数字,值是: "+cell.getNumericCellValue());
J AVA 操 作 X M L
DOM4J——XML
DOM4J最大的特色是使用大量的接口,这 也是它被认为比JDOM灵活的主要原因。是文 档形式。 程序中所需jar包: dom4j-1.6.1.jar
• 创建表单
HSSFSheet sheet=wb.createSheet("new sheet");
//设置表单名为中文,0表示第一个表单
wb.setSheetName(0, "中文", HSSFWorkbook.ENCODING_UTF_16);
• 创建行,0表示第一行
HSSFRow row=sheet.createRow((short)0);
EXCEL的分层结构
HSSFWorkbook EXCEL工作薄 EXCEL
HSSFRow EXCEL行 EXCEL
HSSFCell EXCEL单元格 EXCEL
HSSFSheet EXCEL表单 EXCEL
JAVA写 EXCEL
1.创建EXCEL
• 创建工作薄
HSSFWorkbook wb=new HSSFWorkbook();
• 创建单元格,0表示第一个单元格
HSSFCell cell=row.createCell((short)0)
2.写入数据
• 写入整型、浮点型、字符串、布尔型数据 cell.setCellValue(1); cell.setCellValue(1.3); //处理乱码 csCell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellValue("test表格"); cell.setCellValue(true); • 写入日期 //设置CELL为日期的显示格式,将日期转换为字符 SimpleDateFormat s=new SimpleDateFormat("yyyy-MMdd"); String str=s.format(new Date()); dCell.setCellValue(str);
JAVA操作EXCEL
EXCLE
又称HSSF(讨厌的电子表格格式) 程序中所需jar包: jxl.jar poi-2.5.1-final-20040804.jar poi-contrib-2.5.1-final-20040804.jar poi-scratchpad-2.5.1-final-20040804.jar
3.打印内容
• String类型输出:
System.out.println("单元格是字符串,值是: "+cell.getStringCellValue());
• boolean类型输出:
System.out.println(cell.getBooleanCellValue());
• 数字类型输出:
• 读取文件并用工作薄保存 InputStream myxls=new FileInputStream("D:/我的文档/ 桌面/workbook.xls"); //用工作薄保存 HSSFWorkbook wb=new HSSFWorkbook(myxls); • 读取表单,0表示第一个表单 HSSFSheet sheet=wb.getSheetAt(0); • 读取行 HSSFRow row=sheet.getRow(0); • 读取单元格 HSSFCell cell=row.getCell((short)0);
is a
test for dom4j,holen,2004.9.11");
• 创建节点 eg:Element
bookElement=booksElement.addElement( "book");
2.赋值
• 设置属性
addAttribute方法
eg:bookElement.addAttribute("show", "yes");
3.输出EXCEL
OutputStream fileOut=new FileOutputStream("D:/我的文档/ 桌面/workbook.xls"); //写入输出流 wb.write(fileOut); //关闭输出流 fileOut.close();
JAVA读 EXCEL
1.输入流读取EXCEL
相关文档
最新文档