You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ki...@apache.org on 2019/09/24 23:26:00 UTC
svn commit: r1867502 [4/20] - in /poi/site/publish: ./ components/
components/hmef/ components/hpbf/ components/hpsf/ components/poifs/
components/slideshow/ components/spreadsheet/ devel/ devel/plan/
devel/references/ skin/ skin/images/
Modified: poi/site/publish/components/poi-jvm-languages.html
URL: http://svn.apache.org/viewvc/poi/site/publish/components/poi-jvm-languages.html?rev=1867502&r1=1867501&r2=1867502&view=diff
==============================================================================
--- poi/site/publish/components/poi-jvm-languages.html (original)
+++ poi/site/publish/components/poi-jvm-languages.html Tue Sep 24 23:26:00 2019
@@ -1,785 +1,1366 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
-<html>
-<head>
-<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
-<meta content="Apache Forrest" name="Generator">
-<meta name="Forrest-version" content="0.9">
-<meta name="Forrest-skin-name" content="pelt">
-<title>JVM languages</title>
-<link type="text/css" href="../skin/basic.css" rel="stylesheet">
-<link media="screen" type="text/css" href="../skin/screen.css" rel="stylesheet">
-<link media="print" type="text/css" href="../skin/print.css" rel="stylesheet">
-<link type="text/css" href="../skin/profile.css" rel="stylesheet">
-<script src="../skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="../skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="../skin/fontsize.js" language="javascript" type="text/javascript"></script>
-<link rel="shortcut icon" href="../images/favicon.ico">
-</head>
-<body onload="init()">
-<script type="text/javascript">ndeSetTextSize();</script>
-<div id="top">
-<!--+
- |breadtrail
- +-->
-<div class="breadtrail">
-<a href="https://www.apache.org">Apache Software Foundation</a> > <a href="https://poi.apache.org">Apache POI</a><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
-</div>
-<!--+
- |header
- +-->
-<div class="header">
-<!--+
- |start group logo
- +-->
-<div class="grouplogo">
-<a href="https://www.apache.org"><img class="logoImage" alt="Apache Software Foundation" src="../images/group-logo.png" title="The Apache Software Foundation is a cornerstone of the modern Open Source software ecosystem – supporting some of the most widely used and important software solutions powering today's Internet economy."></a>
-</div>
-<!--+
- |end group logo
- +-->
-<!--+
- |start Project Logo
- +-->
-<div class="projectlogo">
-<a href="https://poi.apache.org"><img class="logoImage" alt="Apache POI" src="../images/project-header.png" title="Apache POI is well-known in the Java field as a library for reading and writing Microsoft Office file formats, such as Excel, PowerPoint, Word, Visio, Publisher and Outlook. It supports both the older (OLE2) and new (OOXML - Office Open XML) formats."></a>
-</div>
-<!--+
- |end Project Logo
- +-->
-<!--+
- |start Search
- +-->
-<div class="searchbox">
-<form action="http://www.google.com/search" method="get" class="roundtopsmall">
-<input value="poi.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
- <input name="Search" value="Search" type="submit">
-</form>
-</div>
-<!--+
- |end search
- +-->
-<!--+
- |start Tabs
- +-->
-<ul id="tabs">
-<li>
-<a class="unselected" href="../index.html">Home</a>
-</li>
-<li>
-<a class="unselected" href="../help/index.html">Help</a>
-</li>
-<li>
-<a class="unselected" href="../components/index.html">Component APIs</a>
-</li>
-<li>
-<a class="unselected" href="../devel/index.html">Getting Involved</a>
-</li>
-</ul>
-<!--+
- |end Tabs
- +-->
-</div>
-</div>
-<div id="main">
-<div id="publishedStrip">
-<!--+
- |start Subtabs
- +-->
-<div id="level2tabs"></div>
-<!--+
- |end Endtabs
- +-->
-<script type="text/javascript"><!--
-document.write("Last Published: " + document.lastModified);
-// --></script>
-</div>
-<!--+
- |breadtrail
- +-->
-<div class="breadtrail">
-
-
- </div>
-<!--+
- |start Menu, mainarea
- +-->
-<!--+
- |start Menu
- +-->
-<div id="menu">
-<div onclick="SwitchMenu('menu_1.1', '../skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
-<div id="menu_1.1" class="menuitemgroup">
-<div class="menuitem">
-<a href="../index.html">Home</a>
-</div>
-<div class="menuitem">
-<a href="../download.html">Download</a>
-</div>
-<div class="menuitem">
-<a href="../changes.html">Changelog</a>
-</div>
-<div class="menuitem">
-<a href="../apidocs/index.html">Javadocs</a>
-</div>
-<div class="menuitem">
-<a href="../text-extraction.html">Text Extraction</a>
-</div>
-<div class="menuitem">
-<a href="../encryption.html">Encryption support</a>
-</div>
-<div class="menuitem">
-<a href="../casestudies.html">Case Studies</a>
-</div>
-<div class="menuitem">
-<a href="../related-projects.html">Related projects</a>
-</div>
-<div class="menuitem">
-<a href="../legal.html">Legal</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.2', '../skin/')" id="menu_1.2Title" class="menutitle">Apache Wide</div>
-<div id="menu_1.2" class="menuitemgroup">
-<div class="menuitem">
-<a href="https://www.apache.org/">Apache Software Foundation</a>
-</div>
-<div class="menuitem">
-<a href="https://www.apache.org/licenses/">License</a>
-</div>
-<div class="menuitem">
-<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
-</div>
-<div class="menuitem">
-<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
-</div>
-<div class="menuitem">
-<a href="https://www.apache.org/security/">Security</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.3', '../skin/')" id="menu_1.3Title" class="menutitle">Component APIs</div>
-<div id="menu_1.3" class="menuitemgroup">
-<div class="menuitem">
-<a href="../components/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../apidocs/dev/index.html">Javadocs</a>
-</div>
-<div onclick="SwitchMenu('menu_1.3.3', '../skin/')" id="menu_1.3.3Title" class="menutitle">Excel (HSSF/XSSF)</div>
-<div id="menu_1.3.3" class="menuitemgroup">
-<div class="menuitem">
-<a href="../components/spreadsheet/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/quick-guide.html">Quick Guide</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/how-to.html">HOWTO</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/converting.html">HSSF to SS Converting</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/formula.html">Formula Support</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/eval.html">Formula Evaluation</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/eval-devguide.html">Eval Dev Guide</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/examples.html">Examples</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/use-case.html">Use Case</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/diagrams.html">Pictorial Docs</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/limitations.html">Limitations</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/user-defined-functions.html">User Defined Functions</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/excelant.html">ExcelAnt Tests</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/hacking-hssf.html">Hacking HSSF</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/record-generator.html">Record Generator</a>
-</div>
-<div class="menuitem">
-<a href="../components/spreadsheet/chart.html">Charts</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.3.4', '../skin/')" id="menu_1.3.4Title" class="menutitle">PowerPoint (HSLF/XSLF)</div>
-<div id="menu_1.3.4" class="menuitemgroup">
-<div class="menuitem">
-<a href="../components/slideshow/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../components/slideshow/quick-guide.html">Quick Guide</a>
-</div>
-<div class="menuitem">
-<a href="../components/slideshow/how-to-shapes.html">HSLF Cookbook</a>
-</div>
-<div class="menuitem">
-<a href="../components/slideshow/xslf-cookbook.html">XSLF Cookbook</a>
-</div>
-<div class="menuitem">
-<a href="../components/slideshow/ppt-file-format.html">PPT File Format</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.3.5', '../skin/')" id="menu_1.3.5Title" class="menutitle">Word (HWPF/XWPF)</div>
-<div id="menu_1.3.5" class="menuitemgroup">
-<div class="menuitem">
-<a href="../components/document/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../components/document/quick-guide.html">HWPF Quick Guide</a>
-</div>
-<div class="menuitem">
-<a href="../components/document/quick-guide-xwpf.html">XWPF Quick Guide</a>
-</div>
-<div class="menuitem">
-<a href="../components/document/docoverview.html">HWPF Format</a>
-</div>
-<div class="menuitem">
-<a href="../components/document/projectplan.html">HWPF Project plan</a>
-</div>
-</div>
-<div class="menuitem">
-<a href="../components/hsmf/index.html">Outlook (HSMF)</a>
-</div>
-<div class="menuitem">
-<a href="../components/diagram/index.html">Visio (HDGF+XDGF)</a>
-</div>
-<div onclick="SwitchMenu('menu_1.3.8', '../skin/')" id="menu_1.3.8Title" class="menutitle">Publisher (HPBF)</div>
-<div id="menu_1.3.8" class="menuitemgroup">
-<div class="menuitem">
-<a href="../components/hpbf/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../components/hpbf/file-format.html">File Format</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.3.9', '../skin/')" id="menu_1.3.9Title" class="menutitle">OLE2 Filesystem (POIFS)</div>
-<div id="menu_1.3.9" class="menuitemgroup">
-<div class="menuitem">
-<a href="../components/poifs/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../components/poifs/how-to.html">How To</a>
-</div>
-<div class="menuitem">
-<a href="../components/poifs/embeded.html">Embedded Documents</a>
-</div>
-<div class="menuitem">
-<a href="../components/poifs/fileformat.html">File System Documentation</a>
-</div>
-<div class="menuitem">
-<a href="../components/poifs/usecases.html">Use Cases</a>
-</div>
-<div class="menuitem">
-<a href="../components/poifs/design.html">Design</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.3.10', '../skin/')" id="menu_1.3.10Title" class="menutitle">OLE2 Document Props (HPSF)</div>
-<div id="menu_1.3.10" class="menuitemgroup">
-<div class="menuitem">
-<a href="../components/hpsf/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../components/hpsf/how-to.html">How To</a>
-</div>
-<div class="menuitem">
-<a href="../components/hpsf/thumbnails.html">Thumbnails</a>
-</div>
-<div class="menuitem">
-<a href="../components/hpsf/internals.html">Internals</a>
-</div>
-<div class="menuitem">
-<a href="../components/hpsf/todo.html">To Do</a>
-</div>
-</div>
-<div class="menuitem">
-<a href="../components/hmef/index.html">TNEF (HMEF) for winmail.dat</a>
-</div>
-<div class="menuitem">
-<a href="../components/oxml4j/index.html">OpenXML4J (OOXML)</a>
-</div>
-<div class="menuitem">
-<a href="../components/logging.html">Logging framework</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.4', '../skin/')" id="menu_1.4Title" class="menutitle">Help</div>
-<div id="menu_1.4" class="menuitemgroup">
-<div class="menuitem">
-<a href="../help/index.html">Mailing Lists</a>
-</div>
-<div class="menuitem">
-<a href="../help/faq.html">FAQ</a>
-</div>
-<div class="menuitem">
-<a href="https://bz.apache.org/bugzilla/buglist.cgi?product=POI">Bug Database</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.5', '../skin/')" id="menu_1.5Title" class="menutitle">Getting Involved</div>
-<div id="menu_1.5" class="menuitemgroup">
-<div class="menuitem">
-<a href="../devel/index.html">How To Build</a>
-</div>
-<div class="menuitem">
-<a href="../devel/subversion.html">Subversion Repository</a>
-</div>
-<div class="menuitem">
-<a href="../devel/guidelines.html">Contribution Guidelines</a>
-</div>
-<div class="menuitem">
-<a href="../devel/who.html">Who We Are</a>
-</div>
-<div onclick="SwitchMenu('menu_1.5.5', '../skin/')" id="menu_1.5.5Title" class="menutitle">Planning Documents</div>
-<div id="menu_1.5.5" class="menuitemgroup">
-<div class="menuitem">
-<a href="../devel/plan/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../devel/plan/vision10.html">1.0 Vision</a>
-</div>
-<div class="menuitem">
-<a href="../devel/plan/vision20.html">2.0 Vision</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.5.6', '../skin/')" id="menu_1.5.6Title" class="menutitle">References</div>
-<div id="menu_1.5.6" class="menuitemgroup">
-<div class="menuitem">
-<a href="../devel/references/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../devel/references/logocontest.html">Logo Submissions</a>
-</div>
-<div class="menuitem">
-<a href="http://sc.openoffice.org/excelfileformat.pdf">XLS spec [PDF]</a>
-</div>
-<div class="menuitem">
-<a href="http://xml.apache.org/cocoon/">Apache Cocoon</a>
-</div>
-</div>
-<div onclick="SwitchMenu('menu_1.5.7', '../skin/')" id="menu_1.5.7Title" class="menutitle">Resolutions</div>
-<div id="menu_1.5.7" class="menuitemgroup">
-<div class="menuitem">
-<a href="../devel/resolutions/index.html">Overview</a>
-</div>
-<div class="menuitem">
-<a href="../devel/resolutions/res001.html">Minimal Coding Standards</a>
-</div>
-</div>
-<div class="menuitem">
-<a href="../devel/historyandfuture.html">History</a>
-</div>
-</div>
-<div id="credit"></div>
-<div id="roundbottom">
-<img style="display: none" class="corner" height="15" width="15" alt="" src="../skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
-<!--+
- |alternative credits
- +-->
-<div id="credit2">
-<a href="https://donate.apache.org/"><img border="0" title="Support Apache" alt="Support Apache - logo" src="../images/support-asf.png" style="width: 125px;height: 125px;"></a><a href="https://www.apache.org/foundation/press/kit/#poweredby"><img border="0" title="powered by POI" alt="powered by POI - logo" src="../images/poweredby-poi-logo.png" style="width: 125px;height: 125px;"></a>
-</div>
-</div>
-<!--+
- |end Menu
- +-->
-<!--+
- |start content
- +-->
-<div id="content">
-<h1>JVM languages</h1>
-<div id="front-matter"></div>
-
-<a name="Intro"></a>
-<h2 class="boxed">Intro</h2>
-<div class="section">
-<p>
- Apache POI can be used with any
- <a href="https://en.wikipedia.org/wiki/List_of_JVM_languages">JVM language</a>
- that can import Java jar files such as Jython, Groovy, Scala, Kotlin, and JRuby.
- </p>
-<ul>
-
-<li>
-<a href="#Jython+example">Jython</a>
-</li>
-
-<li>
-<a href="#Scala+example">Scala</a>
-</li>
-
-<li>
-<a href="#Groovy+example">Groovy</a>
-</li>
-
-<li>
-<a href="#Clojure+example">Clojure</a>
-</li>
-
-</ul>
-</div>
-
-
-
-<a name="Tested+Environments"></a>
-<h2 class="boxed">Tested Environments</h2>
-<div class="section">
-<ul>
-
-<li>
-<a href="http://www.jython.org/">Jython</a> 2.5+ (older versions probably work, but are untested)</li>
-
-<li>
-<a href="http://www.scala-lang.org/">Scala</a> 2.x</li>
-
-<li>
-<a href="http://groovy-lang.org/">Groovy</a> 2.4 (anything from 1.6 onwards ought to work, but only the latest 2.4 releases have been tested by us)</li>
-
-<li>
-<a href="http://clojure.org/">Clojure</a> 1.5.1+</li>
-
-</ul>
-<p>If you use POI in a different language (Kotlin, JRuby, ...) and would like to share a <em>Hello POI!</em> example,
- please <a href="https://helpwanted.apache.org/task.html?856abd21">share</a> it.</p>
-<p>Please <a href="../help/index.html">let us know</a> if you use POI in an environment not listed here</p>
-</div>
-
- <!-- FIXME: Need to make each language section expandable/collapseable so that users can compare their language to Java on one screen. See http://jsfiddle.net/eJX8z/ for an example implementation. -->
-
-<a name="Java+code"></a>
-<h2 class="boxed">Java code</h2>
-<div class="section">
-<a name="POILanguageExample.java"></a>
-<h3 class="boxed">POILanguageExample.java</h3>
-<pre class="code"> <!-- lang="java" -->
- // include poi-{version}-{yyyymmdd}.jar, poi-ooxml-{version}-{yyyymmdd}.jar,
- // and poi-ooxml-schemas-{version}-{yyyymmdd}.jar on Java classpath
-
- // Import the POI classes
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.OutputStream;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.usermodel.WorkbookFactory;
- import org.apache.poi.ss.usermodel.DataFormatter;
-
- // Read the contents of the workbook
- File f = new File("SampleSS.xlsx");
- Workbook wb = WorkbookFactory.create(f);
- DataFormatter formatter = new DataFormatter();
- int i = 1;
- int numberOfSheets = wb.getNumberOfSheets();
- for ( Sheet sheet : wb ) {
- System.out.println("Sheet " + i + " of " + numberOfSheets + ": " + sheet.getSheetName());
- for ( Row row : sheet ) {
- System.out.println("\tRow " + row.getRowNum());
- for ( Cell cell : row ) {
- System.out.println("\t\t"+ cell.getAddress().formatAsString() + ": " + formatter.formatCellValue(cell));
- }
- }
- }
-
- // Modify the workbook
- Sheet sh = wb.createSheet("new sheet");
- Row row = sh.createRow(7);
- Cell cell = row.createCell(42);
- cell.setActiveCell(true);
- cell.setCellValue("The answer to life, the universe, and everything");
-
- // Save and close the workbook
- OutputStream fos = new FileOutputStream("SampleSS-updated.xlsx");
- wb.write(fos);
- fos.close();
- </pre>
-</div> <!-- Java code -->
-
-
-<a name="Jython+example"></a>
-<h2 class="boxed">Jython example</h2>
-<div class="section">
-<pre class="code"> <!-- lang="python" -->
- # Add <a href="../components/">poi jars</a> onto the python classpath or add them at run time
- import sys
- for jar in ('poi', 'poi-ooxml', 'poi-ooxml-schemas'):
- sys.path.append('/path/to/%s-3.14-20160307.jar')
-
- from java.io import File, FileOutputStream
- from contextlib import closing
-
- # Import the POI classes
- from org.apache.poi.ss.usermodel import <a href="../apidocs/dev/org/apache/poi/ss/usermodel/WorkbookFactory.html">WorkbookFactory</a>, <a href="../apidocs/dev/org/apache/poi/ss/usermodel/DataFormatter.html">DataFormatter</a>
-
- # Read the contents of the workbook
- wb = WorkbookFactory.create(File('<a href="https://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/SampleSS.xlsx">SampleSS.xlsx</a>'))
- formatter = DataFormatter()
- for i, sheet in enumerate(wb, start=1):
- print('Sheet %d of %d: %s'.format(i, wb.numberOfSheets, sheet.sheetName))
- for row in sheet:
- print('\tRow %i' % row.rowNum)
- for cell in row:
- print('\t\t%s: %s' % (cell.address, formatter.formatCellValue(cell)))
-
- # Modify the workbook
- sh = wb.createSheet('new sheet')
- row = sh.createRow(7)
- cell = sh.createCell(42)
- cell.activeCell = True
- cell.cellValue = 'The answer to life, the universe, and everything'
-
- # Save and close the workbook
- with closing(FileOutputStream('SampleSS-updated.xlsx')) as fos:
- wb.write(fos)
- wb.close()
- </pre>
-<p>There are several websites that have examples of using Apache POI in Jython projects:
- <a href="https://wiki.python.org/jython/PoiExample">python.org</a>,
- <a href="http://www.jython.org/jythonbook/en/1.0/appendixB.html#working-with-spreadsheets">jython.org</a>, and many others.
- </p>
-</div>
-
-
-<a name="Scala+example"></a>
-<h2 class="boxed">Scala example</h2>
-<div class="section">
-<a name="build.sbt"></a>
-<h3 class="boxed">build.sbt</h3>
-<pre class="code"> <!-- lang="scala" -->
- // Add the POI core and OOXML support dependencies into your build.sbt
- libraryDependencies ++= Seq(
- "org.apache.poi" % "poi" % "3.15-beta2",
- "org.apache.poi" % "poi-ooxml" % "3.15-beta2",
- "org.apache.poi" % "poi-ooxml-schemas" "3.15-beta2"
- )
- </pre>
-<a name="XSSFMain.scala"></a>
-<h3 class="boxed">XSSFMain.scala</h3>
-<pre class="code"> <!-- lang="scala" -->
- // Import the required classes
- import org.apache.poi.ss.usermodel.{<a href="../apidocs/dev/org/apache/poi/ss/usermodel/WorkbookFactory.html">WorkbookFactory</a>, <a href="../apidocs/dev/org/apache/poi/ss/usermodel/DataFormatter.html">DataFormatter</a>}
- import java.io.{File, FileOutputStream}
-
- object XSSFMain extends App {
-
- // Automatically convert Java collections to Scala equivalents
- import scala.collection.JavaConversions._
-
- // Read the contents of the workbook
- val workbook = WorkbookFactory.create(new File("<a href="https://svn.apache.org/viewvc/poi/trunk/test-data/spreadsheet/SampleSS.xlsx">SampleSS.xlsx</a>"))
- val formatter = new DataFormatter()
- for {
- // Iterate and print the sheets
- (sheet, i) <- workbook.zipWithIndex
- _ = println(s"Sheet $i of ${workbook.getNumberOfSheets}: ${sheet.getSheetName}")
-
- // Iterate and print the rows
- row <- sheet
- _ = println(s"\tRow ${row.getRowNum}")
-
- // Iterate and print the cells
- cell <- row
- } {
- println(s"\t\t${cell.getCellAddress}: ${formatter.formatCellValue(cell)}")
- }
-
- // Add a sheet to the workbook
- val sheet = workbook.createSheet("new sheet")
- val row = sheet.createRow(7)
- val cell = row.createCell(42)
- cell.setAsActiveCell()
- cell.setCellValue("The answer to life, the universe, and everything")
-
- // Save the updated workbook as a new file
- val fos = new FileOutputStream("SampleSS-updated.xlsx")
- workbook.write(fos)
- workbook.close()
- }
- </pre>
-</div>
-
-
-<a name="Groovy+example"></a>
-<h2 class="boxed">Groovy example</h2>
-<div class="section">
-<a name="build.gradle"></a>
-<h3 class="boxed">build.gradle</h3>
-<pre class="code"> <!-- lang="groovy" -->
-// Add the POI core and OOXML support dependencies into your gradle build,
-// along with all of Groovy so it can run as a standalone script
-repositories {
- mavenCentral()
-}
-dependencies {
- runtime 'org.codehaus.groovy:groovy-all:2.4.7'
- runtime 'org.apache.poi:poi:3.14'
- runtime 'org.apache.poi:poi-ooxml:3.14'
-}
- </pre>
-<a name="SpreadSheetDemo.groovy"></a>
-<h3 class="boxed">SpreadSheetDemo.groovy</h3>
-<pre class="code"> <!-- lang="groovy" -->
-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> [output-file]"
- return 1
-}
-
-File f = new File(args[0])
-DataFormatter formatter = new DataFormatter()
-WorkbookFactory.create(f,null,true).withCloseable { workbook ->
- println "Has ${workbook.getNumberOfSheets()} sheets"
-
- // 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))
-}
- </pre>
-</div>
-
-
-<a name="Clojure+example"></a>
-<h2 class="boxed">Clojure example</h2>
-<div class="section">
-<a name="SpreadSheetDemo.clj"></a>
-<h3 class="boxed">SpreadSheetDemo.clj</h3>
-<pre class="code"> <!-- lang="clojure" -->
-(ns poi.core
- (:gen-class)
- (:use [clojure.java.io :only [input-stream]])
- (:import [org.apache.poi.ss.usermodel WorkbookFactory DataFormatter]))
-
-
-(defn sheets [wb] (map #(.getSheetAt wb %1) (range 0 (.getNumberOfSheets wb))))
-
-(defn print-all [wb]
- (let [df (DataFormatter.)]
- (doseq [sheet (sheets wb)]
- (doseq [row (seq sheet)]
- (doseq [cell (seq row)]
- (println (.formatAsString (.getAddress cell)) ": " (.formatCellValue df cell)))))))
-
-(defn -main [& args]
- (when-let [name (first args)]
- (let [wb (WorkbookFactory/create (input-stream name))]
- (print-all wb))))
- </pre>
-</div>
-
-<p align="right">
-<font size="-2">by Javen O'Neal</font>
-</p>
-</div>
-<!--+
- |end content
- +-->
-<div class="clearboth"> </div>
-</div>
-<div id="footer">
-<!--+
- |start bottomstrip
- +-->
-<div class="lastmodified">
-<script type="text/javascript"><!--
-document.write("Last Published: " + document.lastModified);
-// --></script>
-</div>
-<div class="copyright">
- Copyright ©
- 2001-2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>
-</div>
-<div id="feedback">
- Send feedback about the website to:
- <a id="feedbackto" href="mailto:dev@poi.apache.org?subject=Feedback%C2%A0components/poi-jvm-languages.html">dev@poi.apache.org</a>
-</div>
-<!--+
- |end bottomstrip
- +-->
-</div>
-</body>
-</html>
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+<head>
+<META http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<meta content="Apache Forrest" name="Generator">
+<meta name="Forrest-version" content="0.9">
+<meta name="Forrest-skin-name" content="pelt">
+<title>JVM languages</title>
+<link type="text/css" href="../skin/basic.css" rel="stylesheet">
+<link media="screen" type="text/css" href="../skin/screen.css" rel="stylesheet">
+<link media="print" type="text/css" href="../skin/print.css" rel="stylesheet">
+<link type="text/css" href="../skin/profile.css" rel="stylesheet">
+<script src="../skin/getBlank.js" language="javascript" type="text/javascript"></script><script src="../skin/getMenu.js" language="javascript" type="text/javascript"></script><script src="../skin/fontsize.js" language="javascript" type="text/javascript"></script>
+<link rel="shortcut icon" href="../images/favicon.ico">
+</head>
+<body onload="init()">
+<script type="text/javascript">ndeSetTextSize();</script>
+<div id="top">
+<!--+
+ |breadtrail
+ +-->
+<div class="breadtrail">
+<a href="https://www.apache.org">Apache Software Foundation</a> > <a href="https://poi.apache.org">Apache POI</a><script src="../skin/breadcrumbs.js" language="JavaScript" type="text/javascript"></script>
+</div>
+<!--+
+ |header
+ +-->
+<div class="header">
+<!--+
+ |start group logo
+ +-->
+<div class="grouplogo">
+<a href="https://www.apache.org"><img class="logoImage" alt="Apache Software Foundation" src="../images/group-logo.png" title="The Apache Software Foundation is a cornerstone of the modern Open Source software ecosystem – supporting some of the most widely used and important software solutions powering today's Internet economy."></a>
+</div>
+<!--+
+ |end group logo
+ +-->
+<!--+
+ |start Project Logo
+ +-->
+<div class="projectlogo">
+<a href="https://poi.apache.org"><img class="logoImage" alt="Apache POI" src="../images/project-header.png" title="Apache POI is well-known in the Java field as a library for reading and writing Microsoft Office file formats, such as Excel, PowerPoint, Word, Visio, Publisher and Outlook. It supports both the older (OLE2) and new (OOXML - Office Open XML) formats."></a>
+</div>
+<!--+
+ |end Project Logo
+ +-->
+<!--+
+ |start Search
+ +-->
+<div class="searchbox">
+<form action="http://www.google.com/search" method="get" class="roundtopsmall">
+<input value="poi.apache.org" name="sitesearch" type="hidden"><input onFocus="getBlank (this, 'Search the site with google');" size="25" name="q" id="query" type="text" value="Search the site with google">
+ <input name="Search" value="Search" type="submit">
+</form>
+</div>
+<!--+
+ |end search
+ +-->
+<!--+
+ |start Tabs
+ +-->
+<ul id="tabs">
+<li>
+<a class="unselected" href="../index.html">Home</a>
+</li>
+<li>
+<a class="unselected" href="../help/index.html">Help</a>
+</li>
+<li>
+<a class="unselected" href="../components/index.html">Component APIs</a>
+</li>
+<li>
+<a class="unselected" href="../devel/index.html">Getting Involved</a>
+</li>
+</ul>
+<!--+
+ |end Tabs
+ +-->
+</div>
+</div>
+<div id="main">
+<div id="publishedStrip">
+<!--+
+ |start Subtabs
+ +-->
+<div id="level2tabs"></div>
+<!--+
+ |end Endtabs
+ +-->
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+// --></script>
+</div>
+<!--+
+ |breadtrail
+ +-->
+<div class="breadtrail">
+
+
+ </div>
+<!--+
+ |start Menu, mainarea
+ +-->
+<!--+
+ |start Menu
+ +-->
+<div id="menu">
+<div onclick="SwitchMenu('menu_1.1', '../skin/')" id="menu_1.1Title" class="menutitle">Overview</div>
+<div id="menu_1.1" class="menuitemgroup">
+<div class="menuitem">
+<a href="../index.html">Home</a>
+</div>
+<div class="menuitem">
+<a href="../download.html">Download</a>
+</div>
+<div class="menuitem">
+<a href="../changes.html">Changelog</a>
+</div>
+<div class="menuitem">
+<a href="../apidocs/index.html">Javadocs</a>
+</div>
+<div class="menuitem">
+<a href="../text-extraction.html">Text Extraction</a>
+</div>
+<div class="menuitem">
+<a href="../encryption.html">Encryption support</a>
+</div>
+<div class="menuitem">
+<a href="../casestudies.html">Case Studies</a>
+</div>
+<div class="menuitem">
+<a href="../related-projects.html">Related projects</a>
+</div>
+<div class="menuitem">
+<a href="../legal.html">Legal</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.2', '../skin/')" id="menu_1.2Title" class="menutitle">Apache Wide</div>
+<div id="menu_1.2" class="menuitemgroup">
+<div class="menuitem">
+<a href="https://www.apache.org/">Apache Software Foundation</a>
+</div>
+<div class="menuitem">
+<a href="https://www.apache.org/licenses/">License</a>
+</div>
+<div class="menuitem">
+<a href="https://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
+</div>
+<div class="menuitem">
+<a href="https://www.apache.org/foundation/thanks.html">Thanks</a>
+</div>
+<div class="menuitem">
+<a href="https://www.apache.org/security/">Security</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3', '../skin/')" id="menu_1.3Title" class="menutitle">Component APIs</div>
+<div id="menu_1.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../components/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../apidocs/dev/index.html">Javadocs</a>
+</div>
+<div onclick="SwitchMenu('menu_1.3.3', '../skin/')" id="menu_1.3.3Title" class="menutitle">Excel (HSSF/XSSF)</div>
+<div id="menu_1.3.3" class="menuitemgroup">
+<div class="menuitem">
+<a href="../components/spreadsheet/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/quick-guide.html">Quick Guide</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/how-to.html">HOWTO</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/converting.html">HSSF to SS Converting</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/formula.html">Formula Support</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/eval.html">Formula Evaluation</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/eval-devguide.html">Eval Dev Guide</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/examples.html">Examples</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/use-case.html">Use Case</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/diagrams.html">Pictorial Docs</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/limitations.html">Limitations</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/user-defined-functions.html">User Defined Functions</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/excelant.html">ExcelAnt Tests</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/hacking-hssf.html">Hacking HSSF</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/record-generator.html">Record Generator</a>
+</div>
+<div class="menuitem">
+<a href="../components/spreadsheet/chart.html">Charts</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3.4', '../skin/')" id="menu_1.3.4Title" class="menutitle">PowerPoint (HSLF/XSLF)</div>
+<div id="menu_1.3.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../components/slideshow/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../components/slideshow/quick-guide.html">Quick Guide</a>
+</div>
+<div class="menuitem">
+<a href="../components/slideshow/how-to-shapes.html">HSLF Cookbook</a>
+</div>
+<div class="menuitem">
+<a href="../components/slideshow/xslf-cookbook.html">XSLF Cookbook</a>
+</div>
+<div class="menuitem">
+<a href="../components/slideshow/ppt-file-format.html">PPT File Format</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3.5', '../skin/')" id="menu_1.3.5Title" class="menutitle">Word (HWPF/XWPF)</div>
+<div id="menu_1.3.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="../components/document/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../components/document/quick-guide.html">HWPF Quick Guide</a>
+</div>
+<div class="menuitem">
+<a href="../components/document/quick-guide-xwpf.html">XWPF Quick Guide</a>
+</div>
+<div class="menuitem">
+<a href="../components/document/docoverview.html">HWPF Format</a>
+</div>
+<div class="menuitem">
+<a href="../components/document/projectplan.html">HWPF Project plan</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../components/hsmf/index.html">Outlook (HSMF)</a>
+</div>
+<div class="menuitem">
+<a href="../components/diagram/index.html">Visio (HDGF+XDGF)</a>
+</div>
+<div onclick="SwitchMenu('menu_1.3.8', '../skin/')" id="menu_1.3.8Title" class="menutitle">Publisher (HPBF)</div>
+<div id="menu_1.3.8" class="menuitemgroup">
+<div class="menuitem">
+<a href="../components/hpbf/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../components/hpbf/file-format.html">File Format</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3.9', '../skin/')" id="menu_1.3.9Title" class="menutitle">OLE2 Filesystem (POIFS)</div>
+<div id="menu_1.3.9" class="menuitemgroup">
+<div class="menuitem">
+<a href="../components/poifs/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../components/poifs/how-to.html">How To</a>
+</div>
+<div class="menuitem">
+<a href="../components/poifs/embeded.html">Embedded Documents</a>
+</div>
+<div class="menuitem">
+<a href="../components/poifs/fileformat.html">File System Documentation</a>
+</div>
+<div class="menuitem">
+<a href="../components/poifs/usecases.html">Use Cases</a>
+</div>
+<div class="menuitem">
+<a href="../components/poifs/design.html">Design</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.3.10', '../skin/')" id="menu_1.3.10Title" class="menutitle">OLE2 Document Props (HPSF)</div>
+<div id="menu_1.3.10" class="menuitemgroup">
+<div class="menuitem">
+<a href="../components/hpsf/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../components/hpsf/how-to.html">How To</a>
+</div>
+<div class="menuitem">
+<a href="../components/hpsf/thumbnails.html">Thumbnails</a>
+</div>
+<div class="menuitem">
+<a href="../components/hpsf/internals.html">Internals</a>
+</div>
+<div class="menuitem">
+<a href="../components/hpsf/todo.html">To Do</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../components/hmef/index.html">TNEF (HMEF) for winmail.dat</a>
+</div>
+<div class="menuitem">
+<a href="../components/oxml4j/index.html">OpenXML4J (OOXML)</a>
+</div>
+<div class="menuitem">
+<a href="../components/logging.html">Logging framework</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.4', '../skin/')" id="menu_1.4Title" class="menutitle">Help</div>
+<div id="menu_1.4" class="menuitemgroup">
+<div class="menuitem">
+<a href="../help/index.html">Mailing Lists</a>
+</div>
+<div class="menuitem">
+<a href="../help/faq.html">FAQ</a>
+</div>
+<div class="menuitem">
+<a href="https://bz.apache.org/bugzilla/buglist.cgi?product=POI">Bug Database</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5', '../skin/')" id="menu_1.5Title" class="menutitle">Getting Involved</div>
+<div id="menu_1.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="../devel/index.html">How To Build</a>
+</div>
+<div class="menuitem">
+<a href="../devel/subversion.html">Subversion Repository</a>
+</div>
+<div class="menuitem">
+<a href="../devel/guidelines.html">Contribution Guidelines</a>
+</div>
+<div class="menuitem">
+<a href="../devel/who.html">Who We Are</a>
+</div>
+<div onclick="SwitchMenu('menu_1.5.5', '../skin/')" id="menu_1.5.5Title" class="menutitle">Planning Documents</div>
+<div id="menu_1.5.5" class="menuitemgroup">
+<div class="menuitem">
+<a href="../devel/plan/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../devel/plan/vision10.html">1.0 Vision</a>
+</div>
+<div class="menuitem">
+<a href="../devel/plan/vision20.html">2.0 Vision</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5.6', '../skin/')" id="menu_1.5.6Title" class="menutitle">References</div>
+<div id="menu_1.5.6" class="menuitemgroup">
+<div class="menuitem">
+<a href="../devel/references/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../devel/references/logocontest.html">Logo Submissions</a>
+</div>
+<div class="menuitem">
+<a href="http://sc.openoffice.org/excelfileformat.pdf">XLS spec [PDF]</a>
+</div>
+<div class="menuitem">
+<a href="http://xml.apache.org/cocoon/">Apache Cocoon</a>
+</div>
+</div>
+<div onclick="SwitchMenu('menu_1.5.7', '../skin/')" id="menu_1.5.7Title" class="menutitle">Resolutions</div>
+<div id="menu_1.5.7" class="menuitemgroup">
+<div class="menuitem">
+<a href="../devel/resolutions/index.html">Overview</a>
+</div>
+<div class="menuitem">
+<a href="../devel/resolutions/res001.html">Minimal Coding Standards</a>
+</div>
+</div>
+<div class="menuitem">
+<a href="../devel/historyandfuture.html">History</a>
+</div>
+</div>
+<div id="credit"></div>
+<div id="roundbottom">
+<img style="display: none" class="corner" height="15" width="15" alt="" src="../skin/images/rc-b-l-15-1body-2menu-3menu.png"></div>
+<!--+
+ |alternative credits
+ +-->
+<div id="credit2">
+<a href="https://donate.apache.org/"><img border="0" title="Support Apache" alt="Support Apache - logo" src="../images/support-asf.png" style="width: 125px;height: 125px;"></a><a href="https://www.apache.org/foundation/press/kit/#poweredby"><img border="0" title="powered by POI" alt="powered by POI - logo" src="../images/poweredby-poi-logo.png" style="width: 125px;height: 125px;"></a>
+</div>
+</div>
+<!--+
+ |end Menu
+ +-->
+<!--+
+ |start content
+ +-->
+<div id="content">
+<h1>JVM languages</h1>
+<div id="front-matter"></div>
+
+<a name="Intro"></a>
+<h2 class="boxed">Intro</h2>
+<div class="section">
+<p>
+ Apache POI can be used with any
+ <a href="https://en.wikipedia.org/wiki/List_of_JVM_languages">JVM language</a>
+ that can import Java jar files such as Jython, Groovy, Scala, Kotlin, and JRuby.
+ </p>
+<ul>
+
+<li>
+<a href="#Jython+example">Jython</a>
+</li>
+
+<li>
+<a href="#Scala+example">Scala</a>
+</li>
+
+<li>
+<a href="#Groovy+example">Groovy</a>
+</li>
+
+<li>
+<a href="#Clojure+example">Clojure</a>
+</li>
+
+</ul>
+</div>
+
+
+
+<a name="Tested+Environments"></a>
+<h2 class="boxed">Tested Environments</h2>
+<div class="section">
+<ul>
+
+<li>
+<a href="http://www.jython.org/">Jython</a> 2.5+ (older versions probably work, but are untested)</li>
+
+<li>
+<a href="http://www.scala-lang.org/">Scala</a> 2.x</li>
+
+<li>
+<a href="http://groovy-lang.org/">Groovy</a> 2.4 (anything from 1.6 onwards ought to work, but only the latest 2.4 releases have been tested by us)</li>
+
+<li>
+<a href="http://clojure.org/">Clojure</a> 1.5.1+</li>
+
+</ul>
+<p>If you use POI in a different language (Kotlin, JRuby, ...) and would like to share a <em>Hello POI!</em> example,
+ please <a href="https://helpwanted.apache.org/task.html?856abd21">share</a> it.</p>
+<p>Please <a href="../help/index.html">let us know</a> if you use POI in an environment not listed here</p>
+</div>
+
+ <!-- FIXME: Need to make each language section expandable/collapseable so that users can compare their language to Java on one screen. See http://jsfiddle.net/eJX8z/ for an example implementation. -->
+
+<a name="Java+code"></a>
+<h2 class="boxed">Java code</h2>
+<div class="section">
+<a name="POILanguageExample.java"></a>
+<h3 class="boxed">POILanguageExample.java</h3>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // include poi-{version}-{yyyymmdd}.jar, poi-ooxml-{version}-{yyyymmdd}.jar,</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // and poi-ooxml-schemas-{version}-{yyyymmdd}.jar on Java classpath</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Import the POI classes</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import java.io.File;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import java.io.FileOutputStream;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import java.io.OutputStream;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import org.apache.poi.ss.usermodel.Cell;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import org.apache.poi.ss.usermodel.Row;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import org.apache.poi.ss.usermodel.Sheet;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import org.apache.poi.ss.usermodel.Workbook;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import org.apache.poi.ss.usermodel.WorkbookFactory;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import org.apache.poi.ss.usermodel.DataFormatter;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Read the contents of the workbook</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> File f = new File("SampleSS.xlsx");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Workbook wb = WorkbookFactory.create(f);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> DataFormatter formatter = new DataFormatter();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> int i = 1;</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> int numberOfSheets = wb.getNumberOfSheets();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> for ( Sheet sheet : wb ) {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> System.out.println("Sheet " + i + " of " + numberOfSheets + ": " + sheet.getSheetName());</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> for ( Row row : sheet ) {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> System.out.println("\tRow " + row.getRowNum());</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> for ( Cell cell : row ) {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> System.out.println("\t\t"+ cell.getAddress().formatAsString() + ": " + formatter.formatCellValue(cell));</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Modify the workbook</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Sheet sh = wb.createSheet("new sheet");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Row row = sh.createRow(7);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Cell cell = row.createCell(42);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> cell.setActiveCell(true);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> cell.setCellValue("The answer to life, the universe, and everything");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Save and close the workbook</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> OutputStream fos = new FileOutputStream("SampleSS-updated.xlsx");</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> wb.write(fos);</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> fos.close();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+</div>
+</div> <!-- Java code -->
+
+
+<a name="Jython+example"></a>
+<h2 class="boxed">Jython example</h2>
+<div class="section">
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> # Add </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">poi jars</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> onto the python classpath or add them at run time</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import sys</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> for jar in ('poi', 'poi-ooxml', 'poi-ooxml-schemas'):</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> sys.path.append('/path/to/%s-3.14-20160307.jar')</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> from java.io import File, FileOutputStream</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> from contextlib import closing</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> # Import the POI classes</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> from org.apache.poi.ss.usermodel import </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">WorkbookFactory</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">, </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">DataFormatter</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> # Read the contents of the workbook</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> wb = WorkbookFactory.create(File('</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">SampleSS.xlsx</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">'))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> formatter = DataFormatter()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> for i, sheet in enumerate(wb, start=1):</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> print('Sheet %d of %d: %s'.format(i, wb.numberOfSheets, sheet.sheetName))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> for row in sheet:</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> print('\tRow %i' % row.rowNum)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> for cell in row:</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> print('\t\t%s: %s' % (cell.address, formatter.formatCellValue(cell)))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> # Modify the workbook</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> sh = wb.createSheet('new sheet')</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> row = sh.createRow(7)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> cell = sh.createCell(42)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> cell.activeCell = True</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> cell.cellValue = 'The answer to life, the universe, and everything'</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> # Save and close the workbook</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> with closing(FileOutputStream('SampleSS-updated.xlsx')) as fos:</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> wb.write(fos)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> wb.close()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+</div>
+<p>There are several websites that have examples of using Apache POI in Jython projects:
+ <a href="https://wiki.python.org/jython/PoiExample">python.org</a>,
+ <a href="http://www.jython.org/jythonbook/en/1.0/appendixB.html#working-with-spreadsheets">jython.org</a>, and many others.
+ </p>
+</div>
+
+
+<a name="Scala+example"></a>
+<h2 class="boxed">Scala example</h2>
+<div class="section">
+<a name="build.sbt"></a>
+<h3 class="boxed">build.sbt</h3>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Add the POI core and OOXML support dependencies into your build.sbt</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> libraryDependencies ++= Seq(</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> "org.apache.poi" % "poi" % "3.15-beta2",</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> "org.apache.poi" % "poi-ooxml" % "3.15-beta2",</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> "org.apache.poi" % "poi-ooxml-schemas" "3.15-beta2"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> )</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+</div>
+<a name="XSSFMain.scala"></a>
+<h3 class="boxed">XSSFMain.scala</h3>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Import the required classes</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import org.apache.poi.ss.usermodel.{</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">WorkbookFactory</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">, </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">DataFormatter</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import java.io.{File, FileOutputStream}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> object XSSFMain extends App {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Automatically convert Java collections to Scala equivalents</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> import scala.collection.JavaConversions._</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Read the contents of the workbook</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> val workbook = WorkbookFactory.create(new File("</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">SampleSS.xlsx</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">"))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> val formatter = new DataFormatter()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> for {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Iterate and print the sheets</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (sheet, i) <- workbook.zipWithIndex</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> _ = println(s"Sheet $i of ${workbook.getNumberOfSheets}: ${sheet.getSheetName}")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Iterate and print the rows</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> row <- sheet</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> _ = println(s"\tRow ${row.getRowNum}")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Iterate and print the cells</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> cell <- row</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> } {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> println(s"\t\t${cell.getCellAddress}: ${formatter.formatCellValue(cell)}")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Add a sheet to the workbook</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> val sheet = workbook.createSheet("new sheet")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> val row = sheet.createRow(7)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> val cell = row.createCell(42)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> cell.setAsActiveCell()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> cell.setCellValue("The answer to life, the universe, and everything")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Save the updated workbook as a new file</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> val fos = new FileOutputStream("SampleSS-updated.xlsx")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> workbook.write(fos)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> workbook.close()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+</div>
+</div>
+
+
+<a name="Groovy+example"></a>
+<h2 class="boxed">Groovy example</h2>
+<div class="section">
+<a name="build.gradle"></a>
+<h3 class="boxed">build.gradle</h3>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">// Add the POI core and OOXML support dependencies into your gradle build,</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">// along with all of Groovy so it can run as a standalone script</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">repositories {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> mavenCentral()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">dependencies {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> runtime 'org.codehaus.groovy:groovy-all:2.4.7'</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> runtime 'org.apache.poi:poi:3.14'</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> runtime 'org.apache.poi:poi-ooxml:3.14'</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+</div>
+<a name="SpreadSheetDemo.groovy"></a>
+<h3 class="boxed">SpreadSheetDemo.groovy</h3>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.ss.usermodel.*</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import org.apache.poi.ss.util.*</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">import java.io.File</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">if (args.length == 0) {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> println "Use:"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> println " SpreadSheetDemo <excel-file> [output-file]"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> return 1</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">File f = new File(args[0])</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">DataFormatter formatter = new DataFormatter()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">WorkbookFactory.create(f,null,true).withCloseable { workbook -></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> println "Has ${workbook.getNumberOfSheets()} sheets"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Dump the contents of the spreadsheet</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (0..<workbook.getNumberOfSheets()).each { sheetNum -></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> println "Sheet ${sheetNum} is called ${workbook.getSheetName(sheetNum)}"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> def sheet = workbook.getSheetAt(sheetNum)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> sheet.each { row -></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> def nonEmptyCells = row.grep { c -> c.getCellType() != Cell.CELL_TYPE_BLANK }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> println " Row ${row.getRowNum()} has ${nonEmptyCells.size()} non-empty cells:"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> nonEmptyCells.each { c -></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> def cRef = [c] as CellReference</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> println " * ${cRef.formatAsString()} = ${formatter.formatCellValue(c)}"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Add two new sheets and populate</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> CellStyle headerStyle = makeHeaderStyle(workbook)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Sheet ns1 = workbook.createSheet("Generated 1")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> exportHeader(ns1, headerStyle, null, ["ID","Title","Num"] as String[])</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> ns1.createRow(1).createCell(0).setCellValue("TODO - Populate with data")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Sheet ns2 = workbook.createSheet("Generated 2")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> exportHeader(ns2, headerStyle, "This is a demo sheet", </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> ["ID","Title","Date","Author","Num"] as String[])</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> ns2.createRow(2).createCell(0).setCellValue(1)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> ns2.createRow(3).createCell(0).setCellValue(4)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> ns2.createRow(4).createCell(0).setCellValue(1)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Save</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> File output = File.createTempFile("output-", (f.getName() =~ /(\.\w+$)/)[0][0])</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> output.withOutputStream { os -> workbook.write(os) }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> println "Saved as ${output}"</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">CellStyle makeHeaderStyle(Workbook wb) {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> int HEADER_HEIGHT = 18</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> CellStyle style = wb.createCellStyle()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> style.setFillForegroundColor(IndexedColors.AQUA.getIndex())</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> style.setFillPattern(FillPatternType.SOLID_FOREGROUND)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Font font = wb.createFont()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> font.setFontHeightInPoints((short)HEADER_HEIGHT)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> font.setBold(true)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> style.setFont(font)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> return style</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">void exportHeader(Sheet s, CellStyle headerStyle, String info, String[] headers) {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Row r</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> int rn = 0</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> int HEADER_HEIGHT = 18</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Do they want an info row at the top?</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> if (info != null && !info.isEmpty()) {</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> r = s.createRow(rn)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> r.setHeightInPoints(HEADER_HEIGHT+1)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> rn++</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Cell c = r.createCell(0)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> c.setCellValue(info)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> c.setCellStyle(headerStyle)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> s.addMergedRegion(new CellRangeAddress(0,0,0,headers.length-1))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Create the header row, of the right size</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> r = s.createRow(rn)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> r.setHeightInPoints(HEADER_HEIGHT+1)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Add the column headings</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> headers.eachWithIndex { col, idx -></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> Cell c = r.createCell(idx)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> c.setCellValue(col)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> c.setCellStyle(headerStyle)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> s.autoSizeColumn(idx)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> }</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> // Make all the columns filterable</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> s.setAutoFilter(new CellRangeAddress(rn, rn, 0, headers.length-1))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">}</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+</div>
+</div>
+
+
+<a name="Clojure+example"></a>
+<h2 class="boxed">Clojure example</h2>
+<div class="section">
+<a name="SpreadSheetDemo.clj"></a>
+<h3 class="boxed">SpreadSheetDemo.clj</h3>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">(ns poi.core</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (:gen-class)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (:use [clojure.java.io :only [input-stream]])</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (:import [org.apache.poi.ss.usermodel WorkbookFactory DataFormatter]))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">(defn sheets [wb] (map #(.getSheetAt wb %1) (range 0 (.getNumberOfSheets wb))))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">(defn print-all [wb]</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (let [df (DataFormatter.)]</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (doseq [sheet (sheets wb)]</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (doseq [row (seq sheet)]</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (doseq [cell (seq row)]</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (println (.formatAsString (.getAddress cell)) ": " (.formatCellValue df cell)))))))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">(defn -main [& args]</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (when-let [name (first args)]</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (let [wb (WorkbookFactory/create (input-stream name))]</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> (print-all wb))))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+</div>
+</div>
+
+<p align="right">
+<font size="-2">by Javen O'Neal</font>
+</p>
+</div>
+<!--+
+ |end content
+ +-->
+<div class="clearboth"> </div>
+</div>
+<div id="footer">
+<!--+
+ |start bottomstrip
+ +-->
+<div class="lastmodified">
+<script type="text/javascript"><!--
+document.write("Last Published: " + document.lastModified);
+// --></script>
+</div>
+<div class="copyright">
+ Copyright ©
+ 2001-2019 <a href="https://www.apache.org/">The Apache Software Foundation</a>
+</div>
+<div id="feedback">
+ Send feedback about the website to:
+ <a id="feedbackto" href="mailto:dev@poi.apache.org?subject=Feedback%C2%A0components/poi-jvm-languages.html">dev@poi.apache.org</a>
+</div>
+<!--+
+ |end bottomstrip
+ +-->
+</div>
+</body>
+</html>
Modified: poi/site/publish/components/poi-ruby.html
URL: http://svn.apache.org/viewvc/poi/site/publish/components/poi-ruby.html?rev=1867502&r1=1867501&r2=1867502&view=diff
==============================================================================
--- poi/site/publish/components/poi-ruby.html (original)
+++ poi/site/publish/components/poi-ruby.html Tue Sep 24 23:26:00 2019
@@ -448,45 +448,125 @@ document.write("Last Published: " + docu
<h2 class="boxed">Usage</h2>
<div class="section">
<p>The following ruby code shows some of the things you can do with POI in Ruby</p>
-<pre class="code">
- h=Poi4r::HSSFWorkbook.new
- #Test Sheet Creation
- s=h.createSheet("Sheet1")
-
- #Test setting cell values
- s=h.getSheetAt(0)
- r=s.createRow(0)
- c=r.createCell(0)
- c.setCellValue(1.5)
-
- c=r.createCell(1)
- c.setCellValue("Ruby")
-
- #Test styles
- st = h.createCellStyle()
- c=r.createCell(2)
- st.setAlignment(Poi4r::HSSFCellStyle.ALIGN_CENTER)
- c.setCellStyle(st)
- c.setCellValue("centr'd")
-
- #Date handling
- c=r.createCell(3)
- t1=Time.now
- c.setCellValue(Time.now)
- t2= c.getDateCellValue().gmtime
-
- st=h.createCellStyle();
- st.setDataFormat(Poi4r::HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"))
- c.setCellStyle(st)
-
- #Formulas
- c=r.createCell(4)
- c.setCellFormula("A1*2")
- c.getCellFormula()
-
- #Writing
- h.write(File.new("test.xls","w"))
- </pre>
+<div class="code">
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">h=Poi4r::HSSFWorkbook.new</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">#Test Sheet Creation</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">s=h.createSheet("Sheet1")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">#Test setting cell values</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">s=h.getSheetAt(0)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">r=s.createRow(0)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c=r.createCell(0)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c.setCellValue(1.5)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c=r.createCell(1)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c.setCellValue("Ruby")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">#Test styles</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">st = h.createCellStyle()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c=r.createCell(2)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">st.setAlignment(Poi4r::HSSFCellStyle.ALIGN_CENTER)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c.setCellStyle(st)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c.setCellValue("centr'd")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">#Date handling</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c=r.createCell(3)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">t1=Time.now</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c.setCellValue(Time.now)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">t2= c.getDateCellValue().gmtime</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">st=h.createCellStyle();</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">st.setDataFormat(Poi4r::HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c.setCellStyle(st)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">#Formulas</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c=r.createCell(4)</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c.setCellFormula("A1*2")</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">c.getCellFormula()</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"></span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">#Writing</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody">h.write(File.new("test.xls","w"))</span>
+</div>
+<div class="codeline">
+<span class="lineno"></span><span class="codebody"> </span>
+</div>
+</div>
<p> The <em>tc_base_tests.rb</em> file in the <em>tests</em> sub directory of the source distribution
contains examples of simple uses of the API. The <a href="spreadsheet/quick-guide.html">quick guide </a> is the best
place to learn HSSF API use. (Note however that none of the Drawing features are implemented in the Ruby binding.)
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org