1

我正在使用 Univocity 解析器将结果集转换为 CSV。如果字段存在于结果集中,我只希望用户提供的字段出现在输出 CSV 中。如果结果集中不存在该字段,则相应的列应为空白。我有不修改 SQL 查询的限制。

我正在使用 excludeFields() 方法,但它使输出 CSV 中的字段值以及分隔符为空白。

例子:

Name, Age, Email
Joe, 20, joe@example.com

应用 excludeFields("Age") 后。由于 setHeaders() 方法存在一些已知问题,因此我使用自己的逻辑来设置标题。

Name, Email
Joe, , joe@example.com

但我希望它是这样的:

Name, Email
Joe, joe@example.com

有什么办法可以实现吗?

4

1 回答 1

1

目前,作者由您定义的标题控制。字段选择只会使编写者在未选择的列中打印出空白。

下一个版本将在编写时提供列重新排序,这应该可以满足您的需求。如果您可以使用 2.5.0-SNAPSHOT 它应该已经工作:

ResultSet resultSet = statement.executeQuery("SELECT * FROM users");

CsvWriterSettings csvWriterSettings = new CsvWriterSettings();
csvWriterSettings.excludeFields("Age");
csvWriterSettings.setHeaderWritingEnabled(true);
csvWriterSettings.setColumnReorderingEnabled(true); //this does the trick

CsvRoutines csvRoutines = new CsvRoutines(csvWriterSettings);
csvRoutines.write(resultSet, output);

希望能帮助到你!

于 2017-06-20T18:45:23.037 回答