2026-02-16 20:14:18 +01:00

792 lines
30 KiB
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>Upgrading to POI 3.5, including converting existing HSSF Usermodel code to SS Usermodel (for XSSF and HSSF)</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> &gt; <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/asflogo_horizontal_color.svg" title="The Apache Software Foundation is a cornerstone of the modern Open Source software ecosystem &ndash; 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="https://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">&nbsp;
<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 class="current">
<a class="selected" 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">
&nbsp;
</div>
<!--+
|start Menu, mainarea
+-->
<!--+
|start Menu
+-->
<div id="menu">
<div onclick="SwitchMenu('menu_selected_1.1', '../../skin/')" id="menu_selected_1.1Title" class="menutitle" style="background-image: url('../../skin/images/chapter_open.gif');">Component APIs</div>
<div id="menu_selected_1.1" class="selectedmenuitemgroup" style="display: block;">
<div class="menuitem">
<a href="../../components/index.html">Overview</a>
</div>
<div class="menuitem">
<a href="../../apidocs/index.html">Javadocs</a>
</div>
<div onclick="SwitchMenu('menu_selected_1.1.3', '../../skin/')" id="menu_selected_1.1.3Title" class="menutitle" style="background-image: url('../../skin/images/chapter_open.gif');">Excel (HSSF/XSSF)</div>
<div id="menu_selected_1.1.3" class="selectedmenuitemgroup" style="display: block;">
<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="menupage">
<div class="menupagetitle">HSSF to SS Converting</div>
</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.1.4', '../../skin/')" id="menu_1.1.4Title" class="menutitle">PowerPoint (HSLF/XSLF)</div>
<div id="menu_1.1.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-wmf-emf-renderer.html">Render SL/WMF/EMF</a>
</div>
<div class="menuitem">
<a href="../../components/slideshow/ppt-file-format.html">PPT File Format</a>
</div>
</div>
<div onclick="SwitchMenu('menu_1.1.5', '../../skin/')" id="menu_1.1.5Title" class="menutitle">Word (HWPF/XWPF)</div>
<div id="menu_1.1.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.1.8', '../../skin/')" id="menu_1.1.8Title" class="menutitle">Publisher (HPBF)</div>
<div id="menu_1.1.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.1.9', '../../skin/')" id="menu_1.1.9Title" class="menutitle">OLE2 Filesystem (POIFS)</div>
<div id="menu_1.1.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.1.10', '../../skin/')" id="menu_1.1.10Title" class="menutitle">OLE2 Document Props (HPSF)</div>
<div id="menu_1.1.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 class="menuitem">
<a href="../../components/configuration.html">Configuration</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>Upgrading to POI 3.5, including converting existing HSSF Usermodel code to SS Usermodel (for XSSF and HSSF)</h1>
<div id="front-matter"></div>
<a name="Things+that+have+to+be+changed+when+upgrading+to+POI+3.5"></a>
<h2 class="boxed">Things that have to be changed when upgrading to POI 3.5</h2>
<div class="section">
<p>Wherever possible, we have tried to ensure that you can use your
existing POI code with POI 3.5 without requiring any changes. However,
Java doesn't always make that easy, and unfortunately there are a
few changes that may be required for some users.</p>
<a name="org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.CellValue"></a>
<h3 class="boxed">org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.CellValue</h3>
<p>Annoyingly, java will not let you access a static inner class via
a child of the parent one. So, all references to
<em>org.apache.poi.hssf.usermodel.HSSFFormulaEvaluator.CellValue</em>
will need to be changed to
<em>org.apache.poi.ss.usermodel.FormulaEvaluator.CellValue</em>
</p>
<a name="org.apache.poi.hssf.usermodel.HSSFRow.MissingCellPolicy"></a>
<h3 class="boxed">org.apache.poi.hssf.usermodel.HSSFRow.MissingCellPolicy</h3>
<p>Annoyingly, java will not let you access a static inner class via
a child of the parent one. So, all references to
<em>org.apache.poi.hssf.usermodel.HSSFRow.MissingCellPolicy</em>
will need to be changed to
<em>org.apache.poi.ss.usermodel.Row.MissingCellPolicy</em>
</p>
<a name="DDF+and+org.apache.poi.hssf.record.RecordFormatException"></a>
<h3 class="boxed">DDF and org.apache.poi.hssf.record.RecordFormatException</h3>
<p>Previously, record level errors within DDF would throw an
exception from the hssf class hierarchy. Now, record level errors
within DDF will throw a more general RecordFormatException,
<em>org.apache.poi.util.RecordFormatException</em>
</p>
<p>In addition, org.apache.poi.hssf.record.RecordFormatException
has been changed to inherit from the new
<em>org.apache.poi.util.RecordFormatException</em>, so you may
wish to change catches of the hssf version to the new util version.
</p>
</div>
<a name="Converting+existing+HSSF+Usermodel+code+to+SS+Usermodel+%28for+XSSF+and+HSSF%29"></a>
<h2 class="boxed">Converting existing HSSF Usermodel code to SS Usermodel (for XSSF and HSSF)</h2>
<div class="section">
<a name="Why+change%3F"></a>
<h3 class="boxed">Why change?</h3>
<p>If you have existing HSSF usermodel code that works just
fine, and you don't want to use the new OOXML XSSF support,
then you probably don't need to. Your existing HSSF only code
will continue to work just fine.</p>
<p>However, if you want to be able to work with both HSSF for
your .xls files, and also XSSF for .xslx files, then you will
need to make some slight tweaks to your code.</p>
<a name="org.apache.poi.ss.usermodel"></a>
<h3 class="boxed">org.apache.poi.ss.usermodel</h3>
<p>The new SS usermodel (org.apache.poi.ss.usermodel) is very
heavily based on the old HSSF usermodel
(org.apache.poi.hssf.usermodel). The main difference is that
the package name and class names have been tweaked to remove
HSSF from them. Otherwise, the new SS Usermodel interfaces
should provide the same functionality.</p>
<a name="Constructors"></a>
<h3 class="boxed">Constructors</h3>
<p>Calling the empty HSSFWorkbook remains as the way to
create a new, empty Workbook object. To open an existing
Workbook, you should now call WorkbookFactory.create(inp).</p>
<p>For all other cases when you would have called a
Usermodel constructor, such as 'new HSSFRichTextString()' or
'new HSSFDataFormat', you should instead use a CreationHelper.
There's a method on the Workbook to get a CreationHelper, and
the CreationHelper will then handle constructing new objects
for you.</p>
<a name="Other+Code"></a>
<h3 class="boxed">Other Code</h3>
<p>For all other code, generally change a reference from
org.apache.poi.hssf.usermodel.HSSFFoo to a reference to
org.apache.poi.ss.usermodel.Foo. Method signatures should
otherwise remain the same, and it should all then work for
both XSSF and HSSF.</p>
</div>
<a name="Worked+Examples"></a>
<h2 class="boxed">Worked Examples</h2>
<div class="section">
<a name="Old+HSSF+Code"></a>
<h3 class="boxed">Old HSSF Code</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">// import org.apache.poi.hssf.usermodel.*;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFWorkbook wb = new HSSFWorkbook();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// create a new sheet</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFSheet s = wb.createSheet();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// declare a row object reference</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFRow r = null;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// declare a cell object reference</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFCell c = null;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// create 2 cell styles</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFCellStyle cs = wb.createCellStyle();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFCellStyle cs2 = wb.createCellStyle();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFDataFormat df = wb.createDataFormat();</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 2 fonts objects</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFFont f = wb.createFont();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">HSSFFont f2 = wb.createFont();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// Set font 1 to 12 point type, blue and bold</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">f.setFontHeightInPoints((short) 12);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">f.setColor( HSSFColor.RED.index );</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">f.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// Set font 2 to 10 point type, red and bold</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">f2.setFontHeightInPoints((short) 10);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">f2.setColor( HSSFFont.RED.index );</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">f2.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// Set cell style and formatting</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">cs.setFont(f);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">cs.setDataFormat(df.getFormat("#,##0.0"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">// Set the other cell style and formatting</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">cs2.setBorderBottom(cs2.BORDER_THIN);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">cs2.setDataFormat(HSSFDataFormat.getBuiltinFormat("text"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">cs2.setFont(f2);</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">// Define a few rows</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">for(short rownum = (short)0; rownum &lt; 30; rownum++) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> HSSFRow r = s.createRow(rownum);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> for(short cellnum = (short)0; cellnum &lt; 10; cellnum += 2) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> HSSFCell c = r.createCell(cellnum);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> HSSFCell c2 = r.createCell(cellnum+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"> c.setCellValue((double)rownum + (cellnum/10));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> c2.setCellValue(new HSSFRichTextString("Hello! " + cellnum);</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">// Save</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">FileOutputStream out = new FileOutputStream("workbook.xls");</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">wb.write(out);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">out.close();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> </span>
</div>
</div>
<a name="New%2C+generic+SS+Usermodel+Code"></a>
<h3 class="boxed">New, generic SS Usermodel Code</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">// import org.apache.poi.ss.usermodel.*;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">Workbook[] wbs = new Workbook[] { new HSSFWorkbook(), new XSSFWorkbook() };</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody">for(int i=0; i&lt;wbs.length; i++) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Workbook wb = wbs[i];</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> CreationHelper createHelper = wb.getCreationHelper();</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 a new sheet</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Sheet s = wb.createSheet();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // declare a row object reference</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Row r = null;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // declare a cell object reference</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Cell c = null;</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // create 2 cell styles</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> CellStyle cs = wb.createCellStyle();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> CellStyle cs2 = wb.createCellStyle();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> DataFormat df = wb.createDataFormat();</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 2 fonts objects</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Font f = wb.createFont();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Font f2 = wb.createFont();</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // Set font 1 to 12 point type, blue and bold</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> f.setFontHeightInPoints((short) 12);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> f.setColor( IndexedColors.RED.getIndex() );</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> f.setBoldweight(Font.BOLDWEIGHT_BOLD);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // Set font 2 to 10 point type, red and bold</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> f2.setFontHeightInPoints((short) 10);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> f2.setColor( IndexedColors.RED.getIndex() );</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> f2.setBoldweight(Font.BOLDWEIGHT_BOLD);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // Set cell style and formatting</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> cs.setFont(f);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> cs.setDataFormat(df.getFormat("#,##0.0"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"></span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> // Set the other cell style and formatting</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> cs2.setBorderBottom(cs2.BORDER_THIN);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> cs2.setDataFormat(df.getFormat("text"));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> cs2.setFont(f2);</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"> // Define a few rows</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> for(int rownum = 0; rownum &lt; 30; rownum++) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Row r = s.createRow(rownum);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> for(int cellnum = 0; cellnum &lt; 10; cellnum += 2) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Cell c = r.createCell(cellnum);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> Cell c2 = r.createCell(cellnum+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"> c.setCellValue((double)rownum + (cellnum/10));</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> c2.setCellValue(</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> createHelper.createRichTextString("Hello! " + cellnum)</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"> // Save</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> String filename = "workbook.xls";</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> if(wb instanceof XSSFWorkbook) {</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> filename = filename + "x";</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"> FileOutputStream out = new FileOutputStream(filename);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> wb.write(out);</span>
</div>
<div class="codeline">
<span class="lineno"></span><span class="codebody"> out.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>
<p align="right">
<font size="-2">by&nbsp;Nick Burch</font>
</p>
</div>
<!--+
|end content
+-->
<div class="clearboth">&nbsp;</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 &copy;
2001-2026 <a href="https://www.apache.org/">The Apache Software Foundation</a>
<br>
Apache POI, POI, Apache, the Apache logo, and the Apache
POI project logo are trademarks of The Apache Software Foundation.
</div>
<div id="feedback">
Send feedback about the website to:
<a id="feedbackto" href="mailto:dev@poi.apache.org?subject=Feedback%C2%A0components/spreadsheet/converting.html">dev@poi.apache.org</a>
</div>
<!--+
|end bottomstrip
+-->
</div>
</body>
</html>