]> source.dussan.org Git - poi.git/commitdiff
Add some write/change code as well for Groovy
authorNick Burch <nick@apache.org>
Thu, 15 Feb 2018 22:16:07 +0000 (22:16 +0000)
committerNick Burch <nick@apache.org>
Thu, 15 Feb 2018 22:16:07 +0000 (22:16 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1824378 13f79535-47bb-0310-9956-ffa450edef68

src/examples/groovy/SpreadSheetDemo.groovy

index 379cb9f7d344c7d4b02cd8ee6641a6a3d837216d..dc683b1434e79099cb801d64570cb316942ac7c0 100644 (file)
@@ -1,17 +1,91 @@
 import org.apache.poi.ss.usermodel.*
+import org.apache.poi.ss.util.*
 import java.io.File
 
 if (args.length == 0) {
    println "Use:"
-   println "   SpreadSheetDemo [excel-file]"
+   println "   SpreadSheetDemo <excel-file> [output-file]"
    return 1
 }
 
-File f = new File(args[0]);
+File f = new File(args[0])
+DataFormatter formatter = new DataFormatter()
 WorkbookFactory.create(f,null,true).withCloseable { workbook ->
    println "Has ${workbook.getNumberOfSheets()} sheets"
-   0.step workbook.getNumberOfSheets(), 1, { sheetNum ->
-     println "Sheet ${sheetNum} is called ${workbook.getSheetName(sheetNum)}"
+
+   // Dump the contents of the spreadsheet
+   (0..<workbook.getNumberOfSheets()).each { sheetNum ->
+      println "Sheet ${sheetNum} is called ${workbook.getSheetName(sheetNum)}"
+
+      def sheet = workbook.getSheetAt(sheetNum)
+      sheet.each { row ->
+         def nonEmptyCells = row.grep { c -> c.getCellType() != Cell.CELL_TYPE_BLANK }
+         println " Row ${row.getRowNum()} has ${nonEmptyCells.size()} non-empty cells:"
+         nonEmptyCells.each { c ->
+            def cRef = [c] as CellReference
+            println "  * ${cRef.formatAsString()} = ${formatter.formatCellValue(c)}"
+         }
+      }
    }
+
+   // Add two new sheets and populate
+   CellStyle headerStyle = makeHeaderStyle(workbook)
+   Sheet ns1 = workbook.createSheet("Generated 1")
+   exportHeader(ns1, headerStyle, null, ["ID","Title","Num"] as String[])
+   ns1.createRow(1).createCell(0).setCellValue("TODO - Populate with data")
+
+   Sheet ns2 = workbook.createSheet("Generated 2")
+   exportHeader(ns2, headerStyle, "This is a demo sheet", 
+                ["ID","Title","Date","Author","Num"] as String[])
+   ns2.createRow(2).createCell(0).setCellValue(1)
+   ns2.createRow(3).createCell(0).setCellValue(4)
+   ns2.createRow(4).createCell(0).setCellValue(1)
+
+   // Save
+   File output = File.createTempFile("output-", (f.getName() =~ /(\.\w+$)/)[0][0])
+   output.withOutputStream { os -> workbook.write(os) }
+   println "Saved as ${output}"
 }
 
+CellStyle makeHeaderStyle(Workbook wb) {
+   int HEADER_HEIGHT = 18
+   CellStyle style = wb.createCellStyle()
+
+   style.setFillForegroundColor(IndexedColors.AQUA.getIndex())
+   style.setFillPattern(FillPatternType.SOLID_FOREGROUND)
+
+   Font font = wb.createFont()
+   font.setFontHeightInPoints((short)HEADER_HEIGHT)
+   font.setBold(true)
+   style.setFont(font)
+
+   return style
+}
+void exportHeader(Sheet s, CellStyle headerStyle, String info, String[] headers) {
+   Row r
+   int rn = 0
+   int HEADER_HEIGHT = 18
+   // Do they want an info row at the top?
+   if (info != null && !info.isEmpty()) {
+      r = s.createRow(rn)
+      r.setHeightInPoints(HEADER_HEIGHT+1)
+      rn++
+
+      Cell c = r.createCell(0)
+      c.setCellValue(info)
+      c.setCellStyle(headerStyle)
+      s.addMergedRegion(new CellRangeAddress(0,0,0,headers.length-1))
+   }
+   // Create the header row, of the right size
+   r = s.createRow(rn)
+   r.setHeightInPoints(HEADER_HEIGHT+1)
+   // Add the column headings
+   headers.eachWithIndex { col, idx ->
+      Cell c = r.createCell(idx)
+      c.setCellValue(col)
+      c.setCellStyle(headerStyle)
+      s.autoSizeColumn(idx)
+   }
+   // Make all the columns filterable
+   s.setAutoFilter(new CellRangeAddress(rn, rn, 0, headers.length-1))
+}