`

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)。因此,这种方法的局限性在于,生成的文件无法作为数据源被其他程序直接读取或处理。 以下是...

    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)则是网页设计的基础,...

    Python办公自动化之Excel篇笔记.zip

    6. **数据可视化**:Pandas可以结合Matplotlib或Seaborn库进行数据可视化,将数据结果直接导出为图表,进一步增强报告的可读性。例如,`df.plot()`可以生成简单的线图、柱状图和散点图。 7. **Excel输出**:完成...

Global site tag (gtag.js) - Google Analytics