Java 读写 excel 实战完全解析 (2)

ParserStart.java:

import java.util.Collections; import java.util.List; public class ParserStart { public static void main(String[] args) throws Exception{ // 第一步:读取数据 List<StudentScore> dataList = new ExcelReader().read("resource/input.xls"); System.out.println(dataList); // 第二步:排序 Collections.sort(dataList); System.out.println(dataList); // 第三部:写入数据 // new ExcelWriter().write("output.xls", dataList); } }

v0.4 代码:将排序后的数据写入另一个 excel 表中

在 v0.3 版本中,我们完成了数据的排序,接下来我们需要将排好序的数据写到 output.xls 中。

ExcelWriter.java

import java.io.File; import java.io.IOException; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; public class ExcelWriter { public void write(String fileName, List<StudentScore> list) { HSSFWorkbook workbook = new HSSFWorkbook(); HSSFSheet sheet = workbook.createSheet("StudentScore"); // 创建Excel标题行,第一行 HSSFRow headRow = sheet.createRow(0); headRow.createCell(0).setCellValue("姓名"); headRow.createCell(1).setCellValue("分数"); // 往Excel表中遍历写入数据 for (StudentScore studentScore : list) { createCell(studentScore, sheet); } File xlsFile = new File(fileName); try { // 或者以流的形式写入文件 workbook.write(new FileOutputStream(xlsFile)); workbook.write(xlsFile); } catch (IOException e) { // TODO } finally { try { workbook.close(); } catch (IOException e) { // TODO } } } // 创建Excel的一行数据。 private void createCell(StudentScore studentScore, HSSFSheet sheet) { HSSFRow dataRow = sheet.createRow(sheet.getLastRowNum() + 1); dataRow.createCell(0).setCellValue(studentScore.getName()); dataRow.createCell(1).setCellValue(studentScore.getScore()); } }

ParserStart.java

import java.util.Collections; import java.util.List; public class ParserStart { public static void main(String[] args) throws Exception { // 第一步:读取数据 List<StudentScore> dataList = new ExcelReader().read("resource/input.xls"); System.out.println(dataList); // 第二步:排序 Collections.sort(dataList); System.out.println(dataList); // 第三部:写入数据 new ExcelWriter().write("resource/output.xls", dataList); } }

到此,通过几个版本的迭代,我们的需求就实现了。

NOTE:
在本项目中,input.xls 放在 resource 文件夹下面。所以最终版本传入的路径是 resource/input.xls。另外输出的时候这边发现 Eclipse 没有显示出来 output.xls,需要刷新一下。
此外,下载我的项目运行验证时,可能需要修改下 JRE。
另外 jar 包不要引入错位置了:

Java 读写 excel 实战完全解析

当然,还有几个待完善的点需要说明下:

这里没有对输入表的数据做合法性校验,比如分数为负数的情况是否需要做一些提示之类的操作。

这里判断文件不存在时,直接返回 null。而且没有判断文件是否为 excel 文件。这里就交由大家完善。而且这边异常没有做处理,直接 throws。

这里因为简单就没有做抽象。但是考虑可能需要读写 word 或者 pdf 或者其他文件,所以可以考虑引入继承多态。抽取基类。

合理组织文件夹和命名。

另外说一下有什么应用场景吧,其实还真有。

Java 读写 excel 实战完全解析


移动端有多语言,想象一下产品给你一张带有多语言的 excel 表。
如果你一个一个拷贝到多个语言的资源文件下,这效率难以想象。
而如果你用了这一节的内容,分分钟读取 excel 按照你要的规则组装后输出到控制台。
想想就有点 6 啊。

Java 读写 excel 实战完全解析


好了,本期内容到此结束,欢迎留言交流讨论。

如果你有想了解的知识点,欢迎公众号留言私信,也许下一个 pick 的就是你。

源码获取地址:
https://github.com/nesger/JavaSamples/tree/master/ParseExcel

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdygw.html