package com.citics.crm.customerwidget.utils; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import org.apache.poi.xssf.usermodel.XSSFCell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi2.hssf.usermodel.HSSFCell; import org.apache.poi2.hssf.usermodel.HSSFRow; import org.apache.poi2.hssf.usermodel.HSSFSheet; import org.apache.poi2.hssf.usermodel.HSSFWorkbook; public class ExcelUtil { private ExcelUtil(){}; private static List<String> columns;//要解析excel中的列名 private static int sheetNum = 0;//要解析的sheet下标 /** * poi读取excle * @return */ public static String readExcel(File file){ StringBuilder retJson = new StringBuilder(); InputStream inStream = null; try { inStream = new FileInputStream(file); HSSFWorkbook workbook = new HSSFWorkbook(inStream); HSSFSheet sheet = workbook.getSheetAt(sheetNum);//获得表 int lastRowNum = sheet.getLastRowNum();//最后一行 retJson.append("["); for(int i = 0 ;i < lastRowNum;i++){ HSSFRow row = sheet.getRow(i);//获得行 String rowJson = readExcelRow(row); retJson.append(rowJson); if(i<lastRowNum-1) retJson.append(","); } retJson.append("]"); } catch (Exception e) { try { inStream = new FileInputStream(file); XSSFWorkbook workbook = new XSSFWorkbook(inStream); XSSFSheet sheet = workbook.getSheetAt(sheetNum); int lastRowNum = sheet.getLastRowNum();//最后一行 retJson.append("["); for(int i = 0 ;i < lastRowNum;i++){ XSSFRow row = sheet.getRow(i);//获得行 String rowJson = readExcelRow(row); retJson.append(rowJson); if(i<lastRowNum-1) retJson.append(","); } retJson.append("]"); } catch (IOException e1) { e1.printStackTrace(); } }finally{ close(null,inStream); } return retJson.toString(); } /** * 读取行值 * @return */ private static String readExcelRow(HSSFRow row){ StringBuilder rowJson = new StringBuilder(); int lastCellNum = ExcelUtil.columns.size();//最后一个单元格 rowJson.append("{"); for(int i = 0 ;i<lastCellNum;i++){ HSSFCell cell = row.getCell(i); String cellVal = readCellValue(cell); rowJson.append(toJsonItem(columns.get(i), cellVal)); if(i<lastCellNum-1) rowJson.append(","); } rowJson.append("}"); return rowJson.toString(); } /** * 读取行值 * @return */ private static String readExcelRow(XSSFRow row){ StringBuilder rowJson = new StringBuilder(); int lastCellNum = ExcelUtil.columns.size();//最后一个单元格 rowJson.append("{"); for(int i = 0 ;i<lastCellNum;i++){ XSSFCell cell = row.getCell(i); String cellVal = readCellValue(cell); rowJson.append(toJsonItem(columns.get(i), cellVal)); if(i<lastCellNum-1) rowJson.append(","); } rowJson.append("}"); return rowJson.toString(); } /** * 读取单元格的值 * @param hssfCell * @return */ @SuppressWarnings("static-access") private static String readCellValue(HSSFCell hssfCell) { if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) { return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) { return String.valueOf(hssfCell.getNumericCellValue()); } else { return String.valueOf(hssfCell.getRichStringCellValue()); } } /** * 读取单元格的值 * @param hssfCell * @return */ @SuppressWarnings("static-access") private static String readCellValue(XSSFCell hssfCell) { if (hssfCell.getCellType() == hssfCell.CELL_TYPE_BOOLEAN) { return String.valueOf(hssfCell.getBooleanCellValue()); } else if (hssfCell.getCellType() == hssfCell.CELL_TYPE_NUMERIC) { return String.valueOf(hssfCell.getNumericCellValue()); } else { return String.valueOf(hssfCell.getRichStringCellValue()); } } /** * 转换为json对 * @return */ private static String toJsonItem(String name,String val){ return "\""+name+"\":\""+val+"\""; } /** * 关闭io流 * @param fos * @param fis */ private static void close(OutputStream out, InputStream in) { if (in != null) { try { in.close(); } catch (IOException e) { System.out.println("InputStream关闭失败"); e.printStackTrace(); } } if (out != null) { try { out.close(); } catch (IOException e) { System.out.println("OutputStream关闭失败"); e.printStackTrace(); } } } public static List<String> getColumns() { return ExcelUtil.columns; } public static void setColumns(List<String> columns) { ExcelUtil.columns = columns; } public static int getSheetNum() { return sheetNum; } public static void setSheetNum(int sheetNum) { ExcelUtil.sheetNum = sheetNum; } }
调用方式
List<String> columns = new ArrayList<String>();
columns.add("CUST_NAME1");//战略客户名
columns.add("CUST_NAME2");//客户名
columns.add("INCOME_TYPE");//收入类型
columns.add("DEPT_NAME");//部门名称
columns.add("YEAR");//年份
columns.add("MONTH");//月份
columns.add("AMT");//金额
ExcelUtil.setColumns(columns);
String retJson = ExcelUtil.readExcel(upload);
相关推荐
Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在本例中,我们关注的是与处理PowerPoint文件相关的部分,即"poi-...
2. **SS.usermodel**: 这是处理Excel工作簿和工作表的通用接口,无论你是处理HSSF还是XSSF文件。 3. **DocumentBuilderFactory**: Java的标准API,用于构建解析XML文档的DOM解析器。在Apache POI中,它用于解析OOXML...
标题中的“poi读取xlsx和xls”指的是使用Apache POI库来处理Microsoft Office的两种不同文件格式:Excel的.xlsx(基于OpenXML标准)和.xls(基于老版的BIFF格式)。Apache POI是一个流行的Java库,它允许开发人员在...
这个"java_poi导入excel通用工具类"是利用Java的POI库和一些额外的技术来实现对Excel数据的导入功能,使得开发人员能够方便地将Excel数据转化为Java对象或者对已有对象进行填充。下面我们将深入探讨相关的知识点。 ...
"java_poi导入excel通用工具类V0915" 提供了一种通用的方式来处理Excel数据的导入工作,它支持多种赋值方式,包括单个对象、列表对象以及指定坐标的赋值。 首先,让我们深入理解一下这个工具类的主要功能: 1. **...
本源码包提供了一个通用的Java POI读取Excel数据的实现,特别适用于那些需要在服务器端或无桌面环境处理Excel数据的应用。 在描述中提到,源码已经包含了poi.jar包,这是POI项目的主要依赖库,包含了处理Excel文件...
1. HSSF(Horrible Spreadsheet Format):这是Apache POI提供的一组API,用于读取和写入Microsoft Excel的二进制文件格式(.xls)。HSSF支持旧版的Excel文件格式,可以创建、修改和分析Excel的BIFF8格式数据。 2. ...
Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个"poi-src-3.13-20150929.zip"压缩包包含了Apache POI 3.13版本的源代码,发布于2015年9月29日。这个版本的POI...
在Eclipse中,引入Apache POI JAR包的过程包括:首先将"poi-3.12-20150511.jar"添加到项目的构建路径中,然后就可以在代码中创建`Workbook`对象来代表Excel文件,`Sheet`对象来代表工作表,`Row`对象代表行,`Cell`...
本教程将深入探讨如何使用基于Apache POI的Java代码来读取Excel文件。 一、Apache POI介绍 Apache POI是Apache软件基金会的一个开源项目,它的主要目标是提供一套API,使Java程序员能够创建、修改和显示Microsoft ...
本文将详细介绍如何通过代码快速实现XML到Excel的转换,并提供一个通用的Java类来完成这个任务。 首先,我们需要理解XML和Excel的特性。XML是一种结构化数据格式,它以树状结构存储数据,而Excel则是用于组织和呈现...
在这个例子中,我们将深入探讨如何使用Apache POI读取Word 2003和Word 2007的文档,并将内容以字符串形式输出。 首先,我们需要了解Apache POI中的两个主要组件,它们是HWPF(Horrible Word Processor Format)用于...
尤其是对于Excel文档,POI提供了两种主要的Excel文件格式支持,一种是基于HSSF的对.xls格式(Excel 97-2003)的支持,另一种是基于XSSF的对.xlsx格式(Excel 2007+)的支持。在本例中,由于文档标题指出是解析2003-...
2. **poi-ooxml-3.9.jar**:这个库支持处理OOXML格式,即基于XML的Microsoft Office 2007及更高版本的文件格式(XLSX、DOCX、PPTX)。它包含了对Open Packaging Convention (OPC) 的实现,是处理OOXML文件的基础。 ...
4. **poi-ooxml**: 提供了对OOXML格式的支持,包括读写Word、Excel等文件。 5. **poi**: Apache POI的基础库,处理老版本的Microsoft Office文件格式,如.xls和.doc。 6. **slf4j**: Simple Logging Facade for Java...
// 使用POI读取Excel文件 XSSFWorkbook workbook = new XSSFWorkbook(is); XSSFSheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 for (Row row : sheet) { // 遍历行,处理每个单元格 for (Cell ...
对于 Excel,它支持 HSSF(Horrible Spreadsheet Format)用于处理 .xls 文件(Excel 97-2007 格式),以及 XSSF(XML Spreadsheet Format)用于处理 .xlsx 文件(Excel 2007 及更高版本格式)。这两个接口允许...
本文将详细介绍如何通过代码快速实现XML到Excel的转换,并提供一个通用的Java类来完成这个任务。 首先,我们需要理解XML和Excel的结构差异。XML是一种标记语言,用于存储和传输结构化数据,而Excel则是一种电子表格...
总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...
3. **读取Excel文件** 无论是2003还是2007版本的文件,都可以通过`FileInputStream`打开文件,然后创建对应的`Workbook`实例(`HSSFWorkbook`或`XSSFWorkbook`)。接着,你可以通过`getSheetAt()`方法获取工作表,...