POI解析EXCEL实例
- 格式:doc
- 大小:31.50 KB
- 文档页数:7
poi用法范文POI库的主要组成部分有以下几个:3. SXSSF(Streaming Usermodel API for Excel):用于处理大型Excel文件,通过将数据写入临时文件流来减少内存的使用。
使用POI库可以轻松地读取和写入Office文件的内容。
下面是一些POI的使用场景和示例:1. 读取Excel文件:使用POI可以读取Excel文件中的数据,如单元格的值、行和列的内容等。
以下是一个简单的读取Excel文件的示例:```FileInputStream file = new FileInputStream(newFile("example.xls"));Workbook workbook = new HSSFWorkbook(file);Sheet sheet = workbook.getSheetAt(0);Iterator<Row> rowIterator = sheet.iterator(;while (rowIterator.hasNext()Row row = rowIterator.next(;Iterator<Cell> cellIterator = row.cellIterator(;while (cellIterator.hasNext()Cell cell = cellIterator.next(;switch (cell.getCellType()case Cell.CELL_TYPE_STRING:System.out.print(cell.getStringCellValue( + "\t");break;case Cell.CELL_TYPE_NUMERIC:System.out.print(cell.getNumericCellValue( + "\t");break;}}System.out.println(;file.close(;``````Workbook workbook = new XSSFWorkbook(;Sheet sheet = workbook.createSheet("Sheet1");Row row = sheet.createRow(0);Cell cell = row.createCell(0);cell.setCellValue("Hello, POI!");FileOutputStream file = new FileOutputStream(new File("example.xlsx"));workbook.write(file);file.close(;``````FileInputStream file = new FileInputStream(newFile("example.docx"));XWPFDocument document = new XWPFDocument(file);List<XWPFParagraph> paragraphs = document.getParagraphs(;for (XWPFParagraph paragraph : paragraphs)System.out.println(paragraph.getText();file.close(;``````FileInputStream file = new FileInputStream(newFile("example.pptx"));XMLSlideShow slideshow = new XMLSlideShow(file);XSLFSlide[] slides = slideshow.getSlides(;for (XSLFSlide slide : slides)List<XSLFShape> shapes = slide.getShapes(;for (XSLFShape shape : shapes)if (shape instanceof XSLFTextShape) XSLFTextShape textShape = (XSLFTextShape) shape; System.out.println(textShape.getText();}}file.close(;```。
poi事件模式解析excel 2007摘要:1.POI事件模式简介2.Excel 2007简介3.POI事件模式在Excel 2007中的应用4.具体实例解析5.总结与建议正文:随着信息化时代的到来,数据处理和分析成为了各行各业必备的技能。
在这个过程中,Microsoft Excel 2007作为一款功能强大的电子表格软件,被广泛应用于各种领域。
本文将为您介绍Excel 2007中的一个重要概念——POI (Product Object Model)事件模式,并通过具体实例为您解析如何在Excel 2007中运用POI事件模式。
1.POI事件模式简介POI事件模式是一种基于COM(Component Object Model)的技术,它允许开发人员创建自定义对象,并在Excel中响应特定事件。
通过使用POI 事件模式,您可以自定义Excel的工作簿、工作表和单元格行为,从而满足各种业务需求。
2.Excel 2007简介Excel 2007是Microsoft Office System的一部分,它具有丰富的功能,可以轻松地进行数据录入、计算、分析和可视化。
在Excel 2007中,用户可以通过VBA(Visual Basic for Applications)编程语言和API(应用程序编程接口)自定义和扩展Excel的功能。
3.POI事件模式在Excel 2007中的应用在Excel 2007中,POI事件模式主要应用于以下几个方面:- 工作簿事件:例如打开、关闭、保存工作簿等。
- 工作表事件:例如单元格内容变化、选区变化等。
- 单元格事件:例如单元格内容变化、鼠标事件等。
通过监听和处理这些事件,您可以实现自定义功能,例如:自动填充公式、监控单元格内容变化等。
4.具体实例解析以下将以一个简单的实例来说明如何在Excel 2007中使用POI事件模式:假设我们希望在一个新建的工作簿中,当用户在A1单元格中输入内容时,自动将内容复制到B1单元格。
poi多sheet解析-回复POI是一款强大的Java库,用于处理Microsoft Office文档,包括Excel、Word和PowerPoint等文件。
其中,POI的Excel模块可以解析Excel 文件,并且支持多个工作表(sheet)的解析。
在本文中,我们将一步一步地回答有关POI多个工作表解析的问题。
在开始之前,首先要确保已经配置好POI库。
可以通过在项目的构建文件(如pom.xml)中添加POI的依赖来实现。
这样,我们就能够开始POI 多个工作表解析的过程了。
第一步是读取Excel文件。
我们可以使用POI库中的Workbook类来实现这一步骤。
首先,通过WorkbookFactory类的静态方法create()来创建一个Workbook对象。
然后,使用Workbook对象的getSheet()方法来获取想要解析的工作表。
例如,如果想解析第一个工作表,可以使用getSheetAt(0)方法。
接下来,我们需要确定工作表中的数据范围。
POI提供了Row和Cell类来处理Excel表中的行和单元格数据。
通过使用Sheet对象的getRow()方法,我们可以获取特定行的数据。
通过使用Row对象的getCell()方法,我们可以获取特定单元格的数据。
同时,POI还提供了getLastRowNum()方法,以获取该工作表的最后一行的索引。
一旦我们确认了数据范围,就可以开始解析数据了。
使用循环,逐行读取工作表中的数据。
例如,可以使用for循环从第一行(一般是索引为1)开始,一直迭代到最后一行。
然后,在每一行中,使用getCell()方法获取特定单元格的值,将其存储在变量中,以供后续处理使用。
可以根据需要将这些数据存储在集合中,例如List或Map。
另外,如果Excel文件中的工作表与特定主题相关,可以通过筛选特定条件的数据来进一步处理。
例如,可以使用if语句来判断某个单元格的值是否满足某个条件,如果满足,则存储在集合中。
最近几天在整理客户的数据,数据量比较大,有几十万条,用到了excel。
用户提供的数据有很多重复的,这个我们要挑拣出来,我用代码写挑拣重复的数据,原来用jxl解析excel,发现excel不支持office2007,并且excel2003最大的行数只能是65535,这样就不能运行一次代码解决问题了。
查了下资料,apache 的POI可以解析office2007。
下面两个简单例子望能提供给网友参考。
1.读取excel2007Java代码1. //office2007工作区2. XSSFWorkbook wb = new XSSFWorkbook(new FileInputStream("D:/temp/test_poi.xlsx"));3. //获得该工作区的第一个sheet4. XSSFSheet sheet = wb.getSheetAt(0);5. //总共有多少行,从0开始6. int totalRows = sheet.getLastRowNum();7. for (int i = 0; i <= totalRows; i++) {8. //取得该行9. XSSFRow row = sheet.getRow(i);10. //注释的代码,是为了防止excel文件有空行11.// if(row == null) {12.// continue;13.// }14. System.out.println(row.getCell(1).toString());15. }2.生成excel2007Java代码1.//输出流2.OutputStream os = new FileOutputStream("D:/temp/create.xlsx");3.//工作区4.XSSFWorkbook wb = new XSSFWorkbook();5.//创建第一个sheet6.XSSFSheet sheet= wb.createSheet("test");7.//生成第一行8.XSSFRow row = sheet.createRow(0);9.//给这一行的第一列赋值10.row.createCell(0).setCellValue("column1");11.//给这一行的第一列赋值12.row.createCell(1).setCellValue("column2");13.//写文件14.wb.write(os);15.//关闭输出流16.os.close();。
poi 读取条件格式Excel是一款功能强大的电子表格软件,可用于数据分析、数据处理、图表制作等。
它提供了许多有用的功能,其中之一是条件格式,它可以按照特定的条件来自动设置单元格的样式。
在本文中,我们将讨论如何使用poi 读取条件格式,并一步一步地解释该过程。
步骤一:准备工作首先,我们需要按照以下步骤准备工作:1. 确保你已经安装了Java Development Kit(JDK)和Eclipse集成开发环境(IDE)。
2. 下载并导入Apache POI库。
你可以从Apache的官方网站上下载POI 库,并将其导入到你的Eclipse项目中。
3. 确保你已经有一个Excel文件,其中包含条件格式。
步骤二:打开Excel文件在使用POI读取条件格式之前,我们首先需要打开Excel文件。
以下是使用POI打开Excel文件的示例代码:javaFileInputStream fis = newFileInputStream("path_to_your_excel_file");Workbook workbook = new XSSFWorkbook(fis);Sheet sheet = workbook.getSheetAt(0);在这段代码中,我们使用`FileInputStream`类来打开Excel文件,并使用`XSSFWorkbook`类和`getSheetAt()`方法来获取第一个工作表。
步骤三:获取单元格的条件格式一旦我们打开了Excel文件,我们就可以开始获取单元格的条件格式了。
以下是一个示例代码,可以帮助你理解如何实现该功能:javaSheetConditionalFormatting sheetCF =sheet.getSheetConditionalFormatting(); ConditionalFormatting[] cfRules =sheetCF.getConditionalFormattings();for (ConditionalFormatting cf : cfRules) {CellRangeAddress[] cellRanges = cf.getFormattingRanges();for (CellRangeAddress cellRange : cellRanges) {int firstRow = cellRange.getFirstRow();int lastRow = cellRange.getLastRow();int firstCol = cellRange.getFirstColumn();int lastCol = cellRange.getLastColumn();for (int row = firstRow; row <= lastRow; row++) {Row currentRow = sheet.getRow(row);for (int col = firstCol; col <= lastCol; col++) {Cell cell = currentRow.getCell(col);获取单元格的条件格式,并进行相关操作}}}}在这段代码中,我们首先获取了工作表的条件格式,并使用`getConditionalFormattings()`方法将其存储在`cfRules`数组中。
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开发⼩技巧(六):使⽤ApachePOI读取Excel前⾔在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这⾥所说的数据源并⾮仅仅是指数据库,还包括excel、csv、xml等各种类型的数据接⼝⽂件,⽽这些⽂件中的数据不⼀定是结构化存储的,⽐如各种各样的报表⽂件,往往是⼀些复杂的表格结构,其中不仅有我们需要的数据,还有⼀些冗余的、⽆价值的数据,这时我们就⽆法直接⽤⼀般数据加载⼯具直接读取⼊库了。
也许你会想,数据源导出⽂件前先处理好数据就⾏了。
然⽽,实际开发中数据源往往是多个的,⽽且涉及到不同的部门甚⾄公司,这其间难免会出现各种⿇烦,甚⾄有些数据⽂件还是纯⼿⼯处理的,不⼀定能给到你满意的数据格式。
所以我们不讨论谁该负责转换的问题,这⾥主要介绍如何使⽤Apache POI来从Excel数据⽂件中读取我们想要的数据,以及⽤Bean Validation对数据内容按照预定的规则进⾏校验。
⽂章要点:Apache POI是什么如何使⽤Apache POI读取Excel⽂件使⽤Bean Validation进⾏数据校验Excel读取⼯具类使⽤实例Apache POI是什么Apache POI是⽤Java编写的免费开源的跨平台的Java API,提供API给Java程式对Microsoft Office格式档案进⾏读和写的操作。
如何使⽤Apache POI处理Excel⽂件1、导⼊Maven依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-schemas</artifactId><version>3.17</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.17</version></dependency>2、创建Workbook实例这⾥需要注意的是Excel⽂档的版本问题,Excel2003及以前版本的⽂档使⽤HSSFWorkbook对象,Excel2007及之后版本使⽤HSSFWorkbook对象// Excel2003及以前版本Workbook workbook = new XSSFWorkbook(new FileInputStream(path));// Excel2007及之后版本Workbook workbook = new HSSFWorkbook(new FileInputStream(path));3、获取Sheet表格页对象Sheet是Excel⽂档中的⼯作簿即表格页⾯,读取前要先找到数据所在页⾯,可以通过标签名或者索引的⽅式获取指定Sheet对象// 按索引获取Sheet sheet = workbook.getSheetAt(index);// 按标签名获取4、获取Cell单元格对象// ⾏索引row和列索引col都是以 0 起始Cell cell = sheet.getRow(row).getCell(col);5、获取单元格内容获取单元格的值之前⾸先要获知单元格内容的类型,在Excel中单元格有6种类型:1. CELL_TYPE_BLANK :空值2. CELL_TYPE_BOOLEAN :布尔型3. CELL_TYPE_ERROR :错误4. CELL_TYPE_FORMULA :公式型5. CELL_TYPE_STRING:字符串型6. CELL_TYPE_NUMERIC:数值型各种类型的内容还需要进⼀步判断其数据格式,例如单元格的Type为CELL_TYPE_NUMERIC时,它有可能是Date类型,在Excel中的Date 类型是以Double类型的数字存储的,不同类型的值要调⽤cell对象相应的⽅法去获取,具体情况具体分析public Object getCellValue(Cell cell) {if(cell == null) {return null;}switch (cell.getCellType()) {case Cell.CELL_TYPE_STRING:return cell.getRichStringCellValue().getString();case Cell.CELL_TYPE_NUMERIC:if (DateUtil.isCellDateFormatted(cell)) {return cell.getDateCellValue();} else {return cell.getNumericCellValue();}case Cell.CELL_TYPE_BOOLEAN:return cell.getBooleanCellValue();case Cell.CELL_TYPE_FORMULA:return formula.evaluate(cell).getNumberValue();default:return null;}}6、关闭Workbook对象workbook.close();使⽤Bean Validation进⾏数据校验当你要处理⼀个业务逻辑时,数据校验是你不得不考虑和⾯对的事情,程序必须通过某种⼿段来确保输⼊进来的数据从语义上来讲是正确的或者符合预定义的格式,⼀个Java程序⼀般是分层设计的,⽽不同的层可能是不同的开发⼈员来完成,这样就很容易出现不同的层重复进⾏数据验证逻辑,导致代码冗余等问题。
POI操作Excel详解,HSSF和XSSF两种⽅式HSSF⽅式:1package com.tools.poi.lesson1;23import java.io.FileInputStream;4import java.io.FileNotFoundException;5import java.io.FileOutputStream;6import java.io.IOException;7import java.text.ParseException;8import java.text.SimpleDateFormat;9import java.util.ArrayList;10import java.util.List;1112import ermodel.HSSFCell;13import ermodel.HSSFCellStyle;14import ermodel.HSSFRow;15import ermodel.HSSFSheet;16import ermodel.HSSFWorkbook;17import org.apache.poi.hssf.util.HSSFColor;18import org.apache.poi.poifs.filesystem.POIFSFileSystem;19import ermodel.Cell;20import ermodel.CellStyle;2122import com.tools.poi.bean.Student;2324public class ExcelUtilWithHSSF {25public static void main(String[] args) {26try {27 getExcelAsFile("aaa");28 } catch (FileNotFoundException e) {29 e.printStackTrace();30 } catch (IOException e) {31 e.printStackTrace();32 }333435// try {36// CreateExcelDemo1();37// } catch (ParseException e) {38// e.printStackTrace();39// }404142 }4344/**45 * 得到Excel,并解析内容46 * @param file47 * @throws FileNotFoundException48 * @throws IOException49*/50public static void getExcelAsFile(String file) throws FileNotFoundException, IOException{51//1.得到Excel常⽤对象52// POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/FTP/test.xls"));53 POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/FTP/new1.xls"));54//2.得到Excel⼯作簿对象55 HSSFWorkbook wb = new HSSFWorkbook(fs);56//3.得到Excel⼯作表对象57 HSSFSheet sheet = wb.getSheetAt(0);58//总⾏数59int trLength = sheet.getLastRowNum();60//4.得到Excel⼯作表的⾏61 HSSFRow row = sheet.getRow(0);62//总列数63int tdLength = row.getLastCellNum();64//5.得到Excel⼯作表指定⾏的单元格65 HSSFCell cell = row.getCell((short)1);66//6.得到单元格样式67 CellStyle cellStyle = cell.getCellStyle();68for(int i=0;i<trLength;i++){69//得到Excel⼯作表的⾏70 HSSFRow row1 = sheet.getRow(i);71for(int j=0;j<tdLength;j++){7273//得到Excel⼯作表指定⾏的单元格74 HSSFCell cell1 = row1.getCell(j);7576/**77 * 为了处理:Excel异常Cannot get a text value from a numeric cell78 * 将所有列中的内容都设置成String类型格式79*/80if(cell1!=null){81 cell1.setCellType(Cell.CELL_TYPE_STRING);82 }8384//获得每⼀列中的值85 System.out.print(cell1.getStringCellValue()+"\t\t\t");86 }87 System.out.println();88 }89 }909192/**93 * 创建Excel,并写⼊内容94*/95public static void CreateExcel(){9697//1.创建Excel⼯作薄对象98 HSSFWorkbook wb = new HSSFWorkbook();99//2.创建Excel⼯作表对象100 HSSFSheet sheet = wb.createSheet("new Sheet");101//3.创建Excel⼯作表的⾏102 HSSFRow row = sheet.createRow(6);103//4.创建单元格样式104 CellStyle cellStyle =wb.createCellStyle();105// 设置这些样式106 cellStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);107 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);108 cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);109 cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);110 cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);111 cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);112 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);113114115116//5.创建Excel⼯作表指定⾏的单元格117 row.createCell(0).setCellStyle(cellStyle);118//6.设置Excel⼯作表的值119 row.createCell(0).setCellValue("aaaa");120121 row.createCell(1).setCellStyle(cellStyle);122 row.createCell(1).setCellValue("bbbb");123124125//设置sheet名称和单元格内容126 wb.setSheetName(0,"第⼀张⼯作表");127//设置单元格内容 cell.setCellValue("单元格内容");128129// 最后⼀步,将⽂件存到指定位置130try131 {132 FileOutputStream fout = new FileOutputStream("E:/students.xls");133 wb.write(fout);134 fout.close();135 }136catch (Exception e)137 {138 e.printStackTrace();139 }140 }141142/**143 * 创建Excel的实例144 * @throws ParseException145*/146public static void CreateExcelDemo1() throws ParseException{147 List list = new ArrayList();148 SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");149 Student user1 = new Student(1, "张三", 16,true, df.parse("1997-03-12"));150 Student user2 = new Student(2, "李四", 17,true, df.parse("1996-08-12"));151 Student user3 = new Student(3, "王五", 26,false, df.parse("1985-11-12"));152 list.add(user1);153 list.add(user2);154 list.add(user3);155156157// 第⼀步,创建⼀个webbook,对应⼀个Excel⽂件158 HSSFWorkbook wb = new HSSFWorkbook();159// 第⼆步,在webbook中添加⼀个sheet,对应Excel⽂件中的sheet160 HSSFSheet sheet = wb.createSheet("学⽣表⼀");161// 第三步,在sheet中添加表头第0⾏,注意⽼版本poi对Excel的⾏数列数有限制short 162 HSSFRow row = sheet.createRow((int) 0);163// 第四步,创建单元格,并设置值表头设置表头居中164 HSSFCellStyle style = wb.createCellStyle();165 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建⼀个居中格式166167 HSSFCell cell = row.createCell((short) 0);168 cell.setCellValue("学号");169 cell.setCellStyle(style);170 cell = row.createCell((short) 1);171 cell.setCellValue("姓名");172 cell.setCellStyle(style);173 cell = row.createCell((short) 2);174 cell.setCellValue("年龄");175 cell.setCellStyle(style);176 cell = row.createCell((short) 3);177 cell.setCellValue("性别");178 cell.setCellStyle(style);179 cell = row.createCell((short) 4);180 cell.setCellValue("⽣⽇");181 cell.setCellStyle(style);182183// 第五步,写⼊实体数据实际应⽤中这些数据从数据库得到,184185for (int i = 0; i < list.size(); i++)186 {187 row = sheet.createRow((int) i + 1);188 Student stu = (Student) list.get(i);189// 第四步,创建单元格,并设置值190 row.createCell((short) 0).setCellValue((double) stu.getId());191 row.createCell((short) 1).setCellValue(stu.getName());192 row.createCell((short) 2).setCellValue((double) stu.getAge());193 row.createCell((short)3).setCellValue(stu.getSex()==true?"男":"⼥"); 194 cell = row.createCell((short) 4);195 cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu 196 .getBirthday()));197 }198// 第六步,将⽂件存到指定位置199try200 {201 FileOutputStream fout = new FileOutputStream("E:/students.xls"); 202 wb.write(fout);203 fout.close();204 }205catch (Exception e)206 {207 e.printStackTrace();208 }209210211212 }213 }XSSF⽅式:1package com.tools.poi.lesson1;23import java.io.File;4import java.io.FileInputStream;5import java.io.FileNotFoundException;6import java.io.FileOutputStream;7import java.io.IOException;8import java.io.InputStream;9import java.io.OutputStream;10import java.text.ParseException;11import java.text.SimpleDateFormat;12import java.util.ArrayList;13import java.util.List;1415import ermodel.HSSFCell;16import ermodel.HSSFCellStyle;17import ermodel.HSSFRow;18import ermodel.HSSFSheet;19import ermodel.HSSFWorkbook;20import org.apache.poi.hssf.util.HSSFColor;21import org.apache.poi.openxml4j.exceptions.InvalidFormatException;22import org.apache.poi.poifs.filesystem.POIFSFileSystem;23import ermodel.Cell;24import ermodel.CellStyle;25import ermodel.Row;26import ermodel.Sheet;27import ermodel.Workbook;28import ermodel.WorkbookFactory;29import org.apache.poi.ss.util.WorkbookUtil;3031import com.tools.poi.bean.Student;3233public class ExcelUtilWithXSSF {34public static void main(String[] args) {35try {36 getExcelAsFile("d:/FTP/系统报表.xls");37 } catch (FileNotFoundException e) {38 e.printStackTrace();39 } catch (IOException e) {40 e.printStackTrace();41 } catch (InvalidFormatException e) {42 e.printStackTrace();43 }444546// try {47// CreateExcelDemo1();48// } catch (ParseException e) {49// e.printStackTrace();50// }515253 }5455/**56 * 得到Excel,并解析内容对2007及以上版本使⽤XSSF解析57 * @param file58 * @throws FileNotFoundException59 * @throws IOException60 * @throws InvalidFormatException61*/62public static void getExcelAsFile(String file) throws FileNotFoundException, IOException, InvalidFormatException{ 63////1.得到Excel常⽤对象64// POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/FTP/new1.xls"));65////2.得到Excel⼯作簿对象66// HSSFWorkbook wb = new HSSFWorkbook(fs);67686970 InputStream ins = null;71 Workbook wb = null;72 ins=new FileInputStream(new File(file));73//ins= ExcelService.class.getClassLoader().getResourceAsStream(filePath);74 wb = WorkbookFactory.create(ins);75 ins.close();767778//3.得到Excel⼯作表对象79 Sheet sheet = wb.getSheetAt(0);80//总⾏数81int trLength = sheet.getLastRowNum();82//4.得到Excel⼯作表的⾏83 Row row = sheet.getRow(0);84//总列数85int tdLength = row.getLastCellNum();86//5.得到Excel⼯作表指定⾏的单元格87 Cell cell = row.getCell((short)1);88//6.得到单元格样式89 CellStyle cellStyle = cell.getCellStyle();9091for(int i=5;i<trLength;i++){92//得到Excel⼯作表的⾏93 Row row1 = sheet.getRow(i);94for(int j=0;j<tdLength;j++){95//得到Excel⼯作表指定⾏的单元格96 Cell cell1 = row1.getCell(j);97/**98 * 为了处理:Excel异常Cannot get a text value from a numeric cell99 * 将所有列中的内容都设置成String类型格式100*/101if(cell1!=null){102 cell1.setCellType(Cell.CELL_TYPE_STRING);103 }104105if(j==5&&i<=10){106 cell1.setCellValue("1000");107 }108109//获得每⼀列中的值110 System.out.print(cell1+" ");111 }112 System.out.println();113 }114115//将修改后的数据保存116 OutputStream out = new FileOutputStream(file);117 wb.write(out);118 }119120121/**122 * 创建Excel,并写⼊内容123*/124public static void CreateExcel(){125126//1.创建Excel⼯作薄对象127 HSSFWorkbook wb = new HSSFWorkbook();128//2.创建Excel⼯作表对象129 HSSFSheet sheet = wb.createSheet("new Sheet");130//3.创建Excel⼯作表的⾏131 HSSFRow row = sheet.createRow(6);132//4.创建单元格样式133 CellStyle cellStyle =wb.createCellStyle();134// 设置这些样式135 cellStyle.setFillForegroundColor(HSSFColor.SKY_BLUE.index);136 cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);137 cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);138 cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);139 cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);140 cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);141 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);142143144145//5.创建Excel⼯作表指定⾏的单元格146 row.createCell(0).setCellStyle(cellStyle);147//6.设置Excel⼯作表的值148 row.createCell(0).setCellValue("aaaa");149150 row.createCell(1).setCellStyle(cellStyle);151 row.createCell(1).setCellValue("bbbb");152153154//设置sheet名称和单元格内容155 wb.setSheetName(0,"第⼀张⼯作表");156//设置单元格内容 cell.setCellValue("单元格内容");157158// 最后⼀步,将⽂件存到指定位置159try160 {161 FileOutputStream fout = new FileOutputStream("E:/students.xls");162 wb.write(fout);163 fout.close();164 }165catch (Exception e)166 {167 e.printStackTrace();168 }169 }170171/**172 * 创建Excel的实例173 * @throws ParseException174*/175public static void CreateExcelDemo1() throws ParseException{176 List list = new ArrayList();177 SimpleDateFormat df = new SimpleDateFormat("yyyy-mm-dd");178 Student user1 = new Student(1, "张三", 16,true, df.parse("1997-03-12"));179 Student user2 = new Student(2, "李四", 17,true, df.parse("1996-08-12"));180 Student user3 = new Student(3, "王五", 26,false, df.parse("1985-11-12"));181 list.add(user1);182 list.add(user2);183 list.add(user3);184185186// 第⼀步,创建⼀个webbook,对应⼀个Excel⽂件187 HSSFWorkbook wb = new HSSFWorkbook();188// 第⼆步,在webbook中添加⼀个sheet,对应Excel⽂件中的sheet189 HSSFSheet sheet = wb.createSheet("学⽣表⼀");190// 第三步,在sheet中添加表头第0⾏,注意⽼版本poi对Excel的⾏数列数有限制short 191 HSSFRow row = sheet.createRow((int) 0);192// 第四步,创建单元格,并设置值表头设置表头居中193 HSSFCellStyle style = wb.createCellStyle();194 style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建⼀个居中格式195196 HSSFCell cell = row.createCell((short) 0);197 cell.setCellValue("学号");198 cell.setCellStyle(style);199 cell = row.createCell((short) 1);200 cell.setCellValue("姓名");201 cell.setCellStyle(style);202 cell = row.createCell((short) 2);203 cell.setCellValue("年龄");204 cell.setCellStyle(style);205 cell = row.createCell((short) 3);206 cell.setCellValue("性别");207 cell.setCellStyle(style);208 cell = row.createCell((short) 4);209 cell.setCellValue("⽣⽇");210 cell.setCellStyle(style);211212// 第五步,写⼊实体数据实际应⽤中这些数据从数据库得到,213214for (int i = 0; i < list.size(); i++)215 {216 row = sheet.createRow((int) i + 1);217 Student stu = (Student) list.get(i);218// 第四步,创建单元格,并设置值219 row.createCell((short) 0).setCellValue((double) stu.getId());220 row.createCell((short) 1).setCellValue(stu.getName());221 row.createCell((short) 2).setCellValue((double) stu.getAge());222 row.createCell((short)3).setCellValue(stu.getSex()==true?"男":"⼥"); 223 cell = row.createCell((short) 4);224 cell.setCellValue(new SimpleDateFormat("yyyy-mm-dd").format(stu 225 .getBirthday()));226 }227// 第六步,将⽂件存到指定位置228try229 {230 FileOutputStream fout = new FileOutputStream("E:/students.xls"); 231 wb.write(fout);232 fout.close();233 }234catch (Exception e)235 {236 e.printStackTrace();237 }238239240241 }242 }。
一、介绍在日常工作中,我们经常会遇到需要处理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库。
POI Excel CreateAnchor 参数解析在使用Apache POI进行Excel文件操作时,CreateAnchor 参数是一个非常重要的概念。
它可以帮助我们更好地理解和控制Excel中的图形和对象的位置和大小。
本文将深入探讨CreateAnchor 参数及其相关内容,帮助读者全面、深刻地了解这一主题。
一、CreateAnchor 参数是什么?在使用Apache POI库操作Excel文件时,CreateAnchor 参数是用于指定图形或对象位置和大小的一个关键参数。
通过设置CreateAnchor 参数,我们可以精准地控制图形或对象在Excel表格中的位置和大小,从而实现更加灵活、美观的数据展示效果。
二、CreateAnchor 参数的使用方法1. 基本概念在Apache POI中,CreateAnchor 类是用于创建图形或对象锚点的关键类。
通过指定锚点的位置和大小,我们可以将图形或对象精准地放置在Excel表格中。
CreateAnchor 类提供了丰富的方法和属性,可以帮助我们根据实际需求来灵活地设置图形或对象的位置和大小。
2. 具体操作通过使用CreateAnchor 参数,我们可以在Excel表格中创建各种类型的图形和对象,如图片、表格、文本框等。
在创建这些图形或对象时,我们需要指定它们的锚点位置和大小,以便将它们放置在表格中合适的位置并设置合适的大小。
通过灵活运用CreateAnchor 参数,我们可以实现精美的数据展示效果,提升Excel文件的可视化和实用性。
三、CreateAnchor 参数的个人观点和理解在我看来,CreateAnchor 参数是Apache POI库中非常实用且重要的一个功能。
通过灵活使用CreateAnchor 参数,我们可以实现Excel 文件中图形和对象的精准定位和大小控制,为数据展示带来更加丰富和美观的效果。
CreateAnchor 参数也为我们提供了更多的操作空间和创意发挥的余地,可以让我们更加灵活和自由地设计Excel文件,满足不同需求的数据展示要求。
POI_TL循环查询表格内容的案例随着社会的不断发展和进步,数据处理和管理已经成为各行各业都需要面对的重要问题。
在日常工作中,我们经常需要处理各种各样的表格数据,其中包括对表格中的内容进行查询和筛选。
为了提高工作效率,许多人都会选择使用Microsoft Excel或者其他类似的办公软件来处理表格数据。
然而,有些时候我们可能会遇到一些特殊的情况,需要用一些特殊的方法来处理表格数据。
本文将以POI_TL循环查询表格内容的案例为例,探讨如何利用Java编程语言来实现对表格内容的循环查询。
1. 背景在实际工作中,我们经常需要处理一些非常复杂的表格数据。
有时候,我们可能需要对表格中的某一列数据进行循环查询,以便找到符合特定条件的数据。
为了实现这一功能,我们可以借助Java编程语言中的POI_TL库来实现对表格内容的循环查询。
POI_TL是Apache基金会的一个开源项目,它提供了丰富的API来操作Microsoft Office格式的文档,包括Excel表格等。
通过使用POI_TL库,我们可以高效地对表格内容进行查询,大大提高工作效率。
2. 实现步骤下面我们将以一个具体的案例来介绍如何利用POI_TL库来实现对表格内容的循环查询。
假设我们有一个包含员工信息的Excel表格,表格中包括员工的尊称、工号、部门和职位等信息。
我们需要根据员工的部门来查询表格中的相关信息。
具体的实现步骤如下:步骤一:导入POI_TL库我们需要在项目中引入POI_TL库。
可以通过Maven等方式将POI_TL库添加到项目的依赖中。
```java<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency>```步骤二:加载Excel表格接下来,我们需要使用POI_TL库来加载Excel表格,获取表格中的数据。
Springboot之使⽤POI读取解析Excel⽂件1、引⼊依赖jar包。
在pom.xml中引⼊两个依赖的包即可:<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>RELEASE</version></dependency>2、读取xxx.xlsx@GetMapping(value = "/impPriceRecord")public InvokeResult impPriceRecord() throws Exception {try {List<AmoycarClue> infos = new ArrayList<AmoycarClue>();InputStream is = new FileInputStream("D:/xxx.xlsx");XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(0);XSSFRow titleCell = xssfSheet.getRow(0);for (int i = 1; i <= xssfSheet.getLastRowNum(); i++) {XSSFRow xssfRow = xssfSheet.getRow(i);int minCell = xssfRow.getFirstCellNum();int maxCell = xssfRow.getLastCellNum();XSSFCell bidCode = xssfRow.getCell(0);XSSFCell owerName = xssfRow.getCell(1);XSSFCell ownersex = xssfRow.getCell(2);XSSFCell owerMobile = xssfRow.getCell(3);XSSFCell basePrice = xssfRow.getCell(4);XSSFCell bidType = xssfRow.getCell(5);XSSFCell bidDealerId = xssfRow.getCell(6);XSSFCell bidDealerName = xssfRow.getCell(7);XSSFCell bidName = xssfRow.getCell(8);XSSFCell bidMobile = xssfRow.getCell(9);XSSFCell carNumber = xssfRow.getCell(10);XSSFCell autoNumber = xssfRow.getCell(11);XSSFCell carUnifiedNumber = xssfRow.getCell(12);XSSFCell curBid = xssfRow.getCell(13);XSSFCell bidStatus = xssfRow.getCell(14);XSSFCell maxBid = xssfRow.getCell(15);XSSFCell priceGap = xssfRow.getCell(16);XSSFCell bidCreateTime = xssfRow.getCell(17);XSSFCell expectPrice = xssfRow.getCell(18);XSSFCell roundStatus = xssfRow.getCell(19);AmoycarClue model = new AmoycarClue();model.setBidCode(getValue(bidCode));model.setBizoppCode("");model.setOriginalCode("");model.setWorkNo("");model.setOwnerName(getValue(owerName) + "");model.setOwnerSex(Double.valueOf(getValue(ownersex)).intValue());model.setOwnerMobile(getValue(owerMobile));model.setBasePrice(Double.valueOf(getValue(basePrice)));model.setBidName(getValue(bidName));model.setBidMobile(getValue(bidMobile));model.setBidType(Double.valueOf(getValue(bidType)).intValue());model.setCarCode(code);model.setMaxBid(Double.valueOf(getValue(maxBid)));model.setCurBid(Double.valueOf(getValue(curBid)));model.setPriceGap((Double.valueOf(getValue(priceGap))));model.setBidStatus(Double.valueOf(getValue(bidStatus)).intValue());SimpleDateFormat pat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");if (bidCreateTime!= null) {try {String sDate=getValue(bidCreateTime);java.util.Date uDate = pat.parse(sDate);model.setBidCreatetime(uDate);} catch (ParseException ex) {ex.printStackTrace();}}model.setRoundStatus(Double.valueOf(getValue(roundStatus)).intValue());model.setExpectPrice(Double.parseDouble(getValue(expectPrice)));model.setBidDealerId(getValue(bidDealerId));model.setBidDealerName(getValue(bidDealerName));try {auctionClient.syncAmoycarClue(model);Thread.sleep(1000);} catch (Exception ex) {ex.printStackTrace();return InvokeResult.failure(500, "impPriceRecord:插⼊错误BidCode:{" + model.getBidCode() +"}"+ ex.getMessage());}}return InvokeResult.success(true);} catch (Exception e) {return InvokeResult.failure(500,"impPriceRecord:历史数据导⼊错误"+e.getMessage());}}3、格式⽅法private String getValue(XSSFCell xssfRow) {if (xssfRow != null) {// if (xssfRow != null) {// xssfRow.setCellType(xssfRow.CELL_TYPE_STRING);// }if (xssfRow.getCellType() == xssfRow.CELL_TYPE_BOOLEAN) {return String.valueOf(xssfRow.getBooleanCellValue());} else if (xssfRow.getCellType() == xssfRow.CELL_TYPE_NUMERIC) {String result = "";if (xssfRow.getCellStyle().getDataFormat() == 22) {// 处理⾃定义⽇期格式:m⽉d⽇(通过判断单元格的格式id解决,id的值是58)SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");double value = xssfRow.getNumericCellValue();Date date = ermodel.DateUtil.getJavaDate(value);result = sdf.format(date);} else {double value = xssfRow.getNumericCellValue();CellStyle style = xssfRow.getCellStyle();DecimalFormat format = new DecimalFormat();String temp = style.getDataFormatString();// 单元格设置成常规if (temp.equals("General")) {format.applyPattern("#");}result = format.format(value);}return result;} else {return String.valueOf(xssfRow.getStringCellValue());}} elsereturn "0";}Java操作Excel中XSSFCell.CELL_TYPE_BOOLEAN、BOOLEAN、NUMERIC⽆定义解决⽅法错误原因:jar包版本更新,官⽅改动;解决⽅法:导⼊CellType包import ermodel.CellType使⽤CellType.BOOLEAN代替XSSFCell.CELL_TYPE_BOOLEAN使⽤CellType.NUMBERIC代替XSSFCell.CELL_TYPE_NUMBERIC。
POI读取带有公式的Excel单元格在读取带有公式的Excel单元格时,我们需要使用相关的库或框架来解析Excel文件,并获取其中的公式和计算结果。
常用的Python库之一是openpyxl。
该库可以用来读取和修改Excel 文件,并且它支持解析公式并获取其计算结果。
下面是一个示例代码,展示了如何使用openpyxl读取带有公式的Excel单元格。
首先,我们需要安装openpyxl库。
可以使用pip命令在命令行中执行以下命令进行安装:```pip install openpyxl```接下来,我们可以使用openpyxl库来读取Excel文件。
假设我们有一个名为"example.xlsx"的Excel文件,并且要读取其中的一个带有公式的单元格。
可以使用以下代码来实现:```pythonimport openpyxl# 打开Excel文件workbook = openpyxl.load_workbook('example.xlsx')#获取第一个工作表worksheet = workbook.active#获取带有公式的单元格cell_with_formula = worksheet['A1']#打印单元格的值和公式print('值:', cell_with_formula.value)print('公式:', cell_with_formula._value)#获取公式的计算结果calculated_value = cell_with_formula._calculated_valueprint('计算结果:', calculated_value)```在上述代码中,我们首先打开了Excel文件"example.xlsx"并获取了其中的第一个工作表。
然后,我们选择了一个带有公式的单元格"A1"并打印了它的值和公式。
easypoi解析excel例子本文将介绍如何使用easypoi解析Excel文件,并给出一个简单的例子。
easypoi是一个基于poi的Java解决方案,可以简化Excel 的读写操作。
通过easypoi,我们可以快速地将Excel文件转换为Java 对象,以便进行后续处理。
下面是一个简单的例子,演示如何使用easypoi解析Excel文件。
首先,我们需要添加easypoi的依赖包。
在Maven项目中,可以在pom.xml文件中添加以下依赖:```<dependency><groupId>cn.afterturn</groupId><artifactId>easypoi-base</artifactId><version>3.0.0</version></dependency>```接下来,我们需要创建一个Java对象来存储Excel文件的数据。
假设我们要解析的Excel文件包含以下信息:| 姓名 | 年龄 | 性别 || ---- | ---- | ---- || 张三 | 20 | 男 || 李四 | 22 | 女 || 王五 | 25 | 男 |我们可以定义一个Student类来存储这些数据:```public class Student {private String name;private int age;private String gender;// getters and setters}```接下来,我们可以使用easypoi来解析Excel文件。
假设我们已经将Excel文件保存在了D盘的test.xlsx文件中。
以下是解析Excel 文件的代码:```File file = new File('D:/test.xlsx');Workbook workbook = WorkbookFactory.create(file);Sheet sheet = workbook.getSheetAt(0);List<Student> students =ExcelUtils.getInstance().readExcel2Objects(sheet, Student.class);```以上代码首先创建一个File对象,表示要解析的Excel文件。
POI_Excel表格数据导⼊导出实例--⽀持xlsxlsx格式⼀、Excel导⼊数据库实例 注意:xlsx格式需导⼊xmlbeans包,否则会报错,相关jar下载地址:1.后台controller实例代码:1/**2 * 从EXCEL导⼊到数据库3*/4 @RequestMapping(value="/readCardExcel")5public ModelAndView readCourseExcel(6 @RequestParam(value="excel",required=false) MultipartFile file7 ) throws Exception{8 ModelAndView mv = this.getModelAndView();9 PageData pd = new PageData();10int saveSum=0,updateSum=0,errorSum=0; //保存成功导⼊的数11 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");12if (null != file && !file.isEmpty()) {13 String filePath = PathUtil.getClasspath() + Const.FILEPATHFILE; //⽂件上传路径14 String fileName = FileUpload.fileUp(file, filePath, "cardexcel"); //执⾏上传1516 List<PageData> listPd = (List)ObjectExcelRead.readCardExcel(filePath, fileName, 1, 0, 0); //执⾏读EXCEL操作,读出的数据导⼊List 1:从第2⾏开始;0:从第A列开始;0:第0个sheet 1718/**19 * var0 :名称20 * var1 :账款21 * var2 :款率22 * var3 :备注23*/24for(int i=0;i<listPd.size();i++){25 String var0=listPd.get(i).getString("var0");26 String var1=listPd.get(i).getString("var1");27 String reg = "^[0-9]+(.[0-9]+)?$";28//账款不是数字类型,则跳过29if(!var1.matches(reg) && !(var1.contains("E") || var1.contains("e"))){30continue;31 }32 String var2=listPd.get(i).getString("var2");33 String var3=listPd.get(i).getString("var3");34 pd.put("name", var0);35 pd.put("balance",var1);36 pd.put("ratio",var2);37 pd.put("updateTime",sdf.format(new Date()));38//查询名称是否已存在账款,存在则更新39 PageData pdd=receivablesService.selectReceivables(pd);40if(pdd != null){41int updateResult=receivablesService.updateReceivables(pd);42 updateSum=updateResult==1?updateSum+updateResult:updateResult+0;43 errorSum=updateResult==1?errorSum+0:errorSum+1;44 }else{45int saveResult=receivablesService.saveReceivables(pd);46 saveSum=saveResult==1?saveSum+saveResult:saveSum+0;47 errorSum=saveResult==1?errorSum+0:errorSum+1;48 }4950 }51/*存⼊数据库操作======================================*/5253 mv.addObject("msg","保存成功 " +saveSum+ " 条,更新"+updateSum+"条,失败:"+errorSum+"条");54 }5556 mv.setViewName("company/saveReceivables_result");57return mv;58 }2.类FileUpload:1package com.credit.util;23import java.io.File;4import java.io.IOException;5import java.io.InputStream;67import mons.io.FileUtils;8import org.springframework.web.multipart.MultipartFile;910/**11 * 上传⽂件13 * @version14*/15public class FileUpload {1617/**18 * @param file //⽂件对象19 * @param filePath //上传路径20 * @param fileName //⽂件名21 * @return⽂件名22*/23public static String fileUp(MultipartFile file, String filePath, String fileName){24 String extName = ""; // 扩展名格式:25try {26if (file.getOriginalFilename().lastIndexOf(".") >= 0){27 extName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));28 }29 copyFile(file.getInputStream(), filePath, fileName+extName).replaceAll("-", "");30 } catch (IOException e) {31 System.out.println(e);32 }33return fileName+extName;34 }3536/**37 * 写⽂件到当前⽬录的upload⽬录中38 *39 * @param in40 * @param fileName41 * @throws IOException42*/43private static String copyFile(InputStream in, String dir, String realName)44throws IOException {45 File file = new File(dir, realName);46if (!file.exists()) {47if (!file.getParentFile().exists()) {48 file.getParentFile().mkdirs();49 }50 file.createNewFile();51 }52 FileUtils.copyInputStreamToFile(in, file);53return realName;54 }55 }3.读取Excel数据关键代码:readCardExcel1/**import java.util.Date;import java.util.List;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import ermodel.HSSFCell;import ermodel.HSSFCellStyle;import ermodel.HSSFFont;import ermodel.HSSFSheet;import ermodel.HSSFWorkbook;import org.springframework.web.servlet.view.document.AbstractExcelView;import com.util.PageData;import com.util.Tools;2 * 读取Excel表格内容----⽀持xlsx格式和xls格式3 * @param filepath //⽂件路径4 * @param filename //⽂件名5 * @param startrow //开始⾏号6 * @param startcol //开始列号7 * @param sheetnum //sheet8 * @return list9*/10public static List<Object> readCardExcel(String filepath, String filename, int startrow, int startcol, int sheetnum) {11 List<Object> varList = new ArrayList<Object>();1213try {14 File target = new File(filepath, filename);15 FileInputStream fi = new FileInputStream(target);16 String suffix=filename.substring(stIndexOf(".")+1); //获取⽂件后缀名17if("xlsx".equals(suffix)){ //.xlsx格式读取18 XSSFWorkbook xwb = new XSSFWorkbook(fi); //利⽤poi读取excel⽂件流19 XSSFSheet sheet = xwb.getSheetAt(sheetnum); //读取sheet的第⼀个⼯作表20// HSSFWorkbook wb = new HSSFWorkbook(fi);21// HSSFSheet sheet = wb.getSheetAt(sheetnum); //sheet 从0开始22int rowNum = sheet.getLastRowNum() + 1; //取得最后⼀⾏的⾏号2324for (int i = startrow; i < rowNum; i++) { //⾏循环开始2526 PageData varpd = new PageData();27 XSSFRow row = sheet.getRow(i); //⾏28int cellNum = row.getLastCellNum(); //每⾏的最后⼀个单元格位置2930for (int j = startcol; j < cellNum; j++) { //列循环开始3132 XSSFCell cell = row.getCell(Short.parseShort(j + ""));33 String cellValue = null;34if (null != cell) {35switch (cell.getCellType()) { // 判断excel单元格内容的格式,并对其进⾏转换,以便插⼊数据库 36case 0:37 DecimalFormat df = new DecimalFormat("0.0000");38 cellValue = df.format(cell.getNumericCellValue());39// cellValue = String.valueOf(cell.getNumericCellValue());40break;41case 1:42 cellValue = cell.getStringCellValue();43break;44case 2:45 cellValue = cell.getNumericCellValue() + "";46break;47case 3:48 cellValue = "";49break;50case 4:51 cellValue = String.valueOf(cell.getBooleanCellValue());52break;53case 5:54 cellValue = String.valueOf(cell.getErrorCellValue());55break;56 }57 } else {58 cellValue = "";59 }6061 varpd.put("var"+j, cellValue);6263 }64 varList.add(varpd);65 }66 }else if("xls".equals(suffix)){ //.xls格式读取67// XSSFWorkbook xwb = new XSSFWorkbook(fi);68// XSSFSheet sheet = xwb.getSheetAt(sheetnum); //读取sheet的第⼀个⼯作表69 HSSFWorkbook wb = new HSSFWorkbook(fi); //利⽤poi读取excel⽂件流70 HSSFSheet sheet = wb.getSheetAt(sheetnum); //sheet 从0开始71int rowNum = sheet.getLastRowNum() + 1; //取得最后⼀⾏的⾏号7273for (int i = startrow; i < rowNum; i++) { //⾏循环开始7475 PageData varpd = new PageData();76//XSSFRow row = sheet.getRow(i); //⾏77 HSSFRow row = sheet.getRow(i); //⾏78int cellNum = row.getLastCellNum(); //每⾏的最后⼀个单元格位置7980for (int j = startcol; j < cellNum; j++) { //列循环开始8182//XSSFCell cell = row.getCell(Short.parseShort(j + ""));83 HSSFCell cell = row.getCell(Short.parseShort(j + ""));84 String cellValue = null;85if (null != cell) {86switch (cell.getCellType()) { // 判断excel单元格内容的格式,并对其进⾏转换,以便插⼊数据库 87case 0:88 DecimalFormat df = new DecimalFormat("0");89 cellValue = df.format(cell.getNumericCellValue());90// cellValue = String.valueOf((int) cell.getNumericCellValue());91break;92case 1:93 cellValue = cell.getStringCellValue();94break;95case 2:96 cellValue = cell.getNumericCellValue() + "";97break;98case 3:99 cellValue = "";100break;101case 4:102 cellValue = String.valueOf(cell.getBooleanCellValue());103break;104case 5:105 cellValue = String.valueOf(cell.getErrorCellValue());106break;107 }108 } else {109 cellValue = "";110 }111112 varpd.put("var"+j, cellValue);113114 }115 varList.add(varpd);116 }117 }118119120 } catch (Exception e) {121 System.out.println(e);122 }123124return varList;125 }3.导出Excel实例 1.controller代码实例1/*2 * 导出到excel3 * @return4*/5 @RequestMapping(value="/excel")6public ModelAndView exportExcel(){7 logBefore(logger, "导出到excel");8 ModelAndView mv = new ModelAndView();9 PageData pd = new PageData();10 pd = this.getPageData();11try{12 Map<String,Object> dataMap = new HashMap<String,Object>();13 List<String> titles = new ArrayList<String>();14 titles.add("课程名称"); //115 titles.add("课程分类"); //216 titles.add("作⽤"); //317 titles.add("⽬标"); //418 titles.add("课程开始时间"); //519 titles.add("课程结束时间"); //620 titles.add("课程价格"); //721 titles.add("V卡价格"); //822 titles.add("是否结束"); //923 titles.add("课程满⾜⼈数"); //1024 titles.add("课程已预约⼈数"); //1125 titles.add("课程地点"); //1226 titles.add("课程视频地址"); //1327 titles.add("课程介绍"); //1428 titles.add("课程图像"); //1529 titles.add("课程注意事项"); //1630 titles.add("课程群⼆维码地址"); //1731 titles.add("备注"); //1832 dataMap.put("titles", titles);33 List<PageData> varOList = courseService.listAll(pd);34 List<PageData> varList = new ArrayList<PageData>();35for(int i=0;i<varOList.size();i++){36 PageData vpd = new PageData();37 vpd.put("var1", varOList.get(i).getString("COURSENAME")); //138 vpd.put("var2", varOList.get(i).getString("CLASSIFY")); //239 vpd.put("var3", varOList.get(i).getString("EFFECT")); //340 vpd.put("var4", varOList.get(i).getString("TARGET")); //441 vpd.put("var5", varOList.get(i).getString("COURSETIMEB")); //542 vpd.put("var6", varOList.get(i).getString("COURSETIMEE")); //643 vpd.put("var7", varOList.get(i).getString("COURSEPRICE")); //744 vpd.put("var8", varOList.get(i).getString("VPRICE")); //845 vpd.put("var9", varOList.get(i).get("HASOVER").toString()); //946 vpd.put("var10", varOList.get(i).get("COURSEFULLNUMBER").toString()); //1047 vpd.put("var11", varOList.get(i).get("COURSEORDERNUMBER").toString()); //1148 vpd.put("var12", varOList.get(i).getString("COURSEADD")); //1249 vpd.put("var13", varOList.get(i).getString("COURSEVIDEO")); //1350 vpd.put("var14", varOList.get(i).getString("COURSEINTRO")); //1451 vpd.put("var15", varOList.get(i).getString("COUSERPIC")); //1552 vpd.put("var16", varOList.get(i).getString("COURSEATTENTION")); //1653 vpd.put("var17", varOList.get(i).getString("COURSEQRCODE")); //1754 vpd.put("var18", varOList.get(i).getString("REMARK")); //1855 varList.add(vpd);56 }57 dataMap.put("varList", varList);58 ObjectExcelView erv = new ObjectExcelView();59 mv = new ModelAndView(erv,dataMap);60 } catch(Exception e){61 logger.error(e.toString(), e);62 }63return mv;64 } 2.类ObjectExcelView1package com.util;23import java.util.Date;4import java.util.List;5import java.util.Map;67import javax.servlet.http.HttpServletRequest;8import javax.servlet.http.HttpServletResponse;910import ermodel.HSSFCell;11import ermodel.HSSFCellStyle;12import ermodel.HSSFFont;13import ermodel.HSSFSheet;14import ermodel.HSSFWorkbook;15import org.springframework.web.servlet.view.document.AbstractExcelView;1617import com.util.PageData;18import com.util.Tools;19/**20* 导⼊到EXCEL21* 类名称:ObjectExcelView.java22* 类描述:23* @author capv24* 作者单位:25* 联系⽅式:26* @version 1.027*/28public class ObjectExcelView extends AbstractExcelView{2930 @Override31protected void buildExcelDocument(Map<String, Object> model,32 HSSFWorkbook workbook, HttpServletRequest request,33 HttpServletResponse response) throws Exception {34// TODO Auto-generated method stub35 Date date = new Date();36 String filename = Tools.date2Str(date, "yyyyMMddHHmmss");37 HSSFSheet sheet;38 HSSFCell cell;39 response.setContentType("application/octet-stream");40 response.setHeader("Content-Disposition", "attachment;filename="+filename+".xls");41 sheet = workbook.createSheet("sheet1");4243 List<String> titles = (List<String>) model.get("titles");44int len = titles.size();45 HSSFCellStyle headerStyle = workbook.createCellStyle(); //标题样式46 headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);47 headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);48 HSSFFont headerFont = workbook.createFont(); //标题字体49 headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);50 headerFont.setFontHeightInPoints((short)11);51 headerStyle.setFont(headerFont);52short width = 20,height=25*20;53 sheet.setDefaultColumnWidth(width);54for(int i=0; i<len; i++){ //设置标题55 String title = titles.get(i);56 cell = getCell(sheet, 0, i);57 cell.setCellStyle(headerStyle);58 setText(cell,title);59 }60 sheet.getRow(0).setHeight(height);6162 HSSFCellStyle contentStyle = workbook.createCellStyle(); //内容样式63 contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);64 List<PageData> varList = (List<PageData>) model.get("varList");65int varCount = varList.size();66for(int i=0; i<varCount; i++){67 PageData vpd = varList.get(i);68for(int j=0;j<len;j++){69 String varstr = vpd.getString("var"+(j+1)) != null ? vpd.getString("var"+(j+1)) : "";70 cell = getCell(sheet, i+1, j);71 cell.setCellStyle(contentStyle);72 setText(cell,varstr);73 }7475 }7677 }7879 }。
POI对Excel⾃定义⽇期格式的读取(实例代码)⽤POI读取Excel数据:(版本号:POI3.7)1、读取Excelprivate List<String[]> rosolveFile(InputStream is, String suffix,int startRow) throws IOException, FileNotFoundException {Workbook xssfWorkbook = null;if ("xls".equals(suffix)) {xssfWorkbook = new HSSFWorkbook(is);} else if ("xlsx".equals(suffix)) {xssfWorkbook = new XSSFWorkbook(is);}Sheet xssfSheet = xssfWorkbook.getSheetAt(0);if (xssfSheet == null) {return null;}ArrayList<String[]> list = new ArrayList<String[]>();int lastRowNum = xssfSheet.getLastRowNum();for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {if (xssfSheet.getRow(rowNum) != null) {Row xssfRow = xssfSheet.getRow(rowNum);short firstCellNum = xssfRow.getFirstCellNum();short lastCellNum = xssfRow.getLastCellNum();if (firstCellNum != lastCellNum) {String[] values = new String[lastCellNum];for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) {Cell xssfCell = xssfRow.getCell(cellNum);if (xssfCell == null) {values[cellNum] = "";} else {values[cellNum] = parseExcel(xssfCell);}}list.add(values);}}}return list;}2、Excel数据处理:Excel存储⽇期、时间均以数值类型进⾏存储,读取时POI先判断是是否是数值类型,再进⾏判断转化1、数值格式(CELL_TYPE_NUMERIC):1.纯数值格式:getNumericCellValue() 直接获取数据2.⽇期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含⽂字的⽇期格式1).判断是否是⽇期格式:HSSFDateUtil.isCellDateFormatted(cell)2).判断是⽇期或者时间cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")OR: cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")3.⾃定义⽇期格式:处理yyyy年m⽉d⽇,h时mm分,yyyy年m⽉等含⽂字的⽇期格式判断cell.getCellStyle().getDataFormat()值,解析数值格式yyyy年m⽉d⽇----->31m⽉d⽇---->58h时mm分--->322、字符格式(CELL_TYPE_STRING):直接获取内容private String parseExcel(Cell cell) {String result = new String();switch (cell.getCellType()) {case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理⽇期格式、时间格式SimpleDateFormat sdf = null;if (cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")) {sdf = new SimpleDateFormat("HH:mm");} else {// ⽇期sdf = new SimpleDateFormat("yyyy-MM-dd");}Date date = cell.getDateCellValue();result = sdf.format(date);} else if (cell.getCellStyle().getDataFormat() == 58) {// 处理⾃定义⽇期格式:m⽉d⽇(通过判断单元格的格式id解决,id的值是58) SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");double value = cell.getNumericCellValue();Date date = ermodel.DateUtil.getJavaDate(value);result = sdf.format(date);} else {double value = cell.getNumericCellValue();CellStyle style = cell.getCellStyle();DecimalFormat format = new DecimalFormat();String temp = style.getDataFormatString();// 单元格设置成常规if (temp.equals("General")) {format.applyPattern("#");}result = format.format(value);}break;case HSSFCell.CELL_TYPE_STRING:// String类型result = cell.getRichStringCellValue().toString();break;case HSSFCell.CELL_TYPE_BLANK:result = "";default:result = "";break;}return result;}*万能处理⽅案:所有⽇期格式都可以通过getDataFormat()值来判断yyyy-MM-dd----- 14yyyy年m⽉d⽇--- 31yyyy年m⽉------- 57m⽉d⽇ ---------- 58HH:mm----------- 20h时mm分 ------- 32//1、判断是否是数值格式if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){short format = cell.getCellStyle().getDataFormat();SimpleDateFormat sdf = null;if(format == 14 || format == 31 || format == 57 || format == 58){//⽇期sdf = new SimpleDateFormat("yyyy-MM-dd");}else if (format == 20 || format == 32) {//时间sdf = new SimpleDateFormat("HH:mm");}double value = cell.getNumericCellValue();Date date = ermodel.DateUtil.getJavaDate(value);result = sdf.format(date);}以上这篇POI对Excel⾃定义⽇期格式的读取(实例代码)就是⼩编分享给⼤家的全部内容了,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
POI操作Excel详解,读取xls和xlsx格式的⽂件package org.ian.webutil;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import jxl.Cell;import jxl.Sheet;import jxl.Workbook;import jxl.read.biff.BiffException;import mons.logging.Log;import mons.logging.LogFactory;import ermodel.XSSFCell;import ermodel.XSSFRow;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;public class ReadExcel {private static final Log log = LogFactory.getLog(ReadExcel.class);/*** 判断后缀分批⼊*/private static void parseSUCCEXX(String realPath,String fileName){String [] pfix= fileName.split("\\.");String suffix = pfix[pfix.length -1];if( suffix!=null&&!suffix.equals("")&&suffix.equals("xls")){System.out.println("xls");// jxl⽅法可读取.xls格式jlxExcel(realPath,fileName);}else if(suffix .equals("xlsx")){System.out.println("xlsx");// poi⽅法可读取Excel2007即.xlsx格式poiExcel(realPath,fileName);}}/*** 读取 xls JXL* @param realPath* @param fileName*/private static void jlxExcel(String realPath,String fileName){//===============jlx⽅法=================try{File fileDes = new File(realPath);InputStream str = new FileInputStream(fileDes);// 构造Workbook(⼯作薄)对象Workbook rwb=Workbook.getWorkbook(str);Sheet rs=rwb.getSheet(0);//获取第⼀张⼯作表int rsRows=rs.getRows();//获取Sheet表中所包含的总⾏数int rsCols=rs.getColumns();//获取Sheet表中所包含的总列数("========⾏========"+rsRows+"=====列========"+rsCols);for(int i=1;i<rsRows;i++){//读取⾏("========执⾏第========"+i+"⾏");for(int j=0;j<rsCols;j++){("========执⾏第========"+j+"列");Cell coo=rs.getCell(j, i);//单元格定位列,再定位⾏("========coo========"+coo);String strc=coo.getContents();//读取内容("========读取内容strc========"+strc);System.out.println("⽂件"+fileName+"的内容为:"+strc);}}rwb.close();}catch(FileNotFoundException e) {e.printStackTrace();} catch(BiffException e) {e.printStackTrace();} catch(IOException e) {e.printStackTrace();}//==========读取excel⽂件内容=结束=====================}/*** POI读取 xlsx* @param realPath* @param fileName*/private static void poiExcel(String realPath,String fileName){try{File fileDes = new File(realPath);InputStream str = new FileInputStream(fileDes);XSSFWorkbook xwb = new XSSFWorkbook(str); //利⽤poi读取excel⽂件流 XSSFSheet st = xwb.getSheetAt(0); //读取sheet的第⼀个⼯作表int rows=st.getLastRowNum();//总⾏数int cols;//总列数("========⾏========"+rows);for(int i=0;i<rows;i++){XSSFRow row=st.getRow(i);//读取某⼀⾏数据if(row!=null){//获取⾏中所有列数据cols=row.getLastCellNum();("========⾏========"+rows+"=====列========"+cols); for(int j=0;j<cols;j++){XSSFCell cell=row.getCell(j);if(cell==null){System.out.print(" ");}else{//判断单元格的数据类型switch(cell.getCellType()) {case XSSFCell.CELL_TYPE_NUMERIC: // 数字System.out.print(cell.getNumericCellValue() + " ");break;case XSSFCell.CELL_TYPE_STRING: // 字符串System.out.print(cell.getStringCellValue() + " ");break;case XSSFCell.CELL_TYPE_BOOLEAN: // BooleanSystem.out.println(cell.getBooleanCellValue() + " ");break;case XSSFCell.CELL_TYPE_FORMULA: // 公式System.out.print(cell.getCellFormula() + " ");break;case XSSFCell.CELL_TYPE_BLANK: // 空值System.out.println("");break;case XSSFCell.CELL_TYPE_ERROR: // 故障System.out.println("故障");break;default:System.out.print("未知类型 ");break;}}}}}}catch(IOException e){e.printStackTrace();}}/*** test* @param args*/public static void main(String[] args) { String fileName = "banShot.xlsx";String realPath = "d:/"+fileName;parseSUCCEXX(realPath, fileName); }}。
poi多sheet解析-回复如何解析包含多个sheet的poi文件。
[poi多sheet解析],以中括号内的内容为主题,写一篇1500-2000字文章,一步一步回答。
POI(Poor Obfuscation Implementation)是一个流行的Java库,用于处理Microsoft Office文档,例如Excel、Word和PowerPoint。
在Excel中,一个工作簿(Workbook)可以包含多个工作表(Worksheet),也称为sheets。
这篇文章将详细介绍如何使用POI库来解析包含多个sheets的Excel文件。
第一步:导入POI库首先,我们需要在Java项目中导入POI库的相关依赖。
POI库提供了多个版本,我们选择与我们项目匹配的版本进行导入。
我们可以在Maven 或Gradle等构建工具的配置文件中添加POI库的依赖,或者手动下载并导入POI库的JAR文件。
导入POI库后,我们就可以使用POI提供的类和方法来操作Excel文件了。
第二步:创建工作簿对象在使用POI解析Excel文件之前,我们需要先创建一个工作簿(Workbook)对象,该对象表示整个Excel文件。
可以根据Excel文件的类型(.xls或.xlsx)选择合适的工作簿类型。
例如,如果要解析一个.xlsx文件,我们可以使用XSSFWorkbook类来创建工作簿对象:Workbook workbook = new XSSFWorkbook();第三步:读取工作表接下来,我们需要读取Excel文件中的工作表。
POI提供了多种方法来获取工作表对象,根据需要选择合适的方法即可。
首先,我们可以根据工作表的索引来获取工作表对象。
工作表的索引从0开始,依次递增,表示工作表在工作簿中的位置。
Sheet sheet = workbook.getSheetAt(0);上述代码将获取工作簿中第一个工作表的对象。
除了根据索引获取工作表,还可以根据工作表的名称来获取工作表对象。
package org.lm.demo.parse;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Date;
import ermodel.HSSFCell; import ermodel.HSSFDateUtil; import ermodel.HSSFRow; import ermodel.HSSFSheet; import ermodel.HSSFWorkbook;
public class ExcelReader {
private BufferedReader reader = null;
private String filetype;
private InputStream is = null;
private int currSheet;
private int currPosition;
private int numOfSheets;
HSSFWorkbook wb = null;
private static String EXCEL_LINE_DELIMITER = "";
@SuppressWarnings("unused")
private static int MAX_EXCEL_COLUMNS = 64;
public ExcelReader(String inputfile) throws IOException, Exception {
if (inputfile == null || inputfile.trim().equals("")) {
throw new IOException("no input file specified");
}
this.filetype = inputfile.substring(stIndexOf(".") + 1);
currPosition = 0;
currSheet = 0;
is = new FileInputStream(inputfile);
if (filetype.equalsIgnoreCase("txt")) {
reader = new BufferedReader(new InputStreamReader(is));
} else if (filetype.equalsIgnoreCase("xls")) {
wb = new HSSFWorkbook(is);
numOfSheets = wb.getNumberOfSheets();
} else {
throw new Exception("file type not supported");
}
}
public String readLine() throws IOException {
if (filetype.equalsIgnoreCase("txt")) {
String str = reader.readLine();
while (str.trim().equals("")) {
str = reader.readLine();
}
return str;
} else if (filetype.equalsIgnoreCase("xls")) {
HSSFSheet sheet = wb.getSheetAt(currSheet);
if (currPosition > sheet.getLastRowNum()) {
currPosition = 0;
while (currSheet != numOfSheets - 1) {
sheet = wb.getSheetAt(currSheet + 1);
if (currPosition == sheet.getLastRowNum()) {
currSheet++;
continue;
} else {
int row = currPosition;
currPosition++;
return getLine(sheet, row);
}
}
return null;
}
int row = currPosition;
currPosition++;
return getLine(sheet, row);
}
return null;
}
@SuppressWarnings("deprecation")
public String getLine(HSSFSheet sheet, int row) { HSSFRow rowline = sheet.getRow(row);
StringBuffer buffer = new StringBuffer();
int filledColumns = rowline.getLastCellNum();
HSSFCell cell = null;
for (int i = 0; i < filledColumns; i++) {
cell = rowline.getCell((short) i);
String cellvalue = null;
if (cell != null) {
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: {
if (HSSFDateUtil.isCellDateFormatted(cell)) {
@SuppressWarnings("unused")
Date date = cell.getDateCellV alue();
cellvalue = cell.getDateCellValue().toLocaleString();
} else {
Integer num = new Integer((int) cell
.getNumericCellValue());
cellvalue = String.valueOf(num);
}
break;
}
case HSSFCell.CELL_TYPE_STRING:
cellvalue = cell.getStringCellValue().replaceAll("'", "''");
break;
default:
cellvalue = " ";
}
} else {
cellvalue = "";
}
buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER);
}
return buffer.toString();
}
public void close() {
if (is != null) {
try {
is.close();
} catch (IOException e) {
is = null;
}
}
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
}
}
}
public static void main(String[] args) {
try {
ExcelReader readexcel = new ExcelReader("D:" + File.separator
+ "test.xls");
String line = readexcel.readLine();
while (line != null) {
System.out.println(line);
line = readexcel.readLine();
}
readexcel.close();
} catch (Exception e) {
System.out.println(e.toString());
}
}
}。