`

xls&xlsx 导入、导出、解析(笔记)

阅读更多


/**
 * excel文件导入、导出、下载工具类
 */
public class ExcelTools extends ExcelUtils {

	private static final String CONTENT_TYPE = "application/vnd.ms-excel";

	private static final String HEADER_DIS = "Content-Disposition";

	private static final String HEADER_ATT = "attachment;filename=";

	private static final String FILE_EX = ".xls";

	POIFSFileSystem fs = null;
	
	HSSFWorkbook wb = null;
	
	private int readWhichSheet; // 读取哪一个sheet
	
	private int startReadRowNum;// 从第几行开始读取
	
	private int endReadRowNum;  // 读到第几行结束

	/**
	 * excel文件生成并下载
	 * 
	 * @param servletActionContext 上下文
	 * @param config 模板文件
	 * @param fname 导出时的文件名
	 * @throws ExcelException
	 * @throws IOException
	 */
	@SuppressWarnings("static-access")
	public static void export2Web(HttpServletResponse response, String config,
			String fname) throws ExcelException, IOException {
		response.reset();
		response.setContentType(CONTENT_TYPE);
		response.setHeader(HEADER_DIS, HEADER_ATT + fname + FILE_EX);
		export(config, response.getOutputStream());
	 
	}

	/**
	 * 将excel生成至本地
	 * 
	 * @param config  模板文件
	 * @param dir 输出的文件目录
	 * @param fname  输出的文件名
	 * @throws ExcelException
	 * @throws IOException
	 */
	@SuppressWarnings("static-access")
	public static void export2Local(String config, String dir, String fname)
			throws ExcelException, IOException {

		export(config, new FileOutputStream(dir + "/" + fname));

	}

	/**加载EXCEL文件
	 * @param excelfile  excel文件
	 * @param readWhichSheet 需要解析哪个sheet表,座标1开始
	 * @param startReadRowNum 需要从哪一行开始解析,座标1开始
	 * @param endReadRowNum   结束到哪一行,输入0则解析到末尾
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public void loadExcelFile(File excelfile, int readWhichSheet,
			int startReadRowNum, int endReadRowNum)
			throws FileNotFoundException, IOException {
		fs = new POIFSFileSystem(new FileInputStream(excelfile));
		wb = new HSSFWorkbook(fs);
		this.readWhichSheet = readWhichSheet - 1;
		this.startReadRowNum = startReadRowNum - 1;
		this.endReadRowNum = endReadRowNum - 1;
	}

	/**加载EXCEL文件
	 * @param inputStream  excel文件流
	 * @param readWhichSheet 需要解析哪个sheet表,座标1开始
	 * @param startReadRowNum 需要从哪一行开始解析,座标1开始
	 * @param endReadRowNum   结束到哪一行,输入0则解析到末尾
	 * @throws FileNotFoundException
	 * @throws IOException
	 */
	public void loadExcelFile(InputStream inputStream, int readWhichSheet,
			int startReadRowNum, int endReadRowNum)
			throws FileNotFoundException, IOException {
		fs = new POIFSFileSystem(inputStream);
		wb = new HSSFWorkbook(fs);
		this.readWhichSheet = readWhichSheet;
		this.startReadRowNum = startReadRowNum;
		this.endReadRowNum = endReadRowNum;
	}

	/**
	 * 读取excel的值,以List<String[]>返回
	 * @return
	 */
	public List<String[]> readExcelData() {
		int allsheet = wb.getNumberOfSheets();
		if (readWhichSheet >= allsheet) {
			return new ArrayList<String[]>(0);
		}
		HSSFSheet sheet = wb.getSheetAt(readWhichSheet);
		if (sheet == null) {
			return new ArrayList<String[]>(0);
		}

		int rowNum = sheet.getLastRowNum() + 1; // 这里比较特殊,cell个数计算正确,row个数需要加1才对
		System.out.println("rownum:" + rowNum);

		if (endReadRowNum == -1)
			endReadRowNum = rowNum - 1;// 如果结束行等0,那么就取到末尾

		List<String[]> resultList = new ArrayList<String[]>(rowNum);
		for (int i = startReadRowNum; i <= endReadRowNum && i < rowNum; i++) {
			HSSFRow row = sheet.getRow(i);
			if (row == null) {
				break;
			}
			short cellsnum = row.getLastCellNum();
			String[] cells = new String[cellsnum];
			for (int k = 0; k < cellsnum; k++) {
				HSSFCell cell = row.getCell((short) k);
				Object val = getCellValue(cell);
				cells[k] = val == null || "".equals(val.toString()) ? "无" : val.toString();
			}
			resultList.add(cells);
		}
		return resultList;
	}

	/**
	 * 根据Cell类型返回正确的值
	 * 
	 * @param cell
	 * @return
	 */
	public static Object getCellValue(HSSFCell cell) {

		if ((cell == null) || (HSSFCell.CELL_TYPE_BLANK == cell.getCellType())) {
			return "";
		} else if (HSSFCell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
			return cell.getBooleanCellValue();
		} else if (HSSFCell.CELL_TYPE_FORMULA == cell.getCellType()) {
			return cell.getCellFormula();
		} else if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
			if (HSSFDateUtil.isCellDateFormatted(cell)) {
				return DateUtil.getDate2Str(cell.getDateCellValue(), null);
			} else {
				return cell.getNumericCellValue();
			}
		} else if (HSSFCell.CELL_TYPE_STRING == cell.getCellType()) {
			return cell.getRichStringCellValue().getString();
		} else {
			return cell.getRichStringCellValue().getString();
		}

	}

	/**
	 * 根据Cell类型返回正确的值
	 * 
	 * @param cell
	 * @return
	 */
	public static String getCellValueAsString(HSSFCell cell) {

		if (cell == null) {
			return null;
		} else if (HSSFCell.CELL_TYPE_BLANK == cell.getCellType()) {
			return "";
		} else if (HSSFCell.CELL_TYPE_BOOLEAN == cell.getCellType()) {
			return String.valueOf(cell.getBooleanCellValue());
		} else if (HSSFCell.CELL_TYPE_NUMERIC == cell.getCellType()) {
			if (HSSFDateUtil.isCellDateFormatted(cell)) {
				return DateUtil.getDate2Str(cell.getDateCellValue(), null);
			} else {
				DecimalFormat df = new DecimalFormat("#00");
				return df.format(cell.getNumericCellValue());
			}
		} else if (HSSFCell.CELL_TYPE_STRING == cell.getCellType()) {
			return cell.getRichStringCellValue().getString();
		} else {
			return cell.getRichStringCellValue().getString();
		}

	}
	
	

}







import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class XlsMain {

	public static void main(String[] args) throws IOException {
		XlsMain xlsMain = new XlsMain();

		xlsMain.readXls("f:\\demo.xls");
	}

	private void readXls(String filename) throws IOException {
		InputStream is = new FileInputStream(filename);
		HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is);

		// 循环工作表Sheet
		for (int numSheet = 0; numSheet < hssfWorkbook.getNumberOfSheets(); numSheet++) {
			HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet);
			
			if (hssfSheet == null) {
				continue;
			}

			// 循环行Row
			for (int rowNum = 0; rowNum <= hssfSheet.getLastRowNum(); rowNum++) {
				HSSFRow hssfRow = hssfSheet.getRow(rowNum);
				
				if (hssfRow == null) {
					continue;
				}

				// 循环列Cell
				for (int cellNum = 0; cellNum <= hssfRow.getLastCellNum(); cellNum++) {
					HSSFCell hssfCell = hssfRow.getCell(cellNum);
					
					if (hssfCell == null) {
						System.out.print("    " + "null");
 						continue;
					}

					System.out.print("    " + getValue(hssfCell));
				}
				System.out.println();
			}
		}
	}

	@SuppressWarnings("static-access")
	private String getValue(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.getStringCellValue());
		}
	}

}





import java.io.IOException;
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;

public class XlsxMain {

	public static void main(String[] args) throws IOException {
		XlsxMain xlsxMain = new XlsxMain();

		xlsxMain.readXlsx("e:/a.xlsx");
	}

	private void readXlsx(String filename) throws IOException {
		XSSFWorkbook xssfWorkbook = new XSSFWorkbook(filename);

		// 循环工作表Sheet
		for (int numSheet = 0; numSheet < xssfWorkbook.getNumberOfSheets(); numSheet++) {
			XSSFSheet xssfSheet = xssfWorkbook.getSheetAt(numSheet); 
			
			if (xssfSheet == null) {
				continue;
			}

			// 循环行Row
			for (int rowNum = 0; rowNum <= xssfSheet.getLastRowNum(); rowNum++) {
				XSSFRow xssfRow = xssfSheet.getRow(rowNum);
				
				if (xssfRow == null) {
					continue;
				}

				// 循环列Cell
				for (int cellNum = 0; cellNum <= xssfRow.getLastCellNum(); cellNum++) {
					XSSFCell xssfCell = xssfRow.getCell(cellNum);
					
					if (xssfCell == null) {
						continue;
					}
					System.out.print("   " + getValue(xssfCell));
				}
				System.out.println();
			}
		}
	}

	@SuppressWarnings("static-access")
	private String getValue(XSSFCell xssfCell) {
		if (xssfCell.getCellType() == xssfCell.CELL_TYPE_BOOLEAN) {
			return String.valueOf(xssfCell.getBooleanCellValue());
		} else if (xssfCell.getCellType() == xssfCell.CELL_TYPE_NUMERIC) {
			return String.valueOf(xssfCell.getNumericCellValue());
		} else {
			try {
				return String.valueOf(xssfCell.getStringCellValue());
			} catch (Exception e) {
				return "null";
			}

		}
	}

}


分享到:
评论
2 楼 samgogo 2016-02-15  
密码是多少呀?
1 楼 ls2005nba 2015-10-08  
密码是多少呀?

相关推荐

    POI导入导出excel文件 --- 个人珍藏笔记

    本笔记将介绍如何使用POI来导入和导出Excel文件。 首先,我们需要将`poi-3.1-FINAL.jar`库添加到项目的类路径中,这样才能使用POI提供的API。导入这个库后,我们就可以开始编写处理Excel文件的代码了。 在示例代码...

    web导出Excel笔记

    - 支持多种Excel格式,如`.xls`和`.xlsx`。 - 提供了丰富的API来创建、读取、修改Excel文件。 - 能够轻松处理复杂的Excel样式、图表等元素。 #### 三、前端触发导出操作 前端页面通过按钮触发导出功能,例如: ```...

    struts2导出excel笔记

    这篇笔记将探讨如何在Struts2中实现Excel的导出功能。 首先,我们需要了解Excel的基本概念。Excel是由Microsoft开发的一款电子表格软件,广泛用于数据管理和分析。在编程中,我们可以使用Apache POI库来操作Excel...

    Excel导出demo

    在"POI导出Excel笔记"的博客中,可能会详细讲解以下关键知识点: 1. **初始化工作簿**:首先,你需要创建一个Workbook对象,这可以是XSSFWorkbook(用于.xlsx格式,属于新的OOXML格式)或HSSFWorkbook(用于.xls...

    asp.net导出数据到Excel的几种方法 学习心得

    虽然用户在Excel中打开时看起来与实际的Excel文件无异,但实际上这是一个HTML文档,而非真正的Excel文件(.xls或.xlsx)。因此,这种方法的局限性在于,生成的文件无法作为数据源被其他程序直接读取或处理。 以下是...

    xmind转excel工具1.1.6.zip

    思维导图作为一种有效的思维整理工具,被广泛应用于项目规划、学习笔记和会议记录等多个场景。然而,有时我们需要将这些思维导图的数据导入到电子表格中进行更深入的分析和处理,这时,Xmind转Excel工具1.1.6便...

    PHPExcel笔记, mpdf导出.docx

    在PHP开发中,有时我们需要处理Excel文件,例如导入数据、导出报告等。PHPExcel是一个流行的PHP库,用于读取、写入和操作不同版本的Microsoft Excel文件。在本文中,我们将探讨如何使用PHPExcel进行基本操作,并结合...

    nb2xls:将Jupyter Notebook转换为Excel电子表格

    nb2xls-Jupyter笔记本到Excel电子表格通过新的“下载为”选项或通过命令行上的nbconvert将Jupyter笔记本转换为Excel Spreadsheets(xlsx)。 尊重诸如Pandas DataFrames之类的表。 还导出图像数据,例如matplotlib...

    网络爬虫工具插件,不用编程

    使用此工具,您可以将网页导出为 XLS、CSV、XLSX 或 TSV 文件(.xls .csv .xlsx .tsv) 您可以在我们的入门订阅计划中免费使用 DataMiner。您每月将获得 500 个免费页面积分。通过这种方式,您可以了解它的工作原理...

    POI-EasyExcel笔记1

    本文将深入探讨这两个工具,并介绍如何使用它们进行Excel数据的导入与导出。 首先,Apache POI是一个开源的API,它允许Java程序创建、修改和显示MS Office格式的文件,包括Excel。Apache POI提供了广泛的API,可以...

    nodejs学些代码参考

    - **模块系统**:Node.js采用CommonJS模块规范,通过`require`导入模块,`module.exports`或`exports`导出模块。 - **V8引擎**:Node.js内置了Google的V8引擎,使得JavaScript代码可以被快速编译执行,提供了高...

    Java操作EXCEL 学习笔记

    在Java编程领域,处理Excel文件是一项常见的任务,特别是在数据分析、报表生成或数据导入导出时。本学习笔记将深入探讨如何使用Apache POI库来实现Java对Excel的高效操作。 Apache POI是一个开源项目,提供了读写...

    个人电脑图片及学习文档

    例如,可以使用Microsoft Office Interop库直接操作Excel对象,或者使用开源库如EPPlus,NPOI等来创建XLS或XLSX文件,这些库可以高效地生成大量数据的Excel文件而无需安装Office。 3. **jQuery库版本**:“jQuery v...

    POI,读取文件工具类和笔记

    Apache POI 提供了 HSSF(Horizontally Stored Spreadsheet Format)和 XSSF(XML Spreadsheet Format)两个主要的 API,分别用于处理老版本的 .xls 文件和新版本的 .xlsx 文件。HSSF 支持 BIFF8 格式,而 XSSF 支持...

    多个sheet内容 代码.zip

    1. **Apache POI**:这是一个用Java编写的库,专门用于处理Microsoft Office格式的文件,如XLS和XLSX。它允许开发人员在不使用Microsoft Office的情况下,在服务器端或没有GUI的环境中生成、修改和读取Excel文件。 2...

    JXL 学习笔记(看了就差不多了)

    在Java开发中,处理Excel文件是一个常见的需求,比如数据导入导出、报表生成等。JXL库作为一个轻量级的Java Excel API,为开发者提供了方便快捷的方式来读写Excel文件。本篇笔记将深入探讨JXL库的使用方法和核心功能...

    jxl包的学习笔记。。。。。。

    在Java编程语言中,处理Excel文件是一项常见的任务,尤其在数据导入导出、报表生成等场景。`jxl`库是一个广泛使用的开源库,它允许开发者以读写方式操作Excel文件(.xls格式),而无需依赖Microsoft Office。本篇...

    常用办公文档格式全集

    CSV(Comma Separated Values)格式则专门用于数据交换,以逗号分隔每个字段,通常被用于导入和导出数据库或电子表格。 HTML(HyperText Markup Language)和CSS(Cascading Style Sheets)则是网页设计的基础,...

Global site tag (gtag.js) - Google Analytics