{"id":582,"date":"2011-03-19T00:27:12","date_gmt":"2011-03-18T22:27:12","guid":{"rendered":"https:\/\/bob-team.de\/wordpress\/?p=582"},"modified":"2018-01-29T11:36:18","modified_gmt":"2018-01-29T10:36:18","slug":"groovy-csv-und-excel","status":"publish","type":"post","link":"https:\/\/bob-team.de\/wordpress\/2011\/03\/19\/groovy-csv-und-excel\/","title":{"rendered":"Groovy, CSV und Excel"},"content":{"rendered":"<p>Eine Datenmenge muss zur weiteren Bearbeitung als CSV-Datei exportiert werden. Die erzeugte Datei sollte per Doppelklick direkt in Excel 2003 ge\u00f6ffnet werden k\u00f6nnen. Der urspr\u00fcngliche Zeichensatz UTF-8 soll f\u00fcr den Windows-Anwender entsprechend konvertiert werden.<!--more--><\/p>\n<pre lang=\"groovy\">package bob.pokolm\r\n\r\nDATEN = [\r\n    [\"Eins\", 1, \"       1,11\", \"        erste   Zeile   \", null],\r\n    [\"2\", \"null\", 2.02, \"2. Zeile\\nmit Umbruch\", \"  22.3.2011 \"],\r\n    [3, 333, null, \"dritter \\\"Versuch\\\"\", \"Zeile mit ; Trenner\"]\r\n]\r\n\r\nTRENNER = ';'\r\nCRLR = '\\r\\n'\r\n\r\ncsvFile = new File('c:\/temp\/CsvExcelGroovyDemo.csv')\r\n\r\n\/\/ Daten bereinigen\r\ncleanup = {\r\n    output = new String()\r\n    if (it == null || it.toString().toLowerCase() == 'null') {\r\n        output = ''\r\n    } else {\r\n        output = it.toString().trim()\r\n        output = output.replaceAll('[ ]+', ' ')\r\n    }\r\n    return output\r\n}\r\n\r\n\/\/ auf Sonderfall reagieren\r\nescape = {\r\n    input = it.toString()\r\n    if (input.contains(\"\\\"\")) {\r\n        input = input.replace(\"\\\"\",\"\\\"\\\"\")\r\n    }\r\n    return \"\\\"${input}\\\"\"\r\n}\r\n\r\n\/\/ Daten exportieren\r\nDATEN.each {\r\n    sb = new StringBuilder()\r\n    it.eachWithIndex { value, idx ->\r\n        if (idx > 0) {\r\n            sb.append(TRENNER)\r\n        }\r\n        sb.append(escape(cleanup(value)))\r\n    }\r\n    sb.append(CRLR)\r\n    csvFile.append(sb.toString(), 'Cp1252')\r\n}<\/pre>\n<p>Das Ergebnis sieht in Excel wie folgt aus. Die automatische Erkennung des Werts 2.02 als 2. Februar in Zelle C2 k\u00f6nnte durch eine weitere Zeile in der Methode &#8222;cleanup&#8220; verhindert werden. Wird in der Spalte kein Datum, sondern eine Dezimalzahl mit Punkt als Dezimaltrenner erwartet, nimmt <code>output = output.replaceAll(\"([0-9]+)\\\\.([0-9]+)\", '$1,$2')<\/code> beispielsweise eine entsprechende Anpassung als 3. Zeile in dem Else-Block vor.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/bob-team.de\/wordpress\/wp-content\/uploads\/2011\/03\/groovy_csv_excel.gif\" alt=\"\" title=\"Screenshot Excel-Datei\" width=\"380\" class=\"alignnone size-full wp-image-586\" srcset=\"https:\/\/bob-team.de\/wordpress\/wp-content\/uploads\/2011\/03\/groovy_csv_excel.gif 423w, https:\/\/bob-team.de\/wordpress\/wp-content\/uploads\/2011\/03\/groovy_csv_excel-300x81.gif 300w\" sizes=\"(max-width: 423px) 100vw, 423px\" \/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Eine Datenmenge muss zur weiteren Bearbeitung als CSV-Datei exportiert werden. Die erzeugte Datei sollte per Doppelklick direkt in Excel 2003 ge\u00f6ffnet werden k\u00f6nnen. Der urspr\u00fcngliche Zeichensatz UTF-8 soll f\u00fcr den Windows-Anwender entsprechend konvertiert werden.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[51],"class_list":["post-582","post","type-post","status-publish","format-standard","hentry","category-java","tag-groovy","entry"],"_links":{"self":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/582","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/comments?post=582"}],"version-history":[{"count":10,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/582\/revisions"}],"predecessor-version":[{"id":2264,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/posts\/582\/revisions\/2264"}],"wp:attachment":[{"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/media?parent=582"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/categories?post=582"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/bob-team.de\/wordpress\/wp-json\/wp\/v2\/tags?post=582"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}