利用POI来操作Excel报表

利用POI来操作Excel报表

  • Apache POI是一个开源的Java读写Excel、WORD等微软OLE2组件文档的项目。目前POI已经有了Ruby版本。

  • 结构:

    • HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
    • XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
    • HWPF - 提供读写Microsoft Word DOC97格式档案的功能。
    • XWPF - 提供读写Microsoft Word DOC2003格式档案的功能。
    • HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
    • HDGF - 提供读Microsoft Visio格式档案的功能。
    • HPBF - 提供读Microsoft Publisher格式档案的功能。
    • HSMF - 提供读Microsoft Outlook格式档案的功能。

POI写Excel文件

//1.创建工作簿对象
Workbook wb = new XSSFWorkbook();
//2.创建工作表对象
Sheet sheet = wb.createSheet();
wb.createSheet("工作表名称");
//3.创建工作表中的行对象
Row row = sheet.createRow(1);
//4.创建工作表单元格对象
Cell cell = row.createCell(1);
//5.在单元格中写数据
cell.setCellValue("测试一下单元格");
//创建文件对象,作为工作簿内容的输出文件
File f = new File("test.xlsx");
//输出时通过流的形式对外输出
OutputStream os = new FileOutputStream(f);
//将内存中的workbook数据写入到流中
wb.write(os);
wb.close();

POI读Excel文件

//1.从Excel文件中读取信息并转换为工作簿对象
Workbook wb = new XSSFWorkbook("test.xlsx");
//2.获取工作表对象,根据索引获取
Sheet s = wb.getSheetAt(0);
//3.获取行对象,根据索引获取
Row row = s.getRow(3);
//4.获取单元格对象,根据索引获取
Cell cell = row.getCell(1);
//5.根据数据类型获取数据
String data1 = cell.getStringCellValue();
double data2 = cell.getNumericCellValue();
boolean data3 = cell.getBooleanCellValue();
wb.close();

POI制作一个简单的表格(普通方式)

@Test
public void testProjectPoi() throws IOException {
    //1.获取到对应的Excel文件,工作簿文件
    Workbook wb = new XSSFWorkbook();
    //2.创建工作表
    Sheet s = wb.createSheet("题目数据文件");

    //设置通用配置
    //s.setColumnWidth(4,100);
    CellStyle cs_field = wb.createCellStyle();
    cs_field.setAlignment(HorizontalAlignment.CENTER);
    cs_field.setBorderTop(BorderStyle.THIN);
    cs_field.setBorderBottom(BorderStyle.THIN);
    cs_field.setBorderLeft(BorderStyle.THIN);
    cs_field.setBorderRight(BorderStyle.THIN);

    //制作标题
    s.addMergedRegion(new CellRangeAddress(1,1,1,12));

    Row row_1 = s.createRow(1);
    Cell cell_1_1 = row_1.createCell(1);
    cell_1_1.setCellValue("在线试题导出信息");
    //创建一个样式
    CellStyle cs_title = wb.createCellStyle();
    cs_title.setAlignment(HorizontalAlignment.CENTER);
    cs_title.setVerticalAlignment(VerticalAlignment.CENTER);
    cell_1_1.setCellStyle(cs_title);

    //制作表头
    String[] fields = {"题目ID","所属公司ID","所属目录ID","题目简介","题干描述",
    "题干配图","题目分析","题目类型","题目难度","是否经典题","题目状态","审核状态"};
    Row row_2 = s.createRow(2);

    for (int i = 0; i < fields.length; i++) {
    Cell cell_2_temp = row_2.createCell(1 + i); //++
    cell_2_temp.setCellValue(fields[i]);    //++
    cell_2_temp.setCellStyle(cs_field);
    }

    //制作数据区

    List<Question> questionList = new ArrayList<>();
    Question qq = new Question();
    qq.setId("1");
    qq.setPicture("12");
    qq.setReviewStatus("13");
    qq.setAnalysis("14");
    qq.setCatalogId("15");
    qq.setCompanyId("16");
    qq.setDifficulty("17");
    qq.setIsClassic("18");
    qq.setRemark("19");
    qq.setState("21");
    qq.setSubject("31");
    qq.setType("41");
    questionList.add(qq);
    Question qqq = new Question();
    qqq.setId("1");
    qqq.setPicture("12");
    qqq.setReviewStatus("13");
    qqq.setAnalysis("14");
    qqq.setCatalogId("15");
    qqq.setCompanyId("16");
    qqq.setDifficulty("17");
    qqq.setIsClassic("18");
    qqq.setRemark("19");
    qqq.setState("21");
    qqq.setSubject("31");
    qqq.setType("41");
    questionList.add(qqq);


    int row_index = 0;
    for (Question q : questionList) {
    int cell_index = 0;
    Row row_temp = s.createRow(3 + row_index++);

    Cell cell_data_1 = row_temp.createCell(1 + cell_index++);
    cell_data_1.setCellValue(q.getId());    //++
    cell_data_1.setCellStyle(cs_field);

    Cell cell_data_2 = row_temp.createCell(1 + cell_index++);
    cell_data_2.setCellValue(q.getCompanyId());    //++
    cell_data_2.setCellStyle(cs_field);

    Cell cell_data_3 = row_temp.createCell(1 + cell_index++);
    cell_data_3.setCellValue(q.getCatalogId());    //++
    cell_data_3.setCellStyle(cs_field);

    Cell cell_data_4 = row_temp.createCell(1 + cell_index++);
    cell_data_4.setCellValue(q.getRemark());    //++
    cell_data_4.setCellStyle(cs_field);

    Cell cell_data_5 = row_temp.createCell(1 + cell_index++);
    cell_data_5.setCellValue(q.getSubject());    //++
    cell_data_5.setCellStyle(cs_field);

    Cell cell_data_6 = row_temp.createCell(1 + cell_index++);
    cell_data_6.setCellValue(q.getPicture());    //++
    cell_data_6.setCellStyle(cs_field);

    Cell cell_data_7 = row_temp.createCell(1 + cell_index++);
    cell_data_7.setCellValue(q.getAnalysis());    //++
    cell_data_7.setCellStyle(cs_field);

    Cell cell_data_8 = row_temp.createCell(1 + cell_index++);
    cell_data_8.setCellValue(q.getType());    //++
    cell_data_8.setCellStyle(cs_field);

    Cell cell_data_9 = row_temp.createCell(1 + cell_index++);
    cell_data_9.setCellValue(q.getDifficulty());    //++
    cell_data_9.setCellStyle(cs_field);

    Cell cell_data_10 = row_temp.createCell(1 + cell_index++);
    cell_data_10.setCellValue(q.getIsClassic());    //++
    cell_data_10.setCellStyle(cs_field);

    Cell cell_data_11 = row_temp.createCell(1 + cell_index++);
    cell_data_11.setCellValue(q.getState());    //++
    cell_data_11.setCellStyle(cs_field);

    Cell cell_data_12 = row_temp.createCell(1 + cell_index++);
    cell_data_12.setCellValue(q.getReviewStatus());    //++
    cell_data_12.setCellStyle(cs_field);
    }

    //创建一个文件对象,作为excel文件内容的输出文件
    File f = new File("test.xlsx");
    //输出时通过流的形式对外输出,包装对应的目标文件
    OutputStream os = new FileOutputStream(f);
    //将内存中的workbook数据写入到流中
    wb.write(os);
    wb.close();
    os.close();
    }

POI制作一个简单的表格(反射方式)

List<Question> datas = new ArrayList<>();
//把数据写到Excel
//每一行代表一个question对象
for (int i = 0; i < datas.size(); i++) {
    //创建行
    Row row = s.createRow(3 + i);
    //当前行数据
    Question question = datas.get(i);
    //创建每一个单元格,对应有多少个字段属性
    // 2.1获取有多少个字段
    Field[] declaredFields = Question.class.getDeclaredFields();
    // 2.2循环多少个单元格
    for (int j = 0; j < 12; j++) {
        Cell cell = row.createCell(1 + j); //++
        Field tempFiled = declaredFields[j];

        tempFiled.setAccessible(true);
        Object o = tempFiled.get(question);
        if (o != null) {
            cell.setCellValue(o.toString());
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值