/** * 将Excel表格转换成TXT文档 * @author wb-quesj * @version 1.0 */ public class ExcelReader { // 创建文件输入流 private BufferedReader reader = null; // 文件类型 private String filetype; // 文件二进制输入流 private InputStream is = null; // 当前的Sheet private int currSheet; // 当前位置 private int currPosition; // Sheet数量 private int numOfSheets; // HSSFWorkbook HSSFWorkbook workbook = null; // 设置Cell之间以空格分割 private static String EXCEL_LINE_DELIMITER = ","; // 设置最大列数 private static int MAX_EXCEL_COLUMNS = 64; // 设置时间格式 private final static DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd hhmmss"); // 构造函数创建一个ExcelReader public ExcelReader(FileItem item) throws IOException, Exception { String inputfile = item.getName(); // 判断参数是否为空或没有意义 if (inputfile == null || inputfile.trim().equals("")) { throw new IOException("no input file specified"); } // 取得文件名的后缀名赋值给filetype this.filetype = inputfile.substring(inputfile.lastIndexOf(".") + 1); // 设置开始行为0 currPosition = 0; // 设置当前位置为0 currSheet = 0; // 创建文件输入流 is = item.getInputStream(); // 判断文件格式 if (filetype.equalsIgnoreCase("xls")||filetype.equalsIgnoreCase("xlsx")) { // 如果是Excel文件则创建HSSFWorkbook读取 workbook = new HSSFWorkbook(is); // 设置Sheet数 numOfSheets = workbook.getNumberOfSheets(); } else { throw new Exception("File Type Not Supported"); } } // 函数readLine读取文件的一行 public String readLine() throws IOException { // 如果是XLS文件则通过POI提供的API读取文件 if (filetype.equalsIgnoreCase("xls")) { // 根据currSheet值获得当前的sheet HSSFSheet sheet = workbook.getSheetAt(currSheet); // 判断当前行是否到但前Sheet的结尾 // System.out.println(sheet.getLastRowNum()); if (currPosition > sheet.getLastRowNum()) { // 当前行位置清零 currPosition = 0; // 判断是否还有Sheet if (currSheet != numOfSheets - 1) { currSheet++; // 得到下一张Sheet sheet = workbook.getSheetAt(currSheet); } else { return null; } } // 获取当前行数 int row = currPosition; currPosition++; // 读取当前行数据 return getLine(sheet, row); } return null; } // 函数getLine返回Sheet的一行数据 private String getLine(HSSFSheet sheet, int row) { // 根据行数取得Sheet的一行 HSSFRow rowline = sheet.getRow(row); // 创建字符创缓冲区 StringBuffer buffer = new StringBuffer(); // 获取当前行的列数 int filledColumns; try { filledColumns = rowline.getLastCellNum(); } catch (NullPointerException e) { return null; } HSSFCell cell = null; // 循环遍历所有列 for (int i = 0; i < filledColumns; i++) { // 取得当前Cell cell = rowline.getCell((short) i); String cellvalue = null; if (cell != null) { // 判断当前Cell的Type switch (cell.getCellType()) { // 如果当前Cell的Type为NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: { // 判断当前的cell是否为Date if (HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是Date类型则,取得该Cell的Date值 Date date = cell.getDateCellValue(); // 把Date转换成本地格式的字符串 cellvalue = DATE_FORMAT.format(date); } // 如果是纯数字 else { // 取得当前Cell的数值 Integer num = new Integer((int) cell .getNumericCellValue()); cellvalue = String.valueOf(num); } break; } // 如果当前Cell的Type为STRIN case HSSFCell.CELL_TYPE_STRING: // 取得当前的Cell字符串 cellvalue = cell.getRichStringCellValue().toString() .replaceAll("'", "''"); break; // 默认的Cell值 default: cellvalue = ""; } } else { cellvalue = ""; } // 在每个字段之间插入分割符 if (!"".equals(cellvalue) && cellvalue.trim() != null) { buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER); } } // 以字符串返回该行的数据 return buffer.toString(); } // close函数执行流的关闭操作 public void close() { // 如果is不为空,则关闭InputSteam文件输入流 if (is != null) { try { is.close(); } catch (IOException e) { is = null; } } // 如果reader不为空则关闭BufferedReader文件输入流 if (reader != null) { try { reader.close(); } catch (IOException e) { reader = null; } } } }
public class XSSFExcelReader { // 创建文件输入流 private BufferedReader reader = null; // 文件类型 private String filetype; // 文件二进制输入流 private InputStream is = null; // 当前的Sheet private int currSheet; // 当前位置 private int currPosition; // Sheet数量 private int numOfSheets; // XSSFWorkbook XSSFWorkbook workbook = null; // 设置Cell之间以空格分割 private static String EXCEL_LINE_DELIMITER = ","; // 设置最大列数 private static int MAX_EXCEL_COLUMNS = 64; // 设置时间格式 private final static DateFormat DATE_FORMAT = new SimpleDateFormat("yyyyMMdd hhmmss"); // 构造函数创建一个ExcelReader public XSSFExcelReader(String inputfile) throws IOException, Exception { // 判断参数是否为空或没有意义 if (inputfile == null || inputfile.trim().equals("")) { throw new IOException("no input file specified"); } // 取得文件名的后缀名赋值给filetype this.filetype = inputfile.substring(inputfile.lastIndexOf(".") + 1); // 设置开始行为0 currPosition = 0; // 设置当前位置为0 currSheet = 0; // 创建文件输入流 is = new FileInputStream(inputfile); // 判断文件格式 if (filetype.equalsIgnoreCase("xlsx") || filetype.equalsIgnoreCase("xlsxx")) { // 如果是Excel文件则创建HSSFWorkbook读取 workbook = new XSSFWorkbook(is); // 设置Sheet数 numOfSheets = workbook.getNumberOfSheets(); } else { throw new Exception("File Type Not Supported"); } } // 函数readLine读取文件的一行 public String readLine() throws IOException { // 如果是XLS文件则通过POI提供的API读取文件 if (filetype.equalsIgnoreCase("xlsx")) { // 根据currSheet值获得当前的sheet XSSFSheet sheet = workbook.getSheetAt(currSheet); // 判断当前行是否到但前Sheet的结尾 // System.out.println(sheet.getLastRowNum()); if (currPosition > sheet.getLastRowNum()) { // 当前行位置清零 currPosition = 0; // 判断是否还有Sheet if (currSheet != numOfSheets - 1) { currSheet++; // 得到下一张Sheet sheet = workbook.getSheetAt(currSheet); } else { return null; } } // 获取当前行数 int row = currPosition; currPosition++; // 读取当前行数据 return getLine(sheet, row); } return null; } // 函数getLine返回Sheet的一行数据 private String getLine(XSSFSheet sheet, int row) { // 根据行数取得Sheet的一行 XSSFRow rowline = sheet.getRow(row); // 创建字符创缓冲区 StringBuffer buffer = new StringBuffer(); // 获取当前行的列数 int filledColumns; try { filledColumns = rowline.getLastCellNum(); } catch (NullPointerException e) { return null; } XSSFCell cell = null; // 循环遍历所有列 for (int i = 0; i < filledColumns; i++) { // 取得当前Cell cell = rowline.getCell((short) i); String cellvalue = null; if (cell != null) { // 判断当前Cell的Type switch (cell.getCellType()) { // 如果当前Cell的Type为NUMERIC case XSSFCell.CELL_TYPE_NUMERIC: { // 判断当前的cell是否为Date XSSFCellStyle style = cell.getCellStyle(); int t = style.getDataFormat(); if (isInternalDateFormat(t)) { // 如果是Date类型则,取得该Cell的Date值 Date date = cell.getDateCellValue(); // 把Date转换成本地格式的字符串 cellvalue = DATE_FORMAT.format(date); } // 如果是纯数字 else { // 取得当前Cell的数值 Integer num = new Integer((int) cell .getNumericCellValue()); cellvalue = String.valueOf(num); } break; } // 如果当前Cell的Type为STRIN case XSSFCell.CELL_TYPE_STRING: // 取得当前的Cell字符串 cellvalue = cell.getRichStringCellValue().toString() .replaceAll("'", "''"); break; // 默认的Cell值 default: cellvalue = ""; } } else { cellvalue = ""; } // 在每个字段之间插入分割符 if (!"".equals(cellvalue) && cellvalue.trim() != null) { buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER); } } // 以字符串返回该行的数据 return buffer.toString(); } /** * given a format ID this will check whether the format represents an * internal date format or not. */ public boolean isInternalDateFormat(int format) { boolean retval = false; switch (format) { // Internal Date Formats as described on page 427 in // Microsoft Excel Dev's Kit... case 0x0e: case 0x0f: case 0x10: case 0x11: case 0x12: case 0x13: case 0x14: case 0x15: case 0x16: case 0x2d: case 0x2e: case 0x2f: retval = true; break; default: retval = false; break; } return retval; } // close函数执行流的关闭操作 public void close() { // 如果is不为空,则关闭InputSteam文件输入流 if (is != null) { try { is.close(); } catch (IOException e) { is = null; } } // 如果reader不为空则关闭BufferedReader文件输入流 if (reader != null) { try { reader.close(); } catch (IOException e) { reader = null; } } } }
使用范例
ExcelReader er = new ExcelReader(item); String line = er.readLine(); while (line != null) { count++; sb.append(line).append('\n'); line = er.readLine(); } er.close();
相关推荐
用poi操作excel2007时需要用到的jar包: poi项目的:1.poi-3.9-20121203.jar 2.poi-ooxml-3.9-20121203.jar 3.poi-ooxml-schemas-3.9-20121203.jar ...而操作excel2003时只需要导入poi的poi-3.9-20121203.jar即可。
在本文中,我们将重点讨论如何使用POI库来实现对Excel 2003和2007文件的兼容性操作。Excel 2003使用的是.BIFF(Binary Interchange File Format)格式,而Excel 2007及以上版本则引入了新的.OpenXML(.xlsx)格式,...
标题 "POI 生成EXCEL2007【含例子】" 涉及到的知识点主要集中在Apache POI库的使用上,这是一个强大的Java ...通过实践这些示例,开发者能够掌握如何利用Apache POI高效地生成和操作Excel 2007文件,从而提升工作效率。
### POI操作Excel2003与2007 #### 一、POI简介与基础知识 POI是Apache组织下的一个开源项目组件之一,它提供了API来处理Microsoft Office格式的文件,包括Excel、Word、PowerPoint等。本文将重点介绍如何使用POI...
接下来,我们将讨论如何使用Apache POI操作Excel 2007(.xlsx)文件的主要步骤: 1. **创建Workbook对象**:这是Excel工作簿的Java表示。你可以使用`XSSFWorkbook`类来创建一个新的Excel工作簿。 ```java import...
Poi读取Excel2003+Excel2007 Poi生成Excel2003 源码,调用 方法即可
在Java开发中,POI库被广泛用于生成、修改和读取Excel文档。本篇将深入探讨如何利用Apache POI来操作Excel模板,以及如何读取数据并将其填充到新生成的文件中,最终提供下载。 首先,你需要在项目中引入Apache POI...
在这个场景中,我们关注的是如何使用POI来创建、读取和操作Excel文档。在Web项目中,这种功能通常用于数据导入导出,报表生成,或者任何需要与用户交换表格数据的场景。 **POI生成Excel** 生成Excel文件主要涉及...
Java 使用Apache POI库操作Excel 2007文件详解 在Java开发中,处理Excel文件是一项常见的任务,特别是对于数据分析、数据导入导出或报表生成等场景。Apache POI是一个流行的开源库,它允许开发者读写Microsoft ...
标题 "简单poi导入excel2003 与2007" 暗示了这个压缩包中的内容可能涉及使用Apache POI库来处理不同版本的Excel文件,主要是Excel 2003和2007。Apache POI是Java中广泛使用的库,用于读取和写入Microsoft Office格式...
Apache POI是一个开源项目,提供了丰富的API,使得Java开发者能够轻松地与MS Office格式交互,包括XLS(Excel 97-2003)和XLSX(Excel 2007及以后的版本)。 标题中的"java通过poi操作excel jar包"指的是使用Apache...
java使用poi进行excel2003、excel2007导入,返回List[]>,实测可用 xbean-2.2.0.jar包 与 xmlbeans-2.3.0.jar包冲突 需删除xbean-2.2.0.jar包
### POI Excel知识点详解 #### 一、Jakarta POI简介与Apache POI的作用 Jakarta POI 是 Apache POI 的早期项目名称,它提供了一组 API 来...希望本文能够帮助您更好地理解和使用 Apache POI 进行 Excel 文件的操作。
Apache POI是一个流行的...以上就是关于使用Apache POI进行Excel表格导入和导出的基本概念和操作。通过熟练掌握这些知识,你可以轻松地实现Excel数据的读取、处理和写入,为数据分析、报表生成等场景提供强大的支持。
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,包括Excel 2003和2007版本的XLS和XLSX文件。这个库在Java开发环境中非常流行,因为它允许程序员创建、读取和修改Excel文档。在本文中,我们将...
综合以上,使用这个压缩包,开发者可以学习如何在Java环境中使用Apache POI库读取和操作Excel 2007的XLSX文件,同时也有示例代码和必要的依赖库作为参考。首先,需要将这些库添加到项目的类路径中,然后通过Apache ...
标题中的“poi操作excel案例”指的是使用Apache POI库来处理Excel文件的示例项目。Apache POI是一个开源的Java库,它允许开发者创建、修改和显示Microsoft Office格式的文件,包括Excel工作簿(XLS和XLSX)。在这个...
在Java编程领域,...总的来说,通过Apache POI库,开发者可以方便地对Excel文件进行各种操作,包括添加水印,从而提高文档的安全性和专业性。这个过程涉及到Java图形处理、Excel文件结构理解和POI API的熟练运用。
综上所述,"poi操作excel的Demo"应该包含了如何使用Apache POI创建、读取、修改Excel文件的示例代码,以及可能涉及的样式、公式和数据验证等进阶特性。通过学习这个Demo,开发者可以更好地理解和运用Apache POI进行...