现在的位置: 首页 > 综合 > 正文

java读Excel2007

2013年10月06日 ⁄ 综合 ⁄ 共 1999字 ⁄ 字号 评论关闭

以前用java读Excel03,现在要升级到兼容07,搞了两天,搞定了,以前写过读03的,今天把07的贴上来。。。。

第一步,当然是引包了。。。要下载:xmlbeans-2.3.0.jar和poi-bin-3.7-20101029.tar.gz

org.apache.poi.ss.usermodel.DataFormatter,

org.apache.poi.ss.usermodel.DateUtil,

org.apache.poi.hssf.usermodel.HSSFCell,

org.apache.poi.xssf.usermodel.XSSFCell,

org.apache.poi.xssf.usermodel.XSSFRow,

org.apache.poi.xssf.usermodel.XSSFSheet,

org.apache.poi.xssf.usermodel.XSSFWorkbook"

InputStream inputStream = null;              /// 图片字节流 
SmartUpload su = new SmartUpload();          /// 上传文件组件 
jxl.Workbook rwb = null;

// 上传初始化
su.initialize(pageContext);

try{
// 上传文件
su.upload();
com.jspsmart.upload.File file = su.getFiles().getFile(0);

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

for(int j = 0; j < file.getSize(); j++) {
  baos.write(file.getBinaryData(j)); 
}
inputStream = new ByteArrayInputStream(baos.toByteArray());

if(type.equals(".xls")){

rwb = Workbook.getWorkbook(inputStream);
Sheet sheet = rwb.getSheet(0);
int iRow    = sheet.getRows();
int iColumn = sheet.getColumns();

}else if(type.equals("xlsx")){    ///加入对07文档的支持

XSSFWorkbook xwb = null; 
            xwb = new XSSFWorkbook(inputStream);    // 构造 XSSFWorkbook 对象  
// 循环工作表Sheet  
XSSFSheet xSheet = xwb.getSheetAt(0);  
int iRow    = xSheet.getLastRowNum();
XSSFRow xRow = xSheet.getRow(0); 
int iColumn = xRow.getLastCellNum();

行循环时:for(int m=1;m<xSheet.getLastRowNum()+1;m++)

PS:也可以不用new XSSFWorkbook(inputStream)这个构造方法,而是用String fileName = "G:/batchcard.xlsx"; xwb = new XSSFWorkbook(fileName); 

当然,前提是你已经知道要读哪个确定的文件。如果是用户自己上传的,还是上面的吧,呵。。。

这样就成功读到数据了。。。。。。。。。

然后要说具体读哪个单元格的数据:

它不像03一样,可以用sheet.getCell(5,0).getContents();来搞定,07有点麻烦。。。。

首先,要定位到行:XSSFRow xRow = xSheet.getRow(1);然后定位到单元格

if(xRow == null){

            System.out.println("empty");

}else{

            XSSFCell xCell = xRow.getCell(2);

}

对于要读成字符串的,比较简单,可以用System.out.println(xCell.toString());

也可以用:

xCell.setCellType(HSSFCell.CELL_TYPE_STRING);

System.out.println(xCell.getStringCellValue());

对于日期的处理,哎,真麻烦。。。

要定位到单元格之后,

 String s = "";

if(DateUtil.isCellDateFormatted(xCell)){

       s = new DataFormatter().formatRawCellContents(xCell.getNumericCellValue(), 0, "yyyy-mm-dd");// 格式化

}else{

////数据中的日期格式有误

}

抱歉!评论已关闭.