关于java导入导出excel2007

由于公司之前用的导入导出excel只支持2003版本的(使用jxl插件)已经不能满足客户的需求,excel2003所能包括的最大数据行数远低于excel2007(几万行和一百多万的区别),所以需要升级导入导出插件是系统能支持excel2007。

我使用的是poi-3.8 jar包,可到http://download.csdn.net/detail/wang524506/4849282下载。

这里介绍我所使用的插件poi,其中主要使用的是xssf。导出关键代码如下(这里数据源是resultset):


FileOutputStream fileOut = new FileOutputStream(path+file);//创建输出流
if (rs == null || rs.size() == 0) {
System.out.println("null result, can't be exported.");
throw new Exception("null result, can't be exported.");
// return false;
}

XSSFWorkbook wb = new XSSFWorkbook();//2007格式
setExcelStyle(wb);// 执行样式初始化

// 标题
String title = es.getSheetName();// p.getPropValue(request,"elasset","elasset.manage",Language);
XSSFSheet sheet = wb.createSheet(title);//2007格式


XSSFRow titleRow0 = sheet.createRow((short) 0);// 创建标题行
XSSFCell titleCell = titleRow0.createCell((short) 0); // 新建一个单元格
titleCell.setCellValue(title);//设置标题

XSSFRow titleRow = sheet.createRow((short) 1);// 创建第一行
XSSFRow titleRow2 = sheet.createRow((short) 2);// 创建第二行
titleRow.setHeightInPoints(20);// 20像素
int titleCount = es.getColusSize();// 列数
// 写标题
for (int k = 0; k < titleCount; k++) {
XSSFCell cell = titleRow.createCell((short) k); // 新建一个单元格
XSSFCell cell2 = titleRow2.createCell((short) k); // 新建一个单元格
// XSSFCell cell = titleRow.createCell((short) k); //2007格式


// cell.setEncoding(HSSFCell.ENCODING_UTF_16); // 中文字符集转换
cell.setCellStyle(titleStyle);// 设置标题样式
cell2.setCellStyle(titleStyle);// 设置标题样式
// cell.setCellValue(new HSSFRichTextString(titleStrs[k])); //
// 为单元格赋值
// cell.setCellValue(wb.getCreationHelper().createRichTextString(""));
cell.setCellType(XSSFCell.CELL_TYPE_STRING);
cell2.setCellType(XSSFCell.CELL_TYPE_STRING);
cell.setCellValue(es.getFieldName(k));
cell2.setCellValue(es.getColusName(k));
sheet.setColumnWidth((short) k, (short) 5000);// 设置列宽
}

int index = 0;
int rownum = 2;
// System.out.println(r.length);
// String tmp = "";


String tmpStr;
int colus = es.getColusSize();// fieldsName.length;//rs.getHashColus().size();
while (rs.next()) {
XSSFRow row = sheet.createRow((short) (++rownum)); // 新建一行
for (int j = 0; j < colus; j++) {
XSSFCell cell = row.createCell((short) j); // 新建一个单元格
tmpStr = es.getFixedValue(j);
if (tmpStr == null)// 导出时,有指定固定值则导固定值
{
tmpStr = rs.getString(es.getFieldName(j));
}
if (es.isNumeric(j))
{
try 
    {
cell.setCellValue(Double.parseDouble(tmpStr));
}
  catch(NumberFormatException e)
    { //System.out.println("出现转换异常");
     //System.out.println(e.getMessage());
//      worksheet.addCell(new Number(j, index + 3, 0.00));
  cell.setCellValue(0.00);  
    }
 //e.printStackTrace(); }
 //  finally{ System.out.println("finally!"); }

}

else
cell.setCellValue(tmpStr);
// worksheet.addCell(new Label(j, index + 3, tmpStr, wcfFC));
}
index++;
}
rs.setCursor(1);
updateCount = rs.size();

} catch (Exception e) {
throw e;
} finally {
wb.write(fileOut);
fileOut.flush();
fileOut.close();
}
return true;
}


导入数据关键代码如下(传入excel2007格式文件,返回ArrayList,传入数据的文件格式由配置文件设置,这里不详细描述):

ArrayList arrkpoolinitList = new ArrayList();
StringBuffer sb = new StringBuffer();
Workbook wb = null;
try {
// 构造Workbook(工作薄)对象
wb = WorkbookFactory.create(new FileInputStream(new File(path)));
} catch (IOException e) {
e.printStackTrace();
} catch (InvalidFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了
Sheet rs = wb.getSheetAt(0);
  int startRowNum = rs.getFirstRowNum();//得到开始行
int endRowNum = rs.getLastRowNum();//得到结束行
int rsColumns = rs.getRow(1).getLastCellNum()-rs.getRow(1).getFirstCellNum();//得到第一行列数
int rowNum = endRowNum-startRowNum+1;//得到行数
//Sheet[] sheet = wb.getSheet();
//if (sheet != null && sheet.length >0) {
// 对每个工作表进行循环
//for (int i = 0; i < sheet.length; i++) {
// 得到当前工作表的行数
//int rowNum = sheet[i].getRows();
int startLine=1;
try {
hbsXml xmlBean = new hbsXml();
startLine=Integer.parseInt(xmlBean.getText("goldentaxImportConfig.xml","startLine"));
if(txtlinkfile!=null)
{
if(txtlinkfile.equals("yes"))//导入LinkFile
{
     startLine=Integer.parseInt(xmlBean.getText("goldentaxImportConfigTmp.xml","startLine"));
}
}
} catch (Exception e) {
startLine=1;
}

for (int j = startLine; j < rowNum; j++) {
// 得到当前行的所有单元格
int columns = rs.getRow(j).getLastCellNum()-rs.getRow(j).getFirstCellNum();//得到第j行列数
Row row = rs.getRow(j);
Kp_pool_Init kppoolinit = new Kp_pool_Init();
if (columns > 0) {
// 对每个单元格进行循环

   if(importLinepojo.getDoc_NoNum()!=-1){
    row.getCell(importLinepojo.getDoc_NoNum()).setCellType(Cell.CELL_TYPE_STRING);
    kppoolinit.setDoc_No(row.getCell(importLinepojo.getDoc_NoNum()).getStringCellValue());
   }
   if(importLinepojo.getSpecNum()!=-1){
    row.getCell(importLinepojo.getSpecNum()).setCellType(Cell.CELL_TYPE_STRING);
    kppoolinit.setSpec(row.getCell(importLinepojo.getSpecNum()).getStringCellValue());
   }
。。。。。。。。。。。。。。。。。
}
arrkpoolinitList.add(kppoolinit);
}

你可能感兴趣的:(java,web)