Java 中如何把 Excel 转换成 csv
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()。
英文版