当前位置:   article > 正文

浏览器生成Excel文件 ,Apache POI 使用方法及示例

浏览器生成Excel文件 ,Apache POI 使用方法及示例

Apache POI 是 Apache 软件基金会的开源项目,它提供 API 用于读取和写入 Microsoft Office 格式的文件,如 Excel、Word 等。在 Spring Boot 应用中,结合使用 Apache POI 可以方便地处理 Excel 文件

一 引入依赖:
  1. <dependency>
  2. <groupId>org.apache.poi</groupId>
  3. <artifactId>poi</artifactId>
  4. <version>4.1.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>org.apache.poi</groupId>
  8. <artifactId>poi-ooxml</artifactId>
  9. <version>4.1.2</version>
  10. </dependency>

读取Excel示例:

  1. import org.apache.poi.ss.usermodel.*; // 导入Apache POI的通用接口
  2. import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 导入用于处理.xlsx文件的类
  3. import java.io.File;
  4. import java.io.FileInputStream;
  5. import java.io.IOException;
  6. public class ExcelReader {
  7. public static void main(String[] args) {
  8. try (FileInputStream fis = new FileInputStream(new File("path/to/your/excel/file.xlsx"))) {
  9. // 创建一个工作簿对象,从输入流中读取Excel文件
  10. Workbook workbook = new XSSFWorkbook(fis);
  11. // 获取第一个工作表
  12. Sheet sheet = workbook.getSheetAt(0);
  13. // 遍历工作表中的所有行
  14. for (Row row : sheet) {
  15. // 遍历行中的所有单元格
  16. for (Cell cell : row) {
  17. // 获取单元格的值,并打印
  18. String cellValue = getCellValueAsString(cell);
  19. System.out.print(cellValue + "\t"); // \t 是制表符,用于分隔单元格内容
  20. }
  21. System.out.println(); // 每行结束后换行
  22. }
  23. // 关闭工作簿
  24. workbook.close();
  25. } catch (IOException e) {
  26. // 如果发生IO异常,打印堆栈跟踪
  27. e.printStackTrace();
  28. }
  29. }
  30. /**
  31. * 根据单元格类型获取单元格的值,并返回字符串表示
  32. *
  33. * @param cell 要获取值的单元格
  34. * @return 单元格值的字符串表示
  35. */
  36. private static String getCellValueAsString(Cell cell) {
  37. switch (cell.getCellType()) {
  38. case STRING:
  39. return cell.getStringCellValue(); // 字符串类型直接返回
  40. case NUMERIC:
  41. if (DateUtil.isCellDateFormatted(cell)) {
  42. return DateUtil.formatCellValueToDate(cell).toString(); // 日期类型格式化为字符串
  43. } else {
  44. return Double.toString(cell.getNumericCellValue()); // 数字类型转换为字符串
  45. }
  46. case BOOLEAN:
  47. return Boolean.toString(cell.getBooleanCellValue()); // 布尔类型转换为字符串
  48. case FORMULA:
  49. return cell.getCellFormula(); // 公式类型返回公式字符串
  50. default:
  51. return ""; // 其他类型返回空字符串
  52. }
  53. }
  54. }

三 写入Excel示例:

  1. import org.apache.poi.ss.usermodel.*; // 导入Apache POI的通用接口
  2. import org.apache.poi.xssf.usermodel.XSSFWorkbook; // 导入用于处理.xlsx文件的类
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. public class ExcelWriter {
  6. public static void main(String[] args) {
  7. // 创建一个新的工作簿对象
  8. Workbook workbook = new XSSFWorkbook();
  9. // 在工作簿中创建一个名为"Sheet1"的工作表
  10. Sheet sheet = workbook.createSheet("Sheet1");
  11. // 在工作表中创建第一行
  12. Row row = sheet.createRow(0);
  13. // 在第一行中创建第一个单元格,并设置其值为"Hello, World!"
  14. Cell cell = row.createCell(0);
  15. cell.setCellValue("Hello, World!");
  16. try (FileOutputStream fos = new FileOutputStream("path/to/your/output/excel/file.xlsx")) {
  17. // 将工作簿的内容写入输出流,即写入文件
  18. workbook.write(fos);
  19. // 刷新输出流,确保所有数据都写入文件
  20. fos.flush();
  21. } catch (IOException e) {
  22. // 如果发生IO异常,打印堆栈跟踪
  23. e.printStackTrace();
  24. } finally {
  25. try {
  26. // 关闭工作簿,释放资源
  27. workbook.close();
  28. } catch (IOException e) {
  29. // 如果关闭工作簿时发生异常,打印堆栈跟踪
  30. e.printStackTrace();
  31. }
  32. }
  33. }
  34. }

四 浏览器下载Excel示例(api示例):

  1. import org.apache.poi.xssf.usermodel.XSSFRow;
  2. import org.apache.poi.xssf.usermodel.XSSFSheet;
  3. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  4. import org.springframework.http.HttpStatus;
  5. import org.springframework.http.ResponseEntity;
  6. import org.springframework.web.bind.annotation.GetMapping;
  7. import org.springframework.web.bind.annotation.RestController;
  8. import javax.servlet.http.HttpServletResponse;
  9. import java.io.IOException;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. @RestController
  13. public class StudentExcelController {
  14. @GetMapping("/exportStudents")
  15. public ResponseEntity<Void> exportStudents(HttpServletResponse response) throws IOException {
  16. // 创建Excel文档
  17. XSSFWorkbook workbook = new XSSFWorkbook();
  18. XSSFSheet sheet = workbook.createSheet("学生信息");
  19. // 创建表头
  20. XSSFRow header = sheet.createRow(0);
  21. header.createCell(0).setCellValue("姓名");
  22. header.createCell(1).setCellValue("学号");
  23. header.createCell(2).setCellValue("班级");
  24. header.createCell(3).setCellValue("成绩");
  25. // 填充数据
  26. List<Student> students = getStudentList();
  27. int rowIndex = 1;
  28. for (Student student : students) {
  29. XSSFRow row = sheet.createRow(rowIndex++);
  30. row.createCell(0).setCellValue(student.getName());
  31. row.createCell(1).setCellValue(student.getStudentId());
  32. row.createCell(2).setCellValue(student.getClassName());
  33. row.createCell(3).setCellValue(student.getScore());
  34. }
  35. // 设置响应头信息
  36. response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
  37. response.setHeader("Content-Disposition", "attachment; filename=students.xlsx");
  38. // 将Excel文档写入响应流中
  39. workbook.write(response.getOutputStream());
  40. workbook.close(); // 记得关闭workbook
  41. return new ResponseEntity<>(HttpStatus.OK);
  42. }
  43. // 模拟获取学生数据
  44. private List<Student> getStudentList() {
  45. List<Student> students = new ArrayList<>();
  46. students.add(new Student("张三", "20230001", "一班", 90));
  47. students.add(new Student("李四", "20230002", "二班", 85));
  48. students.add(new Student("王五", "20230003", "三班", 92));
  49. return students;
  50. }
  51. // 学生实体类
  52. static class Student {
  53. private String name;
  54. private String studentId;
  55. private String className;
  56. private double score;
  57. public Student(String name, String studentId, String className, double score) {
  58. this.name = name;
  59. this.studentId = studentId;
  60. this.className = className;
  61. this.score = score;
  62. }
  63. public String getName() {
  64. return name;
  65. }
  66. public String getStudentId() {
  67. return studentId;
  68. }
  69. public String getClassName() {
  70. return className;
  71. }
  72. public double getScore() {
  73. return score;
  74. }
  75. }
  76. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/469317
推荐阅读
相关标签
  

闽ICP备14008679号