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");
}
}
分享到:
相关推荐
在"Apache POI入门级读写操作"中,我们将深入探讨如何使用这个库来执行基本的Excel文件(XLS和XLSX)的读写任务。 首先,我们来看POI工程的两个关键组件: 1. **HSSF (Horrible Spreadsheet Format)**:这是Apache...
### POI 入门 使用教程,参考手册 #### 一、概述 Apache POI 是一个用于读写 Microsoft Office 格式文件(如 Excel 和 Word)的开源 Java 库。它支持多种格式,包括旧版的 .xls 文件和较新的 .xlsx 文件。本教程将...
poi在实际项目中用的比较多,用于导出报表等,poi只要掌握其属性就可以应用到项目中了
Apache POI 是一个开源的Java库,专门用于读写Microsoft Office格式的文件,尤其是Excel文档。它是Apache软件基金会的一部分,提供了强大的API,使得开发者能够轻松地在Java应用程序中创建、修改和显示Excel文件。相...
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....
Apache POI 是一个开源的Java库,主要用于读取和写入Microsoft Office格式的文件,包括 Excel、Word 和 PowerPoint 文件。POI提供了一种方便的方式来处理这些文件,无需安装Microsoft Office或其它昂贵的办公软件,...
POI入门 ##### 1.1 Excel基本知识 在Java开发中,处理Excel文件是一项常见的任务。理解Excel的基本结构是使用Apache POI库进行开发的基础。 - **Excel文件结构**:一个Excel文件由多个工作表(sheet)组成,每个...
1. **Apache POI入门教程** 入门Apache POI,首先需要了解其基本概念,包括工作簿(Workbook)、工作表(Sheet)、行(Row)和单元格(Cell)。工作簿对应Excel中的文件,工作表是工作簿中的单个表格,行和单元格则...
1. **POI入门** - **安装与导入**: 在项目中引入Apache POI依赖,通常通过Maven或Gradle管理。对于Maven,可以在pom.xml中添加对应的依赖项。 - **创建Workbook对象**: POI提供HSSFWorkbook(用于处理Excel 2003 ....
POI 入门 #### 1.1 Excel 基本知识 Excel 是 Microsoft Office 的一个组件,用于处理表格数据,支持单元格计算、图表制作、数据透视等功能。Excel 文件通常有 .xls 或 .xlsx 扩展名,其中 .xlsx 是 Office 2007 ...
POI快速入门可以简单使用,可以使用typora打开,可以用来解析excel
在本教程中,我们将专注于"poi操作excel入门",帮助初学者掌握如何使用Apache POI库来创建、读取和修改Excel文档。 首先,我们需要在项目中引入Apache POI的库。在给定的压缩包中,我们看到有一个名为`poi-3.0.2-...
3. **poi-hello**:这可能是项目中的一个起始模块或示例代码,以“hello”命名,通常用于展示基础功能或快速入门示例。 总结来说,这个项目提供了一个基础的模板,演示了如何利用Apache POI和Maven来处理Excel文件...
本手册是POI操作Excel文件的快速入门指南,旨在帮助开发者快速掌握使用HSSF和XSSF进行Excel文件操作的基本方法。通过阅读和实践本手册中的内容,用户可以学会如何添加POI支持、创建新工作簿、创建新的sheet页、操作...
### POI3.5 HSSF 和 XSSF Excel 操作快速入门手册 #### 一、POI简介与背景 Apache POI 是一个强大的 Java API,用于处理 Microsoft Office 格式的文件,包括 Excel 和 Word。其中,HSSF 和 XSSF 分别是 POI 提供的...
2. **Apache POI入门** 首先,需要在项目中引入Apache POI依赖。如果你使用Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>org.apache.poi <artifactId>poi-ooxml <version>4.1.2 ``` 3. **...