Java使用POI生成Excel文件

╰半橙微兮° 2022-05-31 06:46 456阅读 0赞
目录
  • 代码地址
  • 生成简单Excel文件
  • 案例:学生成绩单
  • 使用模板生成学生成绩单

一、代码地址

点击此处,跳转到本次演示的Demo源码地址


二、生成简单Excel文件

1.导入Jar包

普通项目:
这里写图片描述
Maven项目:
这里写图片描述

2.操作POI的七个步骤

  1. a. 创建一个工作簿workbook
  2. b. 创建一个工作表sheet
  3. c. 创建一个行对象row(下标起始值为0
  4. d. 创建一个单元格对象cell(下标起始值为0
  5. e. 设置单元格的内容
  6. f. 设置单元格的样式(如字体)
  7. g. 保存,关闭流对象

3.代码实现

  1. // a. 创建一个工作簿workbook
  2. Workbook workbook = new HSSFWorkbook();
  3. // b. 创建一个工作表sheet
  4. Sheet sheet = workbook.createSheet();
  5. // c. 创建一个行对象row(下标起始值为0),这里是第4行
  6. Row row = sheet.createRow(3);
  7. // d. 创建一个单元格对象cell(下标起始值为0),这里是第四列
  8. Cell cell = row.createCell(3);
  9. // e. 设置单元格的内容
  10. cell.setCellValue("我的github地址:https://github.com/hdonghong");
  11. // f. 设置单元格的样式(如字体)
  12. CellStyle cellStyle = workbook.createCellStyle();
  13. Font font = workbook.createFont();
  14. font.setFontName("Microsoft YaHei UI");
  15. font.setFontHeightInPoints((short)40);
  16. cellStyle.setFont(font);
  17. cell.setCellStyle(cellStyle);
  18. // g. 保存,关闭流对象,在D盘生成excel测试.xls文件
  19. OutputStream os = new FileOutputStream("D:\\excel测试.xls");
  20. workbook.write(os);
  21. os.close();

三、案例:学生成绩单

1.代码实现(不完整):

  1. /**
  2. * 生成学生成绩单(不使用模板)
  3. * 注意,下面使用的bigTitle、title、text等方法都是关于设置单元格样式的,
  4. * 因加入后妨碍理解代码,在此不作展示,如需要,请自行到我github源码处下载:
  5. * https://github.com/hdonghong/JavaProject/blob/master/business_management/management_parent/management_web/src/test/java/management_web/PoiTest.java
  6. * @throws Exception
  7. */
  8. public void test2() throws Exception {
  9. int cellNo = 1;// 单元格下标
  10. Cell cell = null;// 单元格对象
  11. int rowNo = 0;// 行下标
  12. Row row = null;// 行对象
  13. // 创建工作簿
  14. Workbook workbook = new HSSFWorkbook();
  15. // 创建工作表
  16. Sheet sheet = workbook.createSheet();
  17. // 设置单元格宽
  18. sheet.setColumnWidth(cellNo++, 30*256);
  19. sheet.setColumnWidth(cellNo++, 30*256);
  20. sheet.setColumnWidth(cellNo++, 30*256);
  21. //--------------设置大标题--------------
  22. row = sheet.createRow(rowNo);// 创建大标题的行对象
  23. row.setHeightInPoints(36);// 设置行高
  24. cellNo = 1;// 重置单元格下标为1
  25. cell = row.createCell(cellNo);// 在当前行上创建一个单元格对象
  26. sheet.addMergedRegion(new CellRangeAddress(rowNo, rowNo, cellNo, cellNo+2));// 合并单元格
  27. cell.setCellValue("学生成绩表");// 设置单元格内容
  28. cell.setCellStyle(this.bigTitle(workbook));// 设置单元格样式
  29. //--------------设置小标题--------------
  30. row = sheet.createRow(++rowNo);
  31. row.setHeightInPoints(26.25f);// 设置行高
  32. String titles[] = {
  33. "学号","姓名","成绩(单位:分)"};
  34. // 创建单元格对象,设置内容与样式
  35. for (String title : titles) {
  36. cell = row.createCell(cellNo++);
  37. cell.setCellValue(title);
  38. cell.setCellStyle(this.title(workbook));
  39. }
  40. //--------------模拟数据输出--------------
  41. row = sheet.createRow(++rowNo);
  42. row.setHeightInPoints(24);// 设置行高
  43. cellNo = 1;// 重置单元格下标为1
  44. cell = row.createCell(cellNo++);
  45. cell.setCellValue("200000");// 设置单元格内容,学号200000
  46. cell.setCellStyle(this.text(workbook));
  47. cell = row.createCell(cellNo++);
  48. cell.setCellValue("老王");// 设置单元格内容,老王
  49. cell.setCellStyle(this.text(workbook));
  50. cell = row.createCell(cellNo++);
  51. cell.setCellValue("59.9");// 设置单元格内容,59.9分
  52. cell.setCellStyle(this.text(workbook));
  53. // 保存,关闭流对象,在C盘生成excel测试.xls文件
  54. OutputStream os = new FileOutputStream("D:\\excel测试.xls");
  55. workbook.write(os);
  56. os.close();
  57. }

2.到D盘看运行结果如下

这里写图片描述


四、使用模板生成学生成绩单

1.先配置好模板

这里写图片描述

2.代码实现

  1. /**
  2. * 生成学生成绩单(使用模板)
  3. * @throws Exception
  4. */
  5. public void test3() throws Exception {
  6. int cellNo = 1;// 单元格下标
  7. Cell cell = null;// 单元格对象
  8. int rowNo = 0;// 行下标
  9. Row row = null;// 行对象
  10. // 读取已存在的模板工作簿
  11. Workbook workbook = new HSSFWorkbook(new FileInputStream("D:\\excel模板.xls"));
  12. // 读取工作表
  13. Sheet sheet = workbook.getSheetAt(0);
  14. //--------------设置大标题--------------
  15. // 不需要了
  16. //--------------设置小标题--------------
  17. // 不需要了
  18. //--------------模拟数据输出--------------
  19. row = sheet.createRow(rowNo += 2);// 读取到第三行
  20. row.setHeightInPoints(24);// 设置行高
  21. cellNo = 1;// 重置单元格下标为1
  22. cell = row.createCell(cellNo++);
  23. cell.setCellValue("200000");// 设置单元格内容,学号200000
  24. cell = row.createCell(cellNo++);
  25. cell.setCellValue("老王");// 设置单元格内容,老王
  26. cell = row.createCell(cellNo++);
  27. cell.setCellValue("59.9");// 设置单元格内容,59.9分
  28. // 保存,关闭流对象,在D盘生成excel测试.xls文件
  29. OutputStream os = new FileOutputStream("D:\\excel测试2.xls");
  30. workbook.write(os);
  31. os.close();
  32. }

3.运行结果

这里写图片描述

发表评论

表情:
评论列表 (有 0 条评论,456人围观)

还没有评论,来说两句吧...

相关阅读