Java本身没有支持将Excel转成csv的类库,虽然用诸如poi和jxl等第三方包可以完成转换工作,但仍需要编写大量代码,并且可重用性较差。
例如,销售数据文件(xls或xlsx),如下图所示:

需要将它转换成没有行头(仅包含数据行)的csv文件,如下图所示:

借助集算器可以很方便地完成这件事。
1. 在集算器中编写脚本excel2csv.dfx:
| A | B | |
|---|---|---|
| 1 | =file("sales.xlsx").xlsimport@t() | /读取excel文件内容 |
| 2 | =file("sales.csv").export@c(A1) | /以逗号作为列分隔符,导出不带行头的csv文件 |
注:集算器会自动识别xls或xlsx文件类型,均使用f.xlsimport()函数读取。
2. 执行脚本,得到不包含行头的csv文件:sales.csv。
3. 集成到java应用中
集算器提供了 JDBC 驱动,将脚本集成代码如下:
public static void testDataServer() {
Connection con = null;
java.sql.PreparedStatement st;
try {
Class.forName("com.esproc.jdbc.InternalDriver");
con = DriverManager.getConnection("jdbc:esproc:local://");
// 调用 excel2csv.dfx 脚本
st = con.prepareCall("call excel2csv()");
st.execute();
System.out.println("finish");
} catch (Exception e) {
System.out.println(e);
} finally {
// 关闭连接
if (con != null) {
try {
con.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
}
集算器与 JAVA 集成的进一步信息可参考:《Java 如何调用 SPL 脚本》。
当导出的csv文件需要包含行头时,只需要在A2中添加函数选项t,即=file("sales.csv").export@tc(A1)。f.export()函数的详细用法见:f.export()。
当需要导出的Excel文件较为复杂时,如,文件数据量较大,不适合或者无法直接读入内存,并且需要读取指定sheet页:sales,还要跳过前三行(多层行头),从第四行开始读取数据。只需要将A1改写为:=file("sales.xlsx").xlsimport@c(;"sales",4:) 。f.xlsimport()函数的详细用法见:f.xlsimport()。
本文介绍了如何在Java中借助集算器高效地将Excel文件转换为csv格式,避免了使用第三方库如poi或jxl时编写大量代码的问题。通过集算器的脚本和JDBC驱动,可以方便地实现数据转换并集成到Java应用中。
686

被折叠的 条评论
为什么被折叠?



