在利用Tablesaw进行数据分析和处理后,我想要将所有的表格数据存入同一个.xlsx文件的不同sheet当中。但是Tablesaw只支持将表格写入.csv文件,因此我就需要将.csv文件中的数据读取后存入.xlsx的指定sheet当中。
本文基于EasyExcel库实现上述功能,关于EasyExcel的介绍、安装和基本操作参考:
- 【亲测可用】Java基于EasyExcel将数组数据存入Excel
- 【亲测可用】Java基于EasyExcel读取一维及二维Excel数据并存入数组
本文在以上两篇文章的基础上稍作修改后实现。
需要注意的是,文章中的方法读取到Excel的数据均为Srting字符串格式,因此数字也被存为String类型,将String类型的数字存入Excel文件后会引发警告,因此需要将String类型的数字转化为Double类型,详情请参考:
- Java基于正则化将String类型的数字转化为Double类型
public static void CsvToXlsx(String oripath, String despath, String sheet)
{
ExcelWriter excelWriter = null;
File destFile = new File(despath);
File oriFile = new File(oripath);
File transFile = new File(destFile.getParent(),"trans.xlsx");
try {
if (destFile.exists())
{
//创建中转文件
//追加数据,中转文件与目标文件不能是同一个文件名
//withTemplate()指定模板文件,即复制一份; file() 中间文件名; autoCloseStream() 必须为True,自动关闭输入流
excelWriter = EasyExcel.write().withTemplate(destFile)
//.file() 指定目标文件,不能与模板文件是同一个文件
.file(transFile).autoCloseStream(true).build(); //
}
else
{
excelWriter = EasyExcel.write(destFile).build();
}
WriteSheet writeSheet = EasyExcel.writerSheet(sheet).needHead(false).build();
List
调用CsvToXlsx(String oripath, String despath, String sheet) 即可,若原始文件为.xlsx格式,则需要修改函数importdata(File file)中的.excelType(ExcelTypeEnum.CSV)。
CsvToXlsx(String oripath, String despath, String sheet) 函数的输入参数分别表示:
- oripath:原始文件的路径,即分散的表格文件;
- despath:想要写入目标文件的路径,如果不存在会自动创建;
- sheet:想要写入目标文件中指定sheet的名称。
下面我将以一个简单的案例介绍一下函数的使用方法。
案例介绍假设我有如下两个表格,名称分别为a.csv和b.csv:
运行下面这两句程序,会生成一个名为text.xlsx的文件:
CsvToXlsx("data/a.csv", "data/test.xlsx", "a");
CsvToXlsx("data/b.csv", "data/test.xlsx", "b");
打开文件,可以看到两个表格的内容均写入了文件的不同sheet当中:



