POI的使用

半腔热情 提交于 2019-12-14 01:17:59

1.依赖

<!-- poi -->
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>4.1.0</version>
    </dependency>

2. 基本使用

//1. 在内存中创建一个excel文件   工作薄
HSSFWorkbook book = new HSSFWorkbook();
//2. 通过book创建Sheet
HSSFSheet sheet03 = book.createSheet("sheet03");
//3. 通过sheet创建row
HSSFRow row = sheet03.createRow(0);//第一行
//4. 通过row 创建 cell
HSSFCell cell = row.createCell(0);//第一列
//5. 在cell中存值
cell.setCellValue("helloworld~~~");
sheet03.autoSizeColumn(0);//第一列宽度自适应
// 存储工作薄
book.write(new File("d:\\test\\test.xls"));
book.close();
// 读取工作薄
HSSFWorkbook book = new HSSFWorkbook(new FileInputStream("d:\\test\\abc.xls"));
// 读取 sheet
HSSFSheet sheet = book.getSheet("sysUsers2");
// 获得 row迭代器
Iterator<Row> rows = sheet.rowIterator();
while(rows.hasNext()){// 遍历所有行
    Row row = rows.next();
    // 获得cell迭代器
    Iterator<Cell> cells = row.cellIterator();
    while(cells.hasNext()){//遍历当前行所有cell
        Cell cell = cells.next();
        String value = cell.getStringCellValue();//获得cell值
        System.out.print(value+"\t");
    }
    System.out.println();
}

3. 样式定制

//样式 ,可以为每个cell追加样式
HSSFCellStyle style = book.createCellStyle();
style.setBorderTop(BorderStyle.THIN); // 上下左右的边框
style.setBorderBottom(BorderStyle.THIN);
style.setBorderLeft(BorderStyle.THIN);
style.setBorderRight(BorderStyle.THIN);
style.setAlignment(HorizontalAlignment.CENTER); // 水平居中
style.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中
Font font = book.createFont();//字体
font.setBold(true); // 粗体
font.setItalic(true);//斜体
font.setUnderline(Font.U_SINGLE);//下划线
font.setStrikeout(true);//删除线
font.setColor(IndexedColors.RED.getIndex()); //字体颜色
font.setFontHeightInPoints((short)20);//字号:20号字体
style.setFont(font);// 设置字体
style.setFillForegroundColor(IndexedColors.YELLOW.getIndex());//背景色
style.setFillPattern(FillPatternType.SOLID_FOREGROUND);//背景色
//追加样式
cell.setCellStyle(style);

4.工具类

// 将任何类型的数据集合,写出到xls中
//                        数据                     sheet名                 响应                文件名
public static void write(List<Object> data, String sheetName,HttpServletResponse response,String fileName) 
    throws NoSuchFieldException, IllegalAccessException, IOException {
    //1.在内存中创建一个excel文件
    HSSFWorkbook hssfWorkbook = new HSSFWorkbook();
    //2.创建工作簿
    HSSFSheet sheet = hssfWorkbook.createSheet(sheetName);
    //3.建立表头
    // 获取数据的所有 属性
    Field[] fields = data.get(0).getClass().getDeclaredFields();
    // 创建表头行
    HSSFRow titlerRow = sheet.createRow(0);
    // 在表头行中 为数据的每个属性 创建一个cell
    for (int i = 0; i < fields.length; i++) {
        HSSFCell cell = titlerRow.createCell(i);
        cell.setCellValue(fields[i].getName());
    }
    // 4. 遍历数据
    for (Object d : data) {
        // 新建数据行
        int lastRowNum = sheet.getLastRowNum();//当前的最后一行的行号
        HSSFRow row = sheet.createRow(lastRowNum+1);
        for (int i = 0; i < fields.length; i++) {
            HSSFCell cell = row.createCell(i);
            // 获取当前 数据中的属性值
            Field f = fields[i];//获取属性
            System.out.println("Field name:"+f.getName());
            f.setAccessible(true);//此private属性允许访问
            String cellValue = String.valueOf(f.get(d));
            cell.setCellValue(cellValue);
        }
    }
    // 在定义好内容后,最后根据内容做每列的宽度自适应
    for (int i = 0; i < fields.length; i++) {
        sheet.autoSizeColumn(i);
    }
    //写出
    String finalFileName = new String(fileName.getBytes(Charset.forName("utf-8")),"iso-8859-1");
    response.setHeader("content-disposition","attachment;filename="+finalFileName);
    hssfWorkbook.write(response.getOutputStream());
    hssfWorkbook.close();
    response.getOutputStream().close();
}
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!