问题描述
我正在使用Select查询从数据库中检索数据并生成可以正常工作的CSV。
在我的FData
类中,我使用下面的方法在其中对csv中的单元格值进行格式化。我的选择查询中有ATYPE
列,我不想用csv编写,或者可能在写完之后只是从csv中清除完整的列ATYPE
字段,使其无法显示。
我可以通过以下方法做到这一点吗?
private static void IFile(File output,sql sql,String query,List<String> columns) {
output.withWriter { writer ->
writer.writeLine(columns.join(CSV_SEParaTOR))
sql.eachRow(query) { rec ->
try {
writer.writeLine(columns.collect { columnName ->
def cell = rec[columnName]
// cell data processing for CSV output...If cell is empty then replace with "" else do the other formating
if (cell != null) {
if (cell.properties["class"] == Timestamp.class)
return IData.OUT_DATE_FORMAT.format(cell)
}
else {
return ""
}
return cell
}.join(CSV_SEParaTOR))
} }
sql.close()
}
}
解决方法
在下面给出的代码中,确切的语法可能是错误的(我对groovy只是一个初学者的了解),但是您将了解如何解决它的想法:
-
在加入之前过滤列名称
writer.writeLine(columns.findAll({ it != 'ATYPE'}).join(CSV_SEPARATOR))
-
在写入之前过滤数据
writer.writeLine(columns.findAll({ it != 'ATYPE'}).collect { columnName -> //... }