`
JavaSam
  • 浏览: 950191 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

POI读取Excel通用代码---支持2003,2007

 
阅读更多
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);

 

0
1
分享到:
评论

相关推荐

    poi-scratchpad-3.12-20150511和poi-3.12-20150511包

    Apache POI是一个开源项目,主要用于处理Microsoft Office格式的文件,如Word(.doc/.docx)、Excel(.xls/.xlsx)和PowerPoint(.ppt/.pptx)。在本例中,我们关注的是与处理PowerPoint文件相关的部分,即"poi-...

    poi-ooxml-schemas-3.9.jar

    2. **SS.usermodel**: 这是处理Excel工作簿和工作表的通用接口,无论你是处理HSSF还是XSSF文件。 3. **DocumentBuilderFactory**: Java的标准API,用于构建解析XML文档的DOM解析器。在Apache POI中,它用于解析OOXML...

    poi读取xlsx和xls

    标题中的“poi读取xlsx和xls”指的是使用Apache POI库来处理Microsoft Office的两种不同文件格式:Excel的.xlsx(基于OpenXML标准)和.xls(基于老版的BIFF格式)。Apache POI是一个流行的Java库,它允许开发人员在...

    java_poi导入excel通用工具类

    这个"java_poi导入excel通用工具类"是利用Java的POI库和一些额外的技术来实现对Excel数据的导入功能,使得开发人员能够方便地将Excel数据转化为Java对象或者对已有对象进行填充。下面我们将深入探讨相关的知识点。 ...

    java_poi导入excel通用工具类V0915

    "java_poi导入excel通用工具类V0915" 提供了一种通用的方式来处理Excel数据的导入工作,它支持多种赋值方式,包括单个对象、列表对象以及指定坐标的赋值。 首先,让我们深入理解一下这个工具类的主要功能: 1. **...

    java+poi读取excel数据 源码

    本源码包提供了一个通用的Java POI读取Excel数据的实现,特别适用于那些需要在服务器端或无桌面环境处理Excel数据的应用。 在描述中提到,源码已经包含了poi.jar包,这是POI项目的主要依赖库,包含了处理Excel文件...

    poi-src-4.1.0-20190412.zip

    1. HSSF(Horrible Spreadsheet Format):这是Apache POI提供的一组API,用于读取和写入Microsoft Excel的二进制文件格式(.xls)。HSSF支持旧版的Excel文件格式,可以创建、修改和分析Excel的BIFF8格式数据。 2. ...

    poi-src-3.13-20150929.zip

    Apache POI 是一个开源项目,专门用于处理Microsoft Office格式的文件,如Excel、Word和PowerPoint。这个"poi-src-3.13-20150929.zip"压缩包包含了Apache POI 3.13版本的源代码,发布于2015年9月29日。这个版本的POI...

    poi-3.12-20150511.rar

    在Eclipse中,引入Apache POI JAR包的过程包括:首先将"poi-3.12-20150511.jar"添加到项目的构建路径中,然后就可以在代码中创建`Workbook`对象来代表Excel文件,`Sheet`对象来代表工作表,`Row`对象代表行,`Cell`...

    基于POI的java读取excel文件,通用类

    本教程将深入探讨如何使用基于Apache POI的Java代码来读取Excel文件。 一、Apache POI介绍 Apache POI是Apache软件基金会的一个开源项目,它的主要目标是提供一套API,使Java程序员能够创建、修改和显示Microsoft ...

    代码快速实现xml转换为Excel(xml转excel通用类-java-完成代码可作工具使用).docx

    本文将详细介绍如何通过代码快速实现XML到Excel的转换,并提供一个通用的Java类来完成这个任务。 首先,我们需要理解XML和Excel的特性。XML是一种结构化数据格式,它以树状结构存储数据,而Excel则是用于组织和呈现...

    POI读取 word 2003 和 word 2007 的例子

    在这个例子中,我们将深入探讨如何使用Apache POI读取Word 2003和Word 2007的文档,并将内容以字符串形式输出。 首先,我们需要了解Apache POI中的两个主要组件,它们是HWPF(Horrible Word Processor Format)用于...

    POI技术将excel解析导入mysql.pdf

    尤其是对于Excel文档,POI提供了两种主要的Excel文件格式支持,一种是基于HSSF的对.xls格式(Excel 97-2003)的支持,另一种是基于XSSF的对.xlsx格式(Excel 2007+)的支持。在本例中,由于文档标题指出是解析2003-...

    poi3.9 依赖的jar包

    2. **poi-ooxml-3.9.jar**:这个库支持处理OOXML格式,即基于XML的Microsoft Office 2007及更高版本的文件格式(XLSX、DOCX、PPTX)。它包含了对Open Packaging Convention (OPC) 的实现,是处理OOXML文件的基础。 ...

    poi-tl引擎实现world模板内容替换(支持docx)

    4. **poi-ooxml**: 提供了对OOXML格式的支持,包括读写Word、Excel等文件。 5. **poi**: Apache POI的基础库,处理老版本的Microsoft Office文件格式,如.xls和.doc。 6. **slf4j**: Simple Logging Facade for Java...

    SpringBoot整合poi实现Excel文件的导入和导出.pdf

    // 使用POI读取Excel文件 XSSFWorkbook workbook = new XSSFWorkbook(is); XSSFSheet sheet = workbook.getSheetAt(0); // 获取第一个工作表 for (Row row : sheet) { // 遍历行,处理每个单元格 for (Cell ...

    poi导出根据模板导出excel和简单列表导出excel源码

    对于 Excel,它支持 HSSF(Horrible Spreadsheet Format)用于处理 .xls 文件(Excel 97-2007 格式),以及 XSSF(XML Spreadsheet Format)用于处理 .xlsx 文件(Excel 2007 及更高版本格式)。这两个接口允许...

    代码快速实现xml转换为Excel(xml转excel通用类-java-完成代码可作工具使用).pdf

    本文将详细介绍如何通过代码快速实现XML到Excel的转换,并提供一个通用的Java类来完成这个任务。 首先,我们需要理解XML和Excel的结构差异。XML是一种标记语言,用于存储和传输结构化数据,而Excel则是一种电子表格...

    poi导入导出Excel通用工具类 兼容xls,xlsx

    总结,"poi导入导出Excel通用工具类 兼容xls,xlsx"这个工具实现了利用Apache POI库处理Excel文件的功能,涵盖了从旧版的.xls到新版的.xlsx格式,提供了方便的导入和导出接口,使得在Java开发中处理Excel数据变得...

    JAVA用POI读取和创建2003和2007版本Excel完美示例.pdf

    3. **读取Excel文件** 无论是2003还是2007版本的文件,都可以通过`FileInputStream`打开文件,然后创建对应的`Workbook`实例(`HSSFWorkbook`或`XSSFWorkbook`)。接着,你可以通过`getSheetAt()`方法获取工作表,...

Global site tag (gtag.js) - Google Analytics