Eine Datenmenge muss zur weiteren Bearbeitung als CSV-Datei exportiert werden. Die erzeugte Datei sollte per Doppelklick direkt in Excel 2003 geöffnet werden können. Der ursprüngliche Zeichensatz UTF-8 soll für den Windows-Anwender entsprechend konvertiert werden.
package bob.pokolm DATEN = [ ["Eins", 1, " 1,11", " erste Zeile ", null], ["2", "null", 2.02, "2. Zeile\nmit Umbruch", " 22.3.2011 "], [3, 333, null, "dritter \"Versuch\"", "Zeile mit ; Trenner"] ] TRENNER = ';' CRLR = '\r\n' csvFile = new File('c:/temp/CsvExcelGroovyDemo.csv') // Daten bereinigen cleanup = { output = new String() if (it == null || it.toString().toLowerCase() == 'null') { output = '' } else { output = it.toString().trim() output = output.replaceAll('[ ]+', ' ') } return output } // auf Sonderfall reagieren escape = { input = it.toString() if (input.contains("\"")) { input = input.replace("\"","\"\"") } return "\"${input}\"" } // Daten exportieren DATEN.each { sb = new StringBuilder() it.eachWithIndex { value, idx -> if (idx > 0) { sb.append(TRENNER) } sb.append(escape(cleanup(value))) } sb.append(CRLR) csvFile.append(sb.toString(), 'Cp1252') } |
Das Ergebnis sieht in Excel wie folgt aus. Die automatische Erkennung des Werts 2.02 als 2. Februar in Zelle C2 könnte durch eine weitere Zeile in der Methode „cleanup“ verhindert werden. Wird in der Spalte kein Datum, sondern eine Dezimalzahl mit Punkt als Dezimaltrenner erwartet, nimmt output = output.replaceAll("([0-9]+)\\.([0-9]+)", '$1,$2')
beispielsweise eine entsprechende Anpassung als 3. Zeile in dem Else-Block vor.