﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-ALL is Well！-随笔分类-POI</title><link>http://www.blogjava.net/jnbzwm/category/46214.html</link><description>在学习中成长 在总结中进步</description><language>zh-cn</language><lastBuildDate>Thu, 07 Oct 2010 16:37:39 GMT</lastBuildDate><pubDate>Thu, 07 Oct 2010 16:37:39 GMT</pubDate><ttl>60</ttl><item><title>POI3.6 生成Excel2007 效率低的解决办法</title><link>http://www.blogjava.net/jnbzwm/archive/2010/09/01/330558.html</link><dc:creator>Ronaldo</dc:creator><author>Ronaldo</author><pubDate>Wed, 01 Sep 2010 04:36:00 GMT</pubDate><guid>http://www.blogjava.net/jnbzwm/archive/2010/09/01/330558.html</guid><wfw:comment>http://www.blogjava.net/jnbzwm/comments/330558.html</wfw:comment><comments>http://www.blogjava.net/jnbzwm/archive/2010/09/01/330558.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/jnbzwm/comments/commentRss/330558.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/jnbzwm/services/trackbacks/330558.html</trackback:ping><description><![CDATA[<p>最近项目中要将较大数据生成Excel2003或Excel2007文件。</p>
<p>由于POI很好的采用了面向接口编程的思想，所以其实生成Excel2003和生成Excel2007的代码多数是可以复用的。</p>
<p>&nbsp;</p>
<p>我的做法是：</p>
<p>1.定义Excel2003FileCreator，用来生成Excel2003文件</p>
<p>2.定义Excel2007FileCreator，用来生成Excel2007文件，Excel2007FileCreator extends Excel2003FileCreator。</p>
<p>&nbsp;</p>
<p>在Excel2003FileCreator中定义</p>
<p>protected org.apache.poi.ss.usermodel.Workbook workbook;</p>
<p>protected org.apache.poi.ss.usermodel.Sheet&nbsp; sheet;</p>
<p>private org.apache.poi.ss.usermodel.Row&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; row</p>
<p>&nbsp;</p>
<p>Workbook，Sheet&nbsp;，Row均为接口。</p>
<p>&nbsp;</p>
<p>只要在生成workbook时，确定是 </p>
<p>org.apache.poi.hssf.usermodel.HSSFWorkbook&nbsp;&nbsp; // 生成Excel2003文件用</p>
<p>还是</p>
<p>org.apache.poi.xssf.usermodel.XSSFWorkbook&nbsp;&nbsp; // 生成Excel2007文件用</p>
<p>即可。</p>
<p>后续的Sheet，Row 都是根据 workbook 创建的。</p>
<p>&nbsp;</p>
<p><strong><span style="font-size: medium" mce_style="font-size: medium;">问题的出现：</span></strong></p>
<p>&nbsp;</p>
<p>在对每一个Cell进行设置Style和Value的时候，我先根据DB中的配置，取得每个单元格的格式，再对其进行设定值。</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;取得字体<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;static&nbsp;Font&nbsp;getFont(Workbook&nbsp;workbook,&nbsp;int&nbsp;fontHeight,&nbsp;short&nbsp;boldWeight)&nbsp;{<br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;字体<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font&nbsp;=&nbsp;workbook.createFont();<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;Font&nbsp;font&nbsp;=&nbsp;workbook.createFont();<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font.setFontName("宋体");<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font.setFontHeightInPoints((short)fontHeight);<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font.setBoldweight(boldWeight);<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;font;<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span></div>
<br />
<p>再进行设置其他单元格格式。</p>
<p>只列实现代码：</p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;workbook.createCellStyle();<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;边框</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img id="Codehighlighter1_94_298_Open_Image" onclick="this.style.display='none'; Codehighlighter1_94_298_Open_Text.style.display='none'; Codehighlighter1_94_298_Closed_Image.style.display='inline'; Codehighlighter1_94_298_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_94_298_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_94_298_Closed_Text.style.display='none'; Codehighlighter1_94_298_Open_Image.style.display='inline'; Codehighlighter1_94_298_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(hasBorder)&nbsp;</span><span id="Codehighlighter1_94_298_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_94_298_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setBorderBottom((</span><span style="color: #0000ff">short</span><span style="color: #000000">)</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setBorderLeft((</span><span style="color: #0000ff">short</span><span style="color: #000000">)</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setBorderRight((</span><span style="color: #0000ff">short</span><span style="color: #000000">)</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setBorderTop((</span><span style="color: #0000ff">short</span><span style="color: #000000">)</span><span style="color: #000000">1</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;背景颜色</span><span style="color: #008000"><br />
</span><span style="color: #008080">12</span><span style="color: #008000"><img id="Codehighlighter1_348_486_Open_Image" onclick="this.style.display='none'; Codehighlighter1_348_486_Open_Text.style.display='none'; Codehighlighter1_348_486_Closed_Image.style.display='inline'; Codehighlighter1_348_486_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_348_486_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_348_486_Closed_Text.style.display='none'; Codehighlighter1_348_486_Open_Image.style.display='inline'; Codehighlighter1_348_486_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(isEvenRow)&nbsp;</span><span id="Codehighlighter1_348_486_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_348_486_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setFillPattern(CellStyle.SOLID_FOREGROUND);<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setFillForegroundColor(colorIndex);<br />
</span><span style="color: #008080">15</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">16</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">17</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;对齐</span><span style="color: #008000"><br />
</span><span style="color: #008080">18</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setAlignment(align);<br />
</span><span style="color: #008080">19</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setVerticalAlignment(CellStyle.VERTICAL_CENTER);<br />
</span><span style="color: #008080">20</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setFont(font);<br />
</span><span style="color: #008080">21</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setWrapText(</span><span style="color: #0000ff">true</span><span style="color: #000000">);<br />
</span><span style="color: #008080">22</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />
</span><span style="color: #008080">23</span><span style="color: #000000"><img id="Codehighlighter1_733_866_Open_Image" onclick="this.style.display='none'; Codehighlighter1_733_866_Open_Text.style.display='none'; Codehighlighter1_733_866_Closed_Image.style.display='inline'; Codehighlighter1_733_866_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_733_866_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_733_866_Closed_Text.style.display='none'; Codehighlighter1_733_866_Open_Image.style.display='inline'; Codehighlighter1_733_866_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">(</span><span style="color: #000000">!</span><span style="color: #000000">""</span><span style="color: #000000">.equals(excelFmt))&nbsp;</span><span id="Codehighlighter1_733_866_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_733_866_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">24</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">&nbsp;format&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;HSSFDataFormat.getBuiltinFormat(excelFmt);<br />
</span><span style="color: #008080">25</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;style.setDataFormat(format);<br />
</span><span style="color: #008080">26</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
<br />
<p>取得的Style，再调用Cell对象的 cell.setCellStyle(Style) 进行设置格式。</p>
<p>&nbsp;</p>
<p>因为这段代码是生成Excel2003和Excel2007时候都要用到的。</p>
<p>&nbsp;</p>
<p><span style="font-size: small" mce_style="font-size: small;"><span style="color: #ff0000" mce_style="color: #ff0000;">生成1w的数据，Excel2003是没有问题的，速度很快。</span></span></p>
<p><span style="font-size: small" mce_style="font-size: small;"><span style="color: #ff0000" mce_style="color: #ff0000;">但是同样的数据，生成Excel2007时，速度慢的可以，让人不能接受。</span></span></p>
<p>&nbsp;</p>
<p><span style="font-size: small" mce_style="font-size: small;"><span style="color: #ff0000" mce_style="color: #ff0000;">最后调查得出的结果是：瓶颈在于<span style="font-size: x-small; color: #000000" mce_style="font-size: x-small; color: #000000;">org.apache.poi.xssf.usermodel.XSSFWorkbook 在生成字体和样式对象时。</span></span></span></p>
<p></p>
<p></p>
<p><span style="font-size: small" mce_style="font-size: small;"><span style="color: #ff0000" mce_style="color: #ff0000;"><strong><span style="color: #3366ff" mce_style="color: #3366ff;">问题的解决：</span></strong></span></span></p>
<p><span style="font-size: small" mce_style="font-size: small;"><span style="color: #ff0000" mce_style="color: #ff0000;"><span style="font-size: x-small; color: #000000" mce_style="font-size: x-small; color: #000000;">由于对于文件体的单元格设置，每一列几乎是相同的。所以将生成字体和单元格样式的代码做了一些小调整：</span></span></span></p>
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">&nbsp;1</span><img id="Codehighlighter1_85_587_Open_Image" onclick="this.style.display='none'; Codehighlighter1_85_587_Open_Text.style.display='none'; Codehighlighter1_85_587_Closed_Image.style.display='inline'; Codehighlighter1_85_587_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_85_587_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_85_587_Closed_Text.style.display='none'; Codehighlighter1_85_587_Open_Image.style.display='inline'; Codehighlighter1_85_587_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" /><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">private</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">static</span><span style="color: #000000">&nbsp;Font&nbsp;getFont(Workbook&nbsp;workbook,&nbsp;</span><span style="color: #0000ff">int</span><span style="color: #000000">&nbsp;fontHeight,&nbsp;</span><span style="color: #0000ff">short</span><span style="color: #000000">&nbsp;boldWeight)&nbsp;</span><span id="Codehighlighter1_85_587_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_85_587_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;2</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;字体&nbsp;fontMap为全局的Map，用来保存相同字体要求的Font对象<br />
</span><span style="color: #008080">&nbsp;3</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;当要取得字体对象时，先判断是否已经缓存了，如果是，则不需要再创建</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;4</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Font&nbsp;font&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;fontMap.get(fontHeight&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;boldWeight);<br />
</span><span style="color: #008080">&nbsp;5</span><span style="color: #000000"><img id="Codehighlighter1_263_560_Open_Image" onclick="this.style.display='none'; Codehighlighter1_263_560_Open_Text.style.display='none'; Codehighlighter1_263_560_Closed_Image.style.display='inline'; Codehighlighter1_263_560_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_263_560_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_263_560_Closed_Text.style.display='none'; Codehighlighter1_263_560_Open_Image.style.display='inline'; Codehighlighter1_263_560_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedSubBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(font&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_263_560_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_263_560_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">&nbsp;6</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;workbook.createFont();<br />
</span><span style="color: #008080">&nbsp;7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;Font&nbsp;font&nbsp;=&nbsp;workbook.createFont();</span><span style="color: #008000"><br />
</span><span style="color: #008080">&nbsp;8</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="color: #000000">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font.setFontName(</span><span style="color: #000000">"</span><span style="color: #000000">宋体</span><span style="color: #000000">"</span><span style="color: #000000">);<br />
</span><span style="color: #008080">&nbsp;9</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font.setFontHeightInPoints((</span><span style="color: #0000ff">short</span><span style="color: #000000">)fontHeight);<br />
</span><span style="color: #008080">10</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;font.setBoldweight(boldWeight);<br />
</span><span style="color: #008080">11</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fontMap.put(fontHeight&nbsp;</span><span style="color: #000000">+</span><span style="color: #000000">&nbsp;boldWeight,&nbsp;font);<br />
</span><span style="color: #008080">12</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">13</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;font;<br />
</span><span style="color: #008080">14</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;}</span></span></div>
<br />
<br />
<span style="font-size: small" mce_style="font-size: small;"><span style="color: #ff0000" mce_style="color: #ff0000;">取得样式</span></span><br />
<div style="border-right: #cccccc 1px solid; padding-right: 5px; border-top: #cccccc 1px solid; padding-left: 4px; font-size: 13px; padding-bottom: 4px; border-left: #cccccc 1px solid; width: 98%; word-break: break-all; padding-top: 4px; border-bottom: #cccccc 1px solid; background-color: #eeeeee"><span style="color: #008080">1</span><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><span style="color: #000000">CellStyle&nbsp;style&nbsp;</span><span style="color: #000000">=</span><span style="color: #000000">&nbsp;styleMap.get(Key);<br />
</span><span style="color: #008080">2</span><span style="color: #000000"><img id="Codehighlighter1_64_164_Open_Image" onclick="this.style.display='none'; Codehighlighter1_64_164_Open_Text.style.display='none'; Codehighlighter1_64_164_Closed_Image.style.display='inline'; Codehighlighter1_64_164_Closed_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_64_164_Closed_Image" style="display: none" onclick="this.style.display='none'; Codehighlighter1_64_164_Closed_Text.style.display='none'; Codehighlighter1_64_164_Open_Image.style.display='inline'; Codehighlighter1_64_164_Open_Text.style.display='inline';" alt="" src="http://www.blogjava.net/images/OutliningIndicators/ContractedBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #0000ff">if</span><span style="color: #000000">&nbsp;(style&nbsp;</span><span style="color: #000000">==</span><span style="color: #000000">&nbsp;</span><span style="color: #0000ff">null</span><span style="color: #000000">)&nbsp;</span><span id="Codehighlighter1_64_164_Closed_Text" style="border-right: #808080 1px solid; border-top: #808080 1px solid; display: none; border-left: #808080 1px solid; border-bottom: #808080 1px solid; background-color: #ffffff"><img alt="" src="http://www.blogjava.net/Images/dot.gif" /></span><span id="Codehighlighter1_64_164_Open_Text"><span style="color: #000000">{<br />
</span><span style="color: #008080">3</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;设定样式，然后将样式缓存在全局的HashMap对象styleMap&nbsp;中<br />
</span><span style="color: #008080">4</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;<img alt="" src="http://www.blogjava.net/Images/dot.gif" />..<br />
</span><span style="color: #008080">5</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/InBlock.gif" align="top" />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #008000">//</span><span style="color: #008000">&nbsp;略..styleMap.put(***);</span><span style="color: #008000"><br />
</span><span style="color: #008080">6</span><span style="color: #008000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" /></span><span style="color: #000000">}</span></span><span style="color: #000000"><br />
</span><span style="color: #008080">7</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /><br />
</span><span style="color: #008080">8</span><span style="color: #000000"><img alt="" src="http://www.blogjava.net/images/OutliningIndicators/None.gif" align="top" /></span><span style="color: #0000ff">return</span><span style="color: #000000">&nbsp;style;</span></div>
<br />
<br />
<p>这样改了之后，速度立刻提高了。</p>
<p>当然，在用完之后，记得clear。</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>这里要注意的是，缓存HashMap对象中的Key的设定。</p>
<p>Key在组合时要体现出你的单元格格式，又不会因为组合，使得缓存中对象混乱了。<br />
<br />
<span style="color: #000000">本文为原创，欢迎转载，转载请注明出处<a title="BlogJava" href="http://www.blogjava.net/jnbzwm/">BlogJava</a>。</span></p>
<img src ="http://www.blogjava.net/jnbzwm/aggbug/330558.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/jnbzwm/" target="_blank">Ronaldo</a> 2010-09-01 12:36 <a href="http://www.blogjava.net/jnbzwm/archive/2010/09/01/330558.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>