最近在开发一个excel数据导入时,发现poi导入2003和2007版本是不兼容的,原来在2007的excel文本根式是xml,不是以前的2进制
必须另外处理,所以利用了一个简单工厂方法去根据文件类型去作不同处理
package com.wichina.common.util;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
/**
* 这里使用poi读取excel
*
* @author sz
*
* create time:2013-1-29
*/
public class ExcelUtil {
/*
* 内部静态工厂类
*/
private static class ExcelFactory{
public static Workbook createExcel(File file,String fileName) throws IOException{
String[] str = fileName.split("\\.");
String fileType = str[str.length - 1];
Workbook wb = null;
//这里根据文件类型判断
if(fileType.equals("xls")){
wb = getHSSFWorkbookForXLS(file);
}else if(fileType.equals("xlsx")){
wb = getXSSFWorkbookForXLSX(file);
}
return wb;
}
/**
* 传入文件,生成HSSFWorkbook,读2003版本,.xls
*
* @param file
* @return
* @throws IOException
*/
public static HSSFWorkbook getHSSFWorkbookForXLS(File file) throws IOException {
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
POIFSFileSystem fs = new POIFSFileSystem(in);
in.close();
return new HSSFWorkbook(fs);
}
/**
* 传入文件,生成SXSSFWorkbook,读2007版本,.xlsx
* @param file
* @return
* @throws IOException
*/
public static XSSFWorkbook getXSSFWorkbookForXLSX(File file) throws IOException{
BufferedInputStream in = new BufferedInputStream(new FileInputStream(file));
XSSFWorkbook XSSFwb = new XSSFWorkbook(new FileInputStream(file));
in.close();
return XSSFwb;
}
}
/**
* 传入File和文件名,创建Workbook类
* @param file
* @param fileName
* @return
* @throws IOException
*/
public static Workbook createWorkbook(File file,String fileName) throws IOException{
return ExcelFactory.createExcel(file, fileName);//调用工厂方法,返回对象
}
}
下载整个工具例子请去下载,谢谢各位支持,欢迎提意见,改善不足。

博客介绍了如何使用poi处理Excel数据导入时遇到的2003和2007版本兼容性问题。由于2007版Excel采用XML格式,需用特殊方式处理。博主分享了一个简单工厂方法来根据文件类型进行差异化处理,并提供完整工具示例以供下载,期待反馈和建议。
697

被折叠的 条评论
为什么被折叠?



