`
zhangwenping
  • 浏览: 15409 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

POI入门

阅读更多
package testpoi;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

public class ExcelExport {
	
	private static ExcelExport instance = null;
	
	private Excel excel = null;
	
	private ExcelExport() {
		excel = new Excel();
	}
	
	public synchronized static ExcelExport getInstance() {
		if (instance == null) {
			instance = new ExcelExport();
		}
		return instance;
	}
	
	private HSSFWorkbook workbook = null;
	
	/**
	 * initExcelInfo 获取excel的初始化信息,文件名,类型,当前行号与sheet号等
	 * @param fileName
	 * @return void
	 */
	public void initExcelInfo(String fileName) throws Exception {
		if (fileName == null || "".equals(fileName.trim())) {
			throw new Exception("initExcelInfo == 文件名为空或null");
		}
		excel.setFileName(fileName);
		excel.setFiletype(fileName.substring(fileName.lastIndexOf(".") + 1));
		excel.setCurrentRow(0);
		excel.setCurrentSheet(0);
		if (excel.getFiletype().equalsIgnoreCase("xls")) {
			workbook = new HSSFWorkbook(new FileInputStream(fileName));
			int totalSheets = workbook.getNumberOfSheets();
			excel.setTotalSheets(totalSheets);
		}
	}
	
	/**
	 * nextSheet 跳转下一个row
	 * @param void
	 * @return void
	 */
	public void nextRow() {
		excel.setCurrentRow(excel.getCurrentRow() + 1);
	}
	
	/**
	 * setRow 指定具体某一行
	 * @param i
	 * @return void
	 */
	public void setRow(int i) {
		excel.setCurrentRow(i);
	}
	
	/**
	 * nextSheet 跳转下一个sheet
	 * @param void
	 * @return void
	 */
	public void nextSheet() {
		excel.setCurrentSheet(excel.getCurrentSheet() + 1);
	}
	
	/**
	 * setSheet 指定具体某一sheet
	 * @param i
	 * @return void
	 */
	public void setSheet(int i) {
		excel.setCurrentSheet(i);
	}
	
	/**
	 * isLastRow 判断当前行是否为最后一行
	 * @param i
	 * @return void
	 */
	public boolean isLastRow() throws FileNotFoundException, IOException {
		boolean flag = false;
		if (workbook == null) {
			workbook = new HSSFWorkbook(new FileInputStream(excel.getFileName()));
		}
		HSSFSheet sheet = workbook.getSheetAt(excel.getCurrentSheet());
		int totalRows = sheet.getLastRowNum();
		if (excel.getCurrentRow() == totalRows) {
			flag = true;
		} else {
			flag = false;
		}
		return flag;
	}
	
	/**
	 * getCurrentRecord 返回excel的当前行信息
	 * @param void
	 * @return list 当前行的所有列的信息保存为list返回
	 */
	public List getCurrentRecord() throws FileNotFoundException, IOException {
		List list = new ArrayList();
		if (workbook == null) {
			workbook = new HSSFWorkbook(new FileInputStream(excel.getFileName()));
		}
		HSSFSheet sheet = workbook.getSheetAt(excel.getCurrentSheet());
		HSSFRow row = sheet.getRow(excel.getCurrentRow());
		int lastColumnIndex = row.getLastCellNum();
		HSSFCell cell = null;
		String cellValue = null;
		for (int i = 0; i < lastColumnIndex; i++) {
			cell = row.getCell((short) i);
			if (cell != null) {
				switch (cell.getCellType()) {
					case HSSFCell.CELL_TYPE_NUMERIC:
						if (HSSFDateUtil.isCellDateFormatted(cell)) {
							Date date = cell.getDateCellValue();
							cellValue = date.toString();
						} else {
							Float temp = new Float((float) cell.getNumericCellValue());
							cellValue = String.valueOf(temp);
						}
						break;
					case HSSFCell.CELL_TYPE_STRING:
						cellValue = cell.getRichStringCellValue().getString().replaceAll("'", "''").trim();
						break;
					default:
						cellValue = cell.getRichStringCellValue().getString().replaceAll("\"", "''").trim();
				}
			} else {
				cellValue = "";
			}
			list.add(cellValue);
		}
		return list;
	}
	
	/**
	 * getAllRecord 返回excel的所有行信息
	 * @param void
	 * @return list 所有行信息保存为list返回
	 */
	public List getAllRecord() throws FileNotFoundException, IOException {
		List list = new ArrayList();
		while (!isLastRow()) {
			list.add(getCurrentRecord());
			nextRow();
		}
		return list;
	}
	
}

 

package testpoi;

public class Excel {
	
	/**
	 * filetype 文件类型
	 */
	private String fileName = null;
	
	/**
	 * filetype 文件类型
	 */
	private String filetype = null;

	/**
	 * currentSheet 当前sheet号
	 */
	private int currentSheet = 0;

	/**
	 * currentRow sheet中的当前行号
	 */
	private int currentRow = 0;

	/**
	 * totalSheets 当前excel中的sheet总个数
	 */
	private int totalSheets = 0;
	
	/**
	 * 黙认构造器
	 * @param void
	 */
	public Excel() {
		
	}
	
	/**
	 * 黙认构造器
	 * @param fileName
	 */
	public Excel(String fileName) {
		this.fileName = fileName;
	}

	/**
	 * getCurrentRow 返回sheet中的当前行号
	 * @param currentRow
	 * @return void
	 */
	public int getCurrentRow() {
		return currentRow;
	}

	/**
	 * setCurrentRow 设置sheet中的当前行号
	 * @param currentRow
	 * @return void
	 */
	public void setCurrentRow(int currentRow) {
		this.currentRow = currentRow;
	}

	/**
	 * getCurrentSheet 返回当前sheet号
	 * @param void
	 * @return currentSheet
	 */
	public int getCurrentSheet() {
		return currentSheet;
	}

	/**
	 * setCurrentSheet 设置当前sheet号
	 * @param currentSheet
	 * @return void
	 */
	public void setCurrentSheet(int currentSheet) {
		this.currentSheet = currentSheet;
	}

	/**
	 * getFiletype 返回当前excel的文件类型(后缀)
	 * @param void
	 * @return filetype
	 */
	public String getFiletype() {
		return filetype;
	}

	/**
	 * setFiletype 设置当前excel的文件类型(后缀)
	 * @param filetype
	 * @return void
	 */
	public void setFiletype(String filetype) {
		this.filetype = filetype;
	}

	/**
	 * getTotalSheets 返回当前excel中的sheet总个数
	 * @param void
	 * @return totalSheets
	 */
	public int getTotalSheets() {
		return totalSheets;
	}

	/**
	 * setTotalSheets 设置当前excel中的sheet总个数
	 * @param totalSheets
	 * @return void
	 */
	public void setTotalSheets(int totalSheets) {
		this.totalSheets = totalSheets;
	}

	/**
	 * getFileName 设置当前excel文件名
	 * @param void
	 * @return fileName
	 */
	public String getFileName() {
		return fileName;
	}

	/**
	 * setFileName 设置当前excel文件名
	 * @param fileName
	 * @return void
	 */
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
}

 

测试类如下:

package testpoi;

import java.util.List;

public class Test {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		ExcelExport excelImport = ExcelExport.getInstance();
		try {
			String oldPath = "D:\\temp.xls";
			excelImport.initExcelInfo(oldPath);
			List list = excelImport.getAllRecord();
			System.out.println(list);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

 

POI读取Excel文件时报错。通常的原因是读取的文件头信息不对,可能是类似于将txt文件的后缀名直接改成xls,或者由其他软件导出成的Excel, 需要用Excel打开, 然后另存为一下,就可以读取了。注,需要下载jacob.jar和jacob.dll

(该功能的java实现如下:)

package testpoi;

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class ExcelChange {
	
	public static void excelSaveAs(String fileName, String saveFileName) {   
		ActiveXComponent activeXComponent = new ActiveXComponent("Excel.Application");
		activeXComponent.setProperty("Visible", new Variant(false));   
        Object objects = activeXComponent.getProperty("Workbooks").toDispatch();   
        Object object = Dispatch.invoke((Dispatch) objects, "Open", Dispatch.Method, new Object[] {fileName, new Variant(false), new Variant(true)}, new int[1]).toDispatch();
        //new Variant(1)
        Dispatch.invoke((Dispatch) object, "SaveAs", Dispatch.Method, new Object[] {saveFileName, new Variant(1)}, new int[1]);             
        Dispatch.call((Dispatch) object, "Close", new Variant(false));   
        activeXComponent.invoke("Quit", new Variant[]{});   
    }   
	
	public static void main(String[] args) throws InterruptedException {
		excelSaveAs("D:\\CSR审批.xls", "D:\\temp.xls");
	}
}

 

0
0
分享到:
评论

相关推荐

    ApachePOI入门级读写操作

    在"Apache POI入门级读写操作"中,我们将深入探讨如何使用这个库来执行基本的Excel文件(XLS和XLSX)的读写任务。 首先,我们来看POI工程的两个关键组件: 1. **HSSF (Horrible Spreadsheet Format)**:这是Apache...

    POI 入门 使用教程,参考手册

    ### POI 入门 使用教程,参考手册 #### 一、概述 Apache POI 是一个用于读写 Microsoft Office 格式文件(如 Excel 和 Word)的开源 Java 库。它支持多种格式,包括旧版的 .xls 文件和较新的 .xlsx 文件。本教程将...

    poi入门教程

    poi在实际项目中用的比较多,用于导出报表等,poi只要掌握其属性就可以应用到项目中了

    POI入门教程

    Apache POI 是一个开源的Java库,专门用于读写Microsoft Office格式的文件,尤其是Excel文档。它是Apache软件基金会的一部分,提供了强大的API,使得开发者能够轻松地在Java应用程序中创建、修改和显示Excel文件。相...

    POI实战 .pdf

    1.POI入门 4 1.1 Excel基本知识 4 1.2 POI基本类 5 1.3 POI简单读取Excel数据 5 1.4 POI简单写出Excel 9 2.复杂读取 16 2.1 单元格各类型数据读取 16 2.1.1 基本类型 16 2.1.2 日期类型 18 2.2 自定义类型 21 3....

    POI中文帮助文档.pdf

    Apache POI 是一个开源的Java库,主要用于读取和写入Microsoft Office格式的文件,包括 Excel、Word 和 PowerPoint 文件。POI提供了一种方便的方式来处理这些文件,无需安装Microsoft Office或其它昂贵的办公软件,...

    POI实战-java开发excel详解

    POI入门 ##### 1.1 Excel基本知识 在Java开发中,处理Excel文件是一项常见的任务。理解Excel的基本结构是使用Apache POI库进行开发的基础。 - **Excel文件结构**:一个Excel文件由多个工作表(sheet)组成,每个...

    Apache POI教程及资源包

    1. **Apache POI入门教程** 入门Apache POI,首先需要了解其基本概念,包括工作簿(Workbook)、工作表(Sheet)、行(Row)和单元格(Cell)。工作簿对应Excel中的文件,工作表是工作簿中的单个表格,行和单元格则...

    POI技术简单应用开发报表简单使用

    1. **POI入门** - **安装与导入**: 在项目中引入Apache POI依赖,通常通过Maven或Gradle管理。对于Maven,可以在pom.xml中添加对应的依赖项。 - **创建Workbook对象**: POI提供HSSFWorkbook(用于处理Excel 2003 ....

    POI 实战开发-java开发

    POI 入门 #### 1.1 Excel 基本知识 Excel 是 Microsoft Office 的一个组件,用于处理表格数据,支持单元格计算、图表制作、数据透视等功能。Excel 文件通常有 .xls 或 .xlsx 扩展名,其中 .xlsx 是 Office 2007 ...

    POI快速入门可以简单使用,可以使用typora打开

    POI快速入门可以简单使用,可以使用typora打开,可以用来解析excel

    poi 操作excel 入门

    在本教程中,我们将专注于"poi操作excel入门",帮助初学者掌握如何使用Apache POI库来创建、读取和修改Excel文档。 首先,我们需要在项目中引入Apache POI的库。在给定的压缩包中,我们看到有一个名为`poi-3.0.2-...

    poi的maven项目代码

    3. **poi-hello**:这可能是项目中的一个起始模块或示例代码,以“hello”命名,通常用于展示基础功能或快速入门示例。 总结来说,这个项目提供了一个基础的模板,演示了如何利用Apache POI和Maven来处理Excel文件...

    java解析excel并做数据有效性校验

    2. **Apache POI入门** 首先,需要在项目中引入Apache POI依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;org.apache.poi &lt;artifactId&gt;poi-ooxml &lt;version&gt;4.1.2 ``` 3. **...

Global site tag (gtag.js) - Google Analytics