JAVA读写EXCEL及XML
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,多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文件
使用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数据⼯具类需要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 读写摘要: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操纵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,即总⾏数。
java用XSSFWorkbook实现读写Excel
java⽤XSSFWorkbook实现读写Excel 写在最前⾯: 使⽤的是JAVA POI实现的导出Excel; POI 提供了对2003版本的Excel的⽀持 ---- HSSFWorkbook POI 提供了对2007版本以及更⾼版本的⽀持 ---- XSSFWorkbook 引⼊相关依赖:<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>/*** 读取Excel⽂件的内容* @param inputStream excel⽂件,以InputStream的形式传⼊* @param sheetName sheet名字* @return以List返回excel中内容*/public static List<Map<String, String>> readExcel(InputStream inputStream, String sheetName) {//定义⼯作簿XSSFWorkbook xssfWorkbook = null;try {xssfWorkbook = new XSSFWorkbook(inputStream);} catch (Exception e) {System.out.println("Excel data file cannot be found!");}//定义⼯作表XSSFSheet xssfSheet;if (sheetName.equals("")) {// 默认取第⼀个⼦表xssfSheet = xssfWorkbook.getSheetAt(0);} else {xssfSheet = xssfWorkbook.getSheet(sheetName);}List<Map<String, String>> list = new ArrayList<Map<String, String>>();//定义⾏//默认第⼀⾏为标题⾏,index = 0XSSFRow titleRow = xssfSheet.getRow(0);//循环取每⾏的数据for (int rowIndex = 1; rowIndex < xssfSheet.getPhysicalNumberOfRows(); rowIndex++) {XSSFRow xssfRow = xssfSheet.getRow(rowIndex);if (xssfRow == null) {continue;}Map<String, String> map = new LinkedHashMap<String, String>();//循环取每个单元格(cell)的数据for (int cellIndex = 0; cellIndex < xssfRow.getPhysicalNumberOfCells(); cellIndex++) {XSSFCell titleCell = titleRow.getCell(cellIndex);XSSFCell xssfCell = xssfRow.getCell(cellIndex);map.put(getString(titleCell),getString(xssfCell));}list.add(map);}return list;}/*** 把单元格的内容转为字符串* @param xssfCell 单元格* @return字符串*/public static String getString(XSSFCell xssfCell) {if (xssfCell == null) {return "";}if (xssfCell.getCellTypeEnum() == CellType.NUMERIC) {return String.valueOf(xssfCell.getNumericCellValue());} else if (xssfCell.getCellTypeEnum() == CellType.BOOLEAN) {return String.valueOf(xssfCell.getBooleanCellValue());} else {return xssfCell.getStringCellValue();}}/*** 把内容写⼊Excel* @param list 传⼊要写的内容,此处以⼀个List内容为例,先把要写的内容放到⼀个list中* @param outputStream 把输出流怼到要写⼊的Excel上,准备往⾥⾯写数据*/public static void writeExcel(List<List> list, OutputStream outputStream) {//创建⼯作簿XSSFWorkbook xssfWorkbook = null;xssfWorkbook = new XSSFWorkbook();//创建⼯作表XSSFSheet xssfSheet;xssfSheet = xssfWorkbook.createSheet();//创建⾏XSSFRow xssfRow;//创建列,即单元格CellXSSFCell xssfCell;//把List⾥⾯的数据写到excel中for (int i=0;i<list.size();i++) {//从第⼀⾏开始写⼊xssfRow = xssfSheet.createRow(i);//创建每个单元格Cell,即列的数据List sub_list =list.get(i);for (int j=0;j<sub_list.size();j++) {xssfCell = xssfRow.createCell(j); //创建单元格xssfCell.setCellValue((String)sub_list.get(j)); //设置单元格内容}}//⽤输出流写到exceltry {xssfWorkbook.write(outputStream);outputStream.flush();outputStream.close();}catch (IOException e) {e.printStackTrace();}}附:把⼀个Map中的所有键和值分别放到⼀个list中,再把这两个list整个放到⼀个⼤的list⾥⾯,即 [ [key1,key2,key3...] , [value1,value2,value3...] ]public static List<List> convertMapToList(Map map) {List<List> list = new ArrayList<List>();List<String> key_list = new LinkedList<String>();List<String> value_list = new LinkedList<String>();Set<Entry<String,String>> set = map.entrySet();Iterator<Entry<String,String>> iter1 = set.iterator();while (iter1.hasNext()) {key_list.add(iter1.next().getKey());}list.add(key_list);Collection<String> value = map.values();Iterator<String> iter2 = value.iterator();while (iter2.hasNext()) {value_list.add(iter2.next());}list.add(value_list);return list;}。
Java解析Excel文件并把数据存入数据库
Java解析Excel⽂件并把数据存⼊数据库前段时间做⼀个⼩项⽬,为了同时存储多条数据,其中有⼀个功能是解析Excel并把其中的数据存⼊对应数据库中。
花了两天时间,不过⼀天多是因为⽤了"upload"关键字作为URL从⽽导致总报同⼀个错,最后在同学的帮助下顺利解决,下⾯我把⾃⼰⽤"POI"解析的⽅法总结出来供⼤家参考(我⽤的是SpingMVC和hibernate框架)。
1.web.xml中的配置⽂件web.xml中的配置⽂件就按照这种⽅式写,只需要把"application.xml"换成你的配置⽂件名即可<!--⽂件上传对应的配置⽂件--><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:application.xml</param-value></context-param>2.application.xml的配置⽂件(固定写发)在这个配置⽂件中你还可以规定上传⽂件的格式以及⼤⼩等多种属性限制<!-- 定义⽂件上传解析器 --><bean id="multipartResolver"class="monsMultipartResolver"></bean>3.⽂件上传的前端HTML注意:1.enctype="multipart/form-data" 必须写,封装表单2.method="post",提交⽅式必须为"post"提交3.action="${text}/uploadfile", "uploadfile"切记不要写成"upload",否则你找到世界末⽇也不会找到哪⾥有问题(本⼈因为这个折腾了⼀天多时间)。
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文件
dateFormat = new WritableCellFormat(); //内容格式
menuTitleFormat=new WritableCellFormat();//标题格式
// 生成第一张表及设置表名
WritableSheet sheet = book.createSheet(sheetName, 0);
for (int i = 0; i < head.length; i++) {
Label label = new Label(i, 0, head[i],titleFormat);
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import cn.qtone.utteExcelFile {
* @throws RowsExceededException
*/
private static void writeData(WritableSheet sheet,String[] data,int row) throws RowsExceededException, WriteException{
}
}
return name;
}
//设置样式
private static void setSheetStyle(){
jxl.write.WritableFont titleFont = new jxl.write.WritableFont(WritableFont.createFont("宋体"), 12, WritableFont.BOLD);//字体
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读取XML文件内容的四种方法
Java parse XML methods(4)关键字: xml1. 介绍1>DOM(JAXP Crimson解析器)DOM是用与平台和语言无关的方式表示XML文档的官方W3C标准。
DOM是以层次结构组织的节点或信息片断的集合。
这个层次结构允许开发人员在树中寻找特定信息。
分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。
由于它是基于信息层次的,因而DOM被认为是基于树或基于对象的。
DOM 以及广义的基于树的处理具有几个优点。
首先,由于树在内存中是持久的,因此可以修改它以便应用程序能对数据和结构作出更改。
它还可以在任何时候在树中上下导航,而不是像SAX那样是一次性的处理。
DOM使用起来也要简单得多。
2>SAXSAX处理的优点非常类似于流媒体的优点。
分析能够立即开始,而不是等待所有的数据被处理。
而且,由于应用程序只是在读取数据时检查数据,因此不需要将数据存储在内存中。
这对于大型文档来说是个巨大的优点。
事实上,应用程序甚至不必解析整个文档;它可以在某个条件得到满足时停止解析。
一般来说,SAX还比它的替代者DOM快许多。
选择DOM还是选择SAX?对于需要自己编写代码来处理XML文档的开发人员来说,选择DOM还是SAX解析模型是一个非常重要的设计决策。
DOM采用建立树形结构的方式访问XML文档,而SAX 采用的事件模型。
DOM解析器把XML文档转化为一个包含其内容的树,并可以对树进行遍历。
用DOM解析模型的优点是编程容易,开发人员只需要调用建树的指令,然后利用 navigation APIs访问所需的树节点来完成任务。
可以很容易的添加和修改树中的元素。
然而由于使用DOM解析器的时候需要处理整个XML文档,所以对性能和内存的要求比较高,尤其是遇到很大的XML文件的时候。
由于它的遍历能力,DOM解析器常用于XML文档需要频繁的改变的服务中。
SAX解析器采用了基于事件的模型,它在解析XML文档的时候可以触发一系列的事件,当发现给定的tag的时候,它可以激活一个回调方法,告诉该方法制定的标签已经找到。
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 excelwriter 文档说明
java excelwriter 文档说明摘要:1.Java ExcelWriter 简介2.Java ExcelWriter 的功能特点3.Java ExcelWriter 的使用方法4.Java ExcelWriter 的示例代码5.Java ExcelWriter 的优势与不足正文:【Java ExcelWriter 简介】Java ExcelWriter 是一个用于创建和操作Microsoft Excel 文件的Java 库。
它可以方便地对Excel 文件进行读写操作,支持.xls 和.xlsx 两种格式。
Java ExcelWriter 具有丰富的功能,可以满足各种复杂的Excel 操作需求。
【Java ExcelWriter 的功能特点】Java ExcelWriter 具有以下功能特点:1.支持读写两种格式的Excel 文件:.xls 和.xlsx。
2.支持操作Excel 文件的各个部分,如工作表、单元格等。
3.提供丰富的方法,可以实现数据的导入导出、公式计算、图表绘制等功能。
4.支持多种数据类型,如字符串、数字、日期、布尔值等。
5.支持自定义单元格格式,包括字体、颜色、对齐方式等。
6.支持保存和加载工作簿密码,实现对Excel 文件的安全保护。
【Java ExcelWriter 的使用方法】要使用Java ExcelWriter,首先需要导入其相关的类库。
在项目中加入以下Maven 依赖:```xml<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version></dependency>```接下来,可以通过以下步骤创建一个简单的Excel 文件:1.创建一个Java 类,继承`AnalysisEventListener`。
Java Web开发中对Excel文件的读写实现
及各种特殊报表 、单据的生成等情况 ,可以运用一些优秀的开源工具来实现 ,既满足 了业务需求,也节约 了开发成本 。
关 键 词 :Jv b; xe ;x 读 取 ; aaWe E cl il ; 写入
I lme t t n o c lDo u e t a n rt n J v e mp e n a i fEx e c m n sRe d a d W iei a a W b o
某 些特殊情 况 ,比如业 务员需要在管 理系统 中大量 录入数据 时 ,或者需 要对数据库 中某些数据进 行特殊 处理时 ,对于此
示 ,如 图 2 示 。 所
类 突发 的数 据处理需求 ,倘若通过修 改管 理系统来 达到 目的 不 仅费时 ,而且难度会 比较大 ,而如果能借助 E cl xe,凭借 其
De eo v l pm e t n
LI Yo uho ng
.
( aa yP t c e cl o p n fr t nSri Xi i gK lmai8 4 0 ) K rma e oh mi m ayI oma o ev e, n a ea y 3 0 3 r aC n i c jn
lr e n mb ro o g n o s d t mp r a d e p  ̄ a l a ai t f p c a e o t, o u n sg n r t n a d S n a g u e fh mo e e u aa i o n x o , swe sa v r y o e ilr p rs d c me t e e ai n O o , t l e s o c n ma e u e o o x e ln p n s u c o l t c iv , i h me tt e b sn s e d , u lo s v h e eo me t a k s fs me e c l to e o r e to s o a h e e wh c e u i e s n e s b ta s a e t e d v lp n e h
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 poi excel 读写
题目:探索Java中POI库的Excel读写功能1. 简介Java作为一种广泛应用的编程语言,拥有丰富的库和框架来支持各种应用场景。
其中,POI(Poor Obfuscation Implementation)库是Java操作Microsoft Office格式文件的重要工具之一。
在POI库中,Excel的读写功能一直备受开发者关注,因为Excel在商业和数据处理领域有着广泛的应用。
本文将深入探讨Java中POI库的Excel读写功能,介绍其基本用法和注意事项。
2. POI库的基本概念POI库是Apache软件基金会的一个开源项目,旨在提供Java程序对Microsoft Office格式文件的读写功能。
它支持对Excel、Word和PowerPoint等文件的操作,其中Excel的读写功能是开发者们最为关注的部分。
POI库主要由HSSF(Horrible Spreadsheet Format)、XSSF(XML Spreadsheet Format)和SXSSF(Streaming Usermodel API)三个子项目组成,在具体应用时,开发者可以根据自己的需求选择合适的子项目来实现对Excel文件的读写。
3. Excel的读操作在POI库中,读取Excel文件的操作主要通过HSSFWorkbook和XSSFWorkbook来实现。
HSSFWorkbook用于操作.xls格式的文件,而XSSFWorkbook用于操作.xlsx格式的文件。
使用POI库读取Excel文件的过程包括打开Excel文件、读取工作表、遍历行和列数据等步骤。
在具体的代码实现中,开发者可以根据需求选择不同的API来完成特定的读取任务,例如使用HSSF类库来从.xls文件中读取数据,或者使用XSSF类库来从.xlsx文件中读取数据。
在读取Excel文件时,开发者需要注意文件格式、数据类型和异常处理等问题,以确保读取的准确性和健壮性。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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