java读取和写入EXCEL文件

合集下载

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

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

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

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

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

java中easyexsl的用法

java中easyexsl的用法

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

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

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

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

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

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

java获取excel文件内容的方法

java获取excel文件内容的方法

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

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

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

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

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

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

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

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

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

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

Java读取Excel文件的几种方法

Java读取Excel文件的几种方法

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

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

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

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

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

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

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

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

java操作Excel 详解

java操作Excel 详解

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

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

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

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

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

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

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

java poi excel 读写

java poi excel 读写

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

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

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

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

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

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

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

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

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

easyexcel知识点

easyexcel知识点

easyexcel知识点EasyExcel是一款基于Java的开源Excel操作工具,它提供了简单易用的API,使得开发人员能够快速、高效地进行Excel文件的读写、格式处理和数据操作。

本文将围绕EasyExcel的知识点展开,介绍其常用功能以及使用技巧。

一、Excel文件的读取与写入EasyExcel可以通过`read`方法读取Excel文件,并将内容映射到指定的Java对象中。

读取Excel文件的代码如下:```javaString fileName = "test.xlsx";List<DataModel> data = EasyExcel.read(fileName).sheet(0).doReadSync();```其中`DataModel`为自定义的Java对象,用于存储Excel中的数据。

通过`sheet`方法指定读取的工作表,通过`doReadSync`方法同步读取Excel文件。

写入Excel文件同样简单,只需将数据写入到Java对象中,然后调用`write`方法将数据写入Excel文件即可。

写入Excel文件的代码如下:```javaString fileName = "test.xlsx";List<DataModel> data = getData(); // 获取要写入Excel的数据EasyExcel.write(fileName,DataModel.class).sheet("Sheet1").doWrite(data);```二、Excel文件的格式处理EasyExcel提供了丰富的API,可以对Excel文件进行格式处理,如设置单元格样式、合并单元格、设置列宽等。

下面介绍几个常用的格式处理功能。

1. 设置单元格样式可以通过`TableStyle`类设置单元格的样式,如设置背景色、边框样式等。

java从文件中读取数据并存入对象中的方法

java从文件中读取数据并存入对象中的方法

一、概述在软件开发中,经常会遇到需要从文件中读取数据并存入对象中的情况,尤其是在使用Java语言进行编程时。

掌握Java从文件中读取数据并存入对象中的方法对于开发者来说是非常重要的。

本文将介绍Java中实现该功能的常用方法,并结合实例详细讲解。

二、使用Java读取文件的方法1. 使用File类和Scanner类读取文件Java中可以使用File类和Scanner类来读取文件中的数据。

首先通过File类创建文件对象,然后通过Scanner类来读取文件中的内容。

以下是一个简单的示例代码:```javaimport java.io.File;import java.io.FileNotFoundException;import java.util.Scanner;public class ReadFromFile {public static void m本人n(String[] args) {try {File file = new File("data.txt");Scanner scanner = new Scanner(file);while (scanner.hasNextLine()) {String data = scanner.nextLine();System.out.println(data);}scanner.close();} catch (FileNotFoundException e) {System.out.println("File not found");e.printStackTrace();}}}```2. 使用BufferedReader类读取文件除了Scanner类,还可以使用BufferedReader类来读取文件中的数据。

与Scanner类不同,BufferedReader类提供了更高效的读取方式。

以下是一个使用BufferedReader类读取文件的示例代码:```javaimport java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class ReadFromFile {public static void m本人n(String[] args) {try {BufferedReader reader = new BufferedReader(new FileReader("data.txt"));String line = reader.readLine();while (line != null) {System.out.println(line);line = reader.readLine();}reader.close();} catch (IOException e) {System.out.println("IO Exception");e.printStackTrace();}}}```以上是使用Java读取文件的基本方法,开发者可以根据实际需求选择合适的方式来读取文件中的数据。

JAVA读取WORD_pdf等

JAVA读取WORD_pdf等

JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方式OFFICE文档使用POI控件,PDF可以使用PDFBOX0.7.3控件,完全支持中文,用XPDF也行.java2word 是一个在java程序中调用MS Office Word 文档的组件(类库)。

该组件提供了一组简单的接口,以便java 档。

这些服务包括:打开文档、新建文档、查找文字、替换文字,插入文字、插入图片、插入表格,在书签处插入文字、插入图片、插入表格等。

填充数据到表格中读取表格数据更多激动人心的功能见详细说明:用jacob.其实jacob是一个bridage,连接java和com或者win32函数的一个中间件,jacob并不能直接抽取word,excel等文有为你写好的了,就是jacob的作者一并提供了。

jacob下载:下载了jacob并放到指定的路径之后(dll放到path,jar文件放到classpath),就可以写你自己的抽取程序了,下面是一个import java.io.File;import .*;import com.jacob.activeX.*;public class FileExtracter{public static void main(String[] args) {ActiveXComponent app = new ActiveXComponent("Word.Application");String inFile = "c:\\test.doc";String tpFile = "c:\\temp.htm";String otFile = "c:\\temp.xml";boolean flag = false;try {app.setProperty("Visible", new Variant(false));Object docs = app.getProperty("Documents").toDispatch();Object doc = Dispatch.invoke(docs,"Open", Dispatch.Method, new Object[]{inFile,new Variant(false), new int[1]).toDispatch();Dispatch.invoke(doc,"SaveAs", Dispatch.Method, new Object[]{tpFile,new Variant(8)}, new int[1]); Variant f = new Variant(false);Dispatch.call(doc, "Close", f);flag = true;} catch (Exception e) {e.printStackTrace();} finally {app.invoke("Quit", new Variant[] {});}}}2。

javaexcel解析常见方法

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

Java读写Excel文件DEMO

Java读写Excel⽂件DEMO下载⼀定格式的Excel⽂件: @RequestMapping("/xxxx/xxxx/xxxx/copyfiledownload")@ResponseBodypublic void copyfiledownload(HttpServletRequest request, HttpServletResponse response, Model model) throws Exception{response.setContentType("text/html; charset=GBK");String basePath = request.getSession().getServletContext().getRealPath("/");File file = new File(basePath + "xxxx.xls");FileOutputStream fos=new FileOutputStream(file);HSSFWorkbook wb=new HSSFWorkbook();HSSFSheet sheet=wb.createSheet();wb.setSheetName(0, "sheet0");HSSFRow row=null;HSSFCell cell=null;row=sheet.createRow(0);cell=row.createCell(0);cell.setCellValue("xxID");cell=row.createCell(1);cell.setCellValue("每ID的总限量");cell=row.createCell(2);cell.setCellValue("每⽤户对此ID最⼤购买量");cell=row.createCell(3);cell.setCellValue("xx售卖价格");cell=row.createCell(4);cell.setCellValue("S时间");cell=row.createCell(5);cell.setCellValue("X时间");CellStyle cellStyle = wb.createCellStyle();CreationHelper helperDate = wb.getCreationHelper();cellStyle.setDataFormat(helperDate.createDataFormat().getFormat("yy/mm/dd/ hh:mm:ss"));HSSFRow rowD=null;HSSFCell cellD=null;for (int i = 1; i < 1000; i++) {rowD=sheet.createRow(i);cellD=rowD.createCell(4);cellD.setCellStyle(cellStyle);cellD=rowD.createCell(5);cellD.setCellStyle(cellStyle);} // 设置时间格式cell=row.createCell(6);cell.setCellValue("xx平台");//CellRangeAddressList(firstRow, lastRow, firstCol, lastCol)设置⾏列范围CellRangeAddressList addressList = new CellRangeAddressList(1, 1000, 6, 6);String[] pos = {"PC","WAP","APP","PC+WAP","PC+APP","WAP+APP","PC+WAP+APP"};DataValidationHelper helper = sheet.getDataValidationHelper();DataValidationConstraint constraint = helper.createExplicitListConstraint(pos);DataValidation dataValidation = helper.createValidation(constraint, addressList);if(dataValidation instanceof XSSFDataValidation) {dataValidation.setSuppressDropDownArrow(true);dataValidation.setShowErrorBox(true);}else {dataValidation.setSuppressDropDownArrow(false);}sheet.addValidationData(dataValidation);wb.write(fos);fos.close();response.setContentType("application/x-msdownload");response.setContentLength((int) file.length());response.setHeader("Content-Disposition", "attachment;filename=" + new String(file.getName().getBytes("gbk"), "iso-8859-1")); FileInputStream fis = new FileInputStream(file);BufferedInputStream buff = new BufferedInputStream(fis);byte[] b = new byte[1024];long k = 0;OutputStream myout = response.getOutputStream();while (k < file.length()) {int j = buff.read(b, 0, 1024);k += j;myout.write(b, 0, j);}myout.flush();buff.close();fis.close();myout.close();file.delete();}Excel⽂件读取: /*** 读取excel表头** @param file* @return* @throws IOException*/@SuppressWarnings("unused")private String[] readExcelHead(File file) throws IOException {HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));HSSFSheet sheet = wb.getSheetAt(0);HSSFRow row = null;HSSFCell cell = null;row = sheet.getRow(0);String[] buff = new String[row.getLastCellNum()];for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) {cell = row.getCell(i);buff[i] = cell.getStringCellValue();}return buff;} /*** 读取2003excel** @param file* @return*/private List<List<Object>> read2003Excel(File file) throws IOException {List<List<Object>> dataList = new ArrayList<List<Object>>();HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));HSSFSheet sheet = wb.getSheetAt(0);HSSFRow row = null;HSSFCell cell = null;Object val = null;DecimalFormat df = new DecimalFormat("0");// 格式化数字DecimalFormat df2 = new DecimalFormat("#0.00");// 格式化⼩数SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化⽇期字符串for (int i = sheet.getFirstRowNum() + 1; i < sheet.getPhysicalNumberOfRows(); i++) {row = sheet.getRow(i);if (row == null) {continue;}List<Object> objList = new ArrayList<Object>();for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {cell = row.getCell(j);if (cell == null) {val = null;objList.add(val);continue;}switch (cell.getCellType()) {case HSSFCell.CELL_TYPE_STRING:val = cell.getStringCellValue();break;case HSSFCell.CELL_TYPE_NUMERIC:if ("@".equals(cell.getCellStyle().getDataFormatString())) {if (j == 3) {val = df2.format(cell.getNumericCellValue());} else {val = df.format(cell.getNumericCellValue());}} else if ("General".equals(cell.getCellStyle().getDataFormatString())) {if (j == 3) {val = df2.format(cell.getNumericCellValue());} else {val = df.format(cell.getNumericCellValue());}} else {val = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));}break;case HSSFCell.CELL_TYPE_BOOLEAN:val = cell.getBooleanCellValue();break;case HSSFCell.CELL_TYPE_BLANK:val = "";break;default:val = cell.toString();break;}objList.add(val);}dataList.add(objList);}return dataList;} /*** 读取2007excel** @param file* @return*/private List<List<Object>> read2007Excel(File file) throws IOException {List<List<Object>> dataList = new ArrayList<List<Object>>();XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));XSSFSheet sheet = xwb.getSheetAt(0);XSSFRow row = null;XSSFCell cell = null;Object val = null;DecimalFormat df = new DecimalFormat("0");// 格式化数字DecimalFormat df2 = new DecimalFormat("#0.00");// 格式化⼩数SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化⽇期字符串for (int i = sheet.getFirstRowNum() + 1; i < sheet.getPhysicalNumberOfRows(); i++) {row = sheet.getRow(i);if (row == null) {continue;}List<Object> objList = new ArrayList<Object>();for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {cell = row.getCell(j);if (cell == null) {val = null;objList.add(val);continue;}switch (cell.getCellType()) {case XSSFCell.CELL_TYPE_STRING:val = cell.getStringCellValue();break;case XSSFCell.CELL_TYPE_NUMERIC:if ("@".equals(cell.getCellStyle().getDataFormatString())) {if (j == 3) {val = df2.format(cell.getNumericCellValue());} else {val = df.format(cell.getNumericCellValue());}} else if ("General".equals(cell.getCellStyle().getDataFormatString())) {if (j == 3) {val = df2.format(cell.getNumericCellValue());} else {val = df.format(cell.getNumericCellValue());}} else {val = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));}break;case XSSFCell.CELL_TYPE_BOOLEAN:val = cell.getBooleanCellValue();break;case XSSFCell.CELL_TYPE_BLANK:val = "";break;default:val = cell.toString();break;}objList.add(val);}dataList.add(objList);}return dataList;}。

Java读写Excel文件中数据的简便方法(附代码)

Java读写Excel文件中数据的简便方法(附代码)

Java读写Excel文件中数据的简便方法Java开发项目中经常会碰到处理Excel文件中数据的情况,这里通过一个例子来看一下实现方法:从Excel文件orders.xls中读取订单信息,从中找出2010年1月1日(含)之后,并且SELLERID等于18的订单。

找到的数据写入order_result.xls文件。

Excel文件orders.xls的内容如下:ORDERID CLIE NT SE LLERID AMOUNT ORDERDATE1 UJRNP 17 392 2008/11/2 15:282 SJCH 6 4802 2008/11/9 15:283 UJRNP 16 13500 2008/11/5 15:284 P WQ 9 26100 2008/11/8 15:285 P WQ 11 4410 2008/11/12 15:286 HANAR 18 6174 2008/11/7 15:287 E GU 2 17800 2008/11/6 15:288 VILJX 7 2156 2008/11/9 15:289 JAYB 14 17400 2008/11/12 15:2810 JAXE 19 19200 2008/11/12 15:2811 SJCH 7 13700 2008/11/10 15:2812 QUICK 11 21200 2008/11/13 15:2813 HL 12 21400 2008/11/21 15:2814 JAYB 1 7644 2008/11/16 15:2815 MIP 16 3234 2008/11/19 15:2816 AYW YN 4 6566 2008/11/21 15:28…Java程序的编写思路是1、从Excel文件逐行读入数据保存到List对象sourceList中。

2、遍历List对象sourceList,如果满足条件就保存到结果List对象resultList中。

Java读写excel实战完全解析

Java读写excel实战完全解析

Java读写excel实战完全解析背景时值毕业季,很多毕业⽣初⼊职场。

因此,这边也写了⼀些新⼿相关的 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指定列的数据详细教程和注意事项

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

java用XSSFWorkbook实现读写Excel

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 easyexcel.的用法

java easyexcel.的用法

java easyexcel.的用法EasyExcel是一个基于Java的简单、快速、内存占用低的excel处理工具,它支持读取和写入大量数据的Excel文件,且操作简便。

在这里,我们将详细介绍EasyExcel的基本用法,帮助开发者能够快速上手并应用到实际项目中。

准备工作在开始使用EasyExcel之前,你需要将EasyExcel的依赖添加到你的项目中。

如果你使用的是Maven,可以在pom.xml中添加以下依赖:<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>最新版本</version></dependency>请将最新版本替换为在Maven仓库中查找到的最新发布版本号。

写入Excel文件利用EasyExcel写入数据非常简单,以下代码展示了如何创建一个Excel文件并写入数据。

首先,你需要定义一个数据模型类,这个类将对应Excel中的一行数据。

以下是一个示例:import com.alibaba.excel.annotation.ExcelProperty;public class UserData {@ExcelProperty("用户编号")private Integer userId;@ExcelProperty("用户名")private String userName;// 省略getter和setter方法}接着,你可以通过一下代码将数据写入到Excel文件中:import com.alibaba.excel.EasyExcel;List<UserData> dataList =new ArrayList<>();// 此处填充dataList数据String fileName ="example.xlsx";EasyExcel.write(fileName, UserData.class).sheet("模板").doWri te(dataList);在这里,fileName是你想要创建的Excel文件的完整路径和名称。

easyexcel解析

easyexcel解析

easyexcel解析EasyExcel是一款基于Java的Java语言开发的Excel解析库,可以快速读取和写入Excel文件,它可以节省大量时间和开发成本,是商业应用中处理Excel文件的最佳选择。

EasyExcel的功能强大,可满足用户的多种复杂需求,可实现快速、稳定、高效地解析Excel 文件,极大地提高了开发者的工作效率。

EasyExcel提供了多种解析Excel文件的方式,其中Read和Write功能尤其强大。

Read功能可以快速、稳定地读取Excel文件,无论Excel文件是单个文件还是多个文件,都可以一次性读取它们的内容,且其内容会直接被写入内存中,不用再次经过转换操作,可以直接使用。

Write功能则可以快速、稳定地将内存中的数据写入Excel 文件,可自定义每一步操作,满足用户多种复杂需求,节省大量时间开发成本。

EasyExcel的功能广泛,它可以实现对数据的导入导出,可以自定义对数据的操作,可以设置查看表格的权限,可以实现数据的定期同步,也可以实现Excel数据的报表分析,还可以生成Excel文档的标准格式,以及支持Excel文件的多种格式,用户可以根据需要使用不同的格式。

EasyExcel的安全性也很高,它提供了安全的读写权限管理,可以对进行敏感性内容的存储和访问进行严格的管理,以确保数据安全,减少可能的安全风险。

EasyExcel的优势在于它简单易用,可以快速、稳定地处理Excel文件,可以自定义操作,而且可以保证数据安全,使用它可以大大提高工作效率,是处理Excel文件的最佳选择。

EasyExcel是一款非常优秀的Excel解析库,在实际开发中,使用它可以快速、稳定地处理Excel文件,减少开发成本,极大地提高工作效率,是商业应用中处理Excel文件的首选。

java.xlsx常量

java.xlsx常量

java.xlsx常量在Java中,如果你想将常量存储在Excel文件(.xlsx)中,你可以使用一些库和技术来实现。

以下是一种常用的方法:1. 使用Apache POI库:Apache POI是一个流行的Java库,用于处理Microsoft Office格式的文件,包括Excel。

你可以使用Apache POI库来读取和写入Excel文件中的常量。

首先,确保将Apache POI库添加到你的Java项目中。

然后,可以使用以下代码示例来创建一个Excel文件并写入常量:import ermodel.*;public class ExcelConstants {public static void main(String[] args) {// 创建新的工作簿Workbook workbook = new XSSFWorkbook();// 创建一个工作表Sheet sheet = workbook.createSheet("Constants");// 创建常量行和单元格Row row = sheet.createRow(0);Cell cell = row.createCell(0);// 设置常量的值cell.setCellValue("CONSTANT_VALUE");// 保存Excel文件try {FileOutputStream fileOut = new FileOutputStream("constants.xlsx");workbook.write(fileOut);fileOut.close();System.out.println("Excel文件已创建成功!");} catch (IOException e) {e.printStackTrace();}}}上述代码示例创建了一个名为"Constants"的工作表,并在第一行第一列写入了常量值"CONSTANT_VALUE"。

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

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

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

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

Workbook workbook = null;
try {
workbook = Workbook.getWorkbook(new File("d:\\temp\\TestRead.xls"));
} catch (Exception e) {
throw new Exception("file to import not found!");
}
Sheet sheet = workbook.getSheet(0);
Cell cell = null;
int columnCount=3;
int rowCount=sheet.getRows();
for (int i = 0; i <rowCount; i++) {
for (int j = 0; j <columnCount; j++) {
//注意,这里的两个参数,第一个是表示列的,第二才表示行
cell=sheet.getCell(j, i);
//要根据单元格的类型分别做处理,否则格式化过的内容可能会不正确
if(cell.getType()==CellType.NUMBER){
System.out.print(((NumberCell)cell).getValue());
}
else if(cell.getType()==CellType.DATE){
System.out.print(((DateCell)cell).getDate());
}
else{
System.out.print(cell.getContents());
}
//System.out.print(cell.getContents());
System.out.print("\t");
}
System.out.print("\n");
}
//关闭它,否则会有内存泄露
workbook.close();
在Java中向Excel文件写入内容
四、导出数据到Excel文件中
下面的例子,设置了数字、日期的格式,还有字体,颜色等。

File tempFile=new File("d:/temp/output.xls");
WritableWorkbook workbook = Workbook.createWorkbook(tempFile);
WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);
//一些临时变量,用于写到excel中
Label l=null;
jxl.write.Number n=null;
jxl.write.DateTime d=null;
//预定义的一些字体和格式,同一个Excel中最好不要有太多格式
WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLUE);
WritableCellFormat headerFormat = new WritableCellFormat (headerFont);
WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
WritableCellFormat titleFormat = new WritableCellFormat (titleFont);
WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false, UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
WritableCellFormat detFormat = new WritableCellFormat (detFont);
NumberFormat nf=new NumberFormat("0.00000"); //用于Number的格式
WritableCellFormat priceFormat = new WritableCellFormat (detFont, nf);
DateFormat df=new DateFormat("yyyy-MM-dd");//用于日期的WritableCellFormat dateFormat = new WritableCellFormat (detFont, df);
//剩下的事情,就是用上面的内容和格式创建一些单元格,再加到sheet中l=new Label(0, 0, "用于测试的Excel文件", headerFormat);
sheet.addCell(l);
//add Title
int column=0;
l=new Label(column++, 2, "标题", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "日期", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "货币", titleFormat);
sheet.addCell(l);
l=new Label(column++, 2, "价格", titleFormat);
sheet.addCell(l);
//add detail
int i=0;
column=0;
l=new Label(column++, i+3, "标题"+i, detFormat);
sheet.addCell(l);
d=new DateTime(column++, i+3, new java.util.Date(), dateFormat); sheet.addCell(d);
l=new Label(column++, i+3, "CNY", detFormat);
sheet.addCell(l);
n=new jxl.write.Number(column++, i+3, 5.678, priceFormat);
sheet.addCell(n);
i++;
column=0;
l=new Label(column++, i+3, "标题"+i, detFormat);
sheet.addCell(l);
d=new DateTime(column++, i+3, new java.util.Date(), dateFormat); sheet.addCell(d);
l=new Label(column++, i+3, "SGD", detFormat);
sheet.addCell(l);
n=new jxl.write.Number(column++, i+3, 98832, priceFormat);
sheet.addCell(n);
//设置列的宽度
column=0;
sheet.setColumnView(column++, 20); sheet.setColumnView(column++, 20); sheet.setColumnView(column++, 10); sheet.setColumnView(column++, 20);
workbook.write();
workbook.close()
方正飞鸿智能信息平台 。

相关文档
最新文档