欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

poi操作Excel

程序员文章站 2022-07-13 11:52:36
...

1.简介
  通过HSSF(Horrible SpreadSheet Format),可以用纯Java代码来读取、写入、修改Excel文件。
  HSSF两个API:usermodel和eventusermodel ,用户模型和事件-用户模型。

2.Excel结构
  HSSFWorkbook  excell的文档对象                  HSSFDataFormat     日期格式
  HSSFSheet     excell的表单                           HSSFCellStyle      cell样式
  HSSFRow       excell的行                               HSSFDateUtil       日期
  HSSFCell      excell的格子单元                        HSSFPrintSetup     打印
  HSSFFont      excell字体                                HSSFErrorConstants 错误信息表
  HSSFName      名称

 

3.操作

  (1) 利用poi把数据库中的数据导入到Excel中

String sql ="select * from stu" ;
// 获得结果集rs,conn就不用说了
ResultSet rs = conn.createPreparedStatement().executeQuery(sql) ;
// 结果集的总列数
int CountColumnNum = rs.getMetaData().getColumnCount() ;
// 对应数据库表的标题行
String lieNames[]={"id","name","sex","age","class"};
// 创建Excel文档
HSSFWorkbook wb = new HSSFWorkbook() ;
// sheet 对应一个sheet1表
HSSFSheet sheet = wb.createSheet("sheet1") ;

// 设置excel表中的样式1
HSSFCellStyle headCellStyle = wb.createCellStyle();
headCellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
headCellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
headCellStyle.setWrapText(true);
// 设置excel表中的字体
HSSFFont font = wb.createFont();
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
headCellStyle.setFont(font);
// 设置excel表中的样式2       
HSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
cellStyle.setWrapText(true);

if(int hang = 0; hang < rs.size();hang ++){
    // 声明一个新行
    HSSFRow row = sheet.createRow((short) hang);
    if(hang == 0){
        for(int lie = 0;lie < CountColumnNum; lie ++){
            // 声明一个单元格
            HSSFCell cell = row.createCell((short) lie);
            // 为该单元格设置值
            cell.setCellValue(new HSSFRichTextString(lieNames[lie]));
            // 把样式1加入到列表头
            cell.setCellStyle(headCellStyle);
        }
    } else {
        for(int j = 0;j < CountColumnNum; j++) {
            HSSFCell cell = row.createCell((short) j);
            cell.setCellValue(new HSSFRichTextString(rs.getString(j+1)));
            // 把样式2加入到数据中
            cell.setCellStyle(cellStyle);
        }
    }
    // 创建文件输出流,输出Excel表格
    OutputStream out = new FileOutputStream("D:\\stu.xls") ;
    wb.write(out) ;
    out.close() ;
    rs.close();
    conn.close();
} 

(2)操作日期格式:

DataFormat df = wb.createDataFormat();
cellStyle.setDataFormat(df.getFormat("#,##0.0")); 

(3)Excel版本03/07操作

Workbook wb= null;
       try {
            wb= new XSSFWorkbook(filePath); //支持2007
        } catch (Exception ex) {
            wb= new HSSFWorkbook(new FileInputStream(filePath)); //支持2003及以前
        }

保存操作:07的后缀是xlsx
String filename = "d://workbook.xls";
       if (wb instanceof XSSFWorkbook) {
        filename = filename + "x";
       }

(4)读取Excel时:

 

wb.getNumberOfSheets(); // 获得Excel中工作表个数
sheet.getPhysicalNumberOfRows(); // 获得行数
row.getLastCellNum();// 获得行的列数

(5)别的读取、写入Excel操作

//读取时,先获得一个Excel文件输入流
POIFSFileSystem fs=new POIFSFileSystem(new FileInputStream("d:/workbook.xls"));
HSSFWorkbook wb = new HSSFWorkbook(fs);
// 创建文件输出流,输出Excel表格保存在D:\\stu.xls
  OutputStream out = new FileOutputStream("D:\\stu.xls") ;