You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2011/12/20 06:54:18 UTC
svn commit: r1221108 - in /poi/trunk/src:
documentation/content/xdocs/status.xml
ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFSheetXMLHandler.java
ooxml/java/org/apache/poi/xssf/extractor/XSSFExcelExtractor.java
Author: nick
Date: Tue Dec 20 05:54:18 2011
New Revision: 1221108
URL: http://svn.apache.org/viewvc?rev=1221108&view=rev
Log:
Bug #52369 - XSSFExcelExtractor should format numeric cells based on the format strings applied to them
Modified:
poi/trunk/src/documentation/content/xdocs/status.xml
poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFSheetXMLHandler.java
poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExcelExtractor.java
Modified: poi/trunk/src/documentation/content/xdocs/status.xml
URL: http://svn.apache.org/viewvc/poi/trunk/src/documentation/content/xdocs/status.xml?rev=1221108&r1=1221107&r2=1221108&view=diff
==============================================================================
--- poi/trunk/src/documentation/content/xdocs/status.xml (original)
+++ poi/trunk/src/documentation/content/xdocs/status.xml Tue Dec 20 05:54:18 2011
@@ -34,6 +34,7 @@
<changes>
<release version="3.8-beta6" date="2012-??-??">
+ <action dev="poi-developers" type="fix">52369 - XSSFExcelExtractor should format numeric cells based on the format strings applied to them</action>
<action dev="poi-developers" type="fix">52369 - Event based XSSF parsing should handle formatting of formula values in XSSFSheetXMLHandler</action>
<action dev="poi-developers" type="fix">52348 - Avoid exception when creating cell style in a workbook that has an empty xf table</action>
<action dev="poi-developers" type="fix">52219 - fixed XSSFSimpleShape to set rich text attributes from XSSFRichtextString</action>
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFSheetXMLHandler.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFSheetXMLHandler.java?rev=1221108&r1=1221107&r2=1221108&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFSheetXMLHandler.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/eventusermodel/XSSFSheetXMLHandler.java Tue Dec 20 05:54:18 2011
@@ -254,7 +254,7 @@ public class XSSFSheetXMLHandler extends
thisStr = fv;
}
} else {
- // No formatter supplied, just do raw value in all cases
+ // No formating applied, just do raw value in all cases
thisStr = fv;
}
}
Modified: poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExcelExtractor.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExcelExtractor.java?rev=1221108&r1=1221107&r2=1221108&view=diff
==============================================================================
--- poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExcelExtractor.java (original)
+++ poi/trunk/src/ooxml/java/org/apache/poi/xssf/extractor/XSSFExcelExtractor.java Tue Dec 20 05:54:18 2011
@@ -18,13 +18,16 @@ package org.apache.poi.xssf.extractor;
import java.io.IOException;
import java.util.Iterator;
+import java.util.Locale;
import org.apache.poi.POIXMLTextExtractor;
import org.apache.poi.hssf.extractor.ExcelExtractor;
import org.apache.poi.openxml4j.exceptions.OpenXML4JException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.ss.usermodel.Cell;
+import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Comment;
+import org.apache.poi.ss.usermodel.DataFormatter;
import org.apache.poi.ss.usermodel.HeaderFooter;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCell;
@@ -43,6 +46,7 @@ public class XSSFExcelExtractor extends
XSSFRelation.MACROS_WORKBOOK
};
+ private Locale locale;
private XSSFWorkbook workbook;
private boolean includeSheetNames = true;
private boolean formulasNotResults = false;
@@ -96,14 +100,28 @@ public class XSSFExcelExtractor extends
public void setIncludeHeadersFooters(boolean includeHeadersFooters) {
this.includeHeadersFooters = includeHeadersFooters;
}
+ /**
+ * What Locale should be used for formatting numbers (based
+ * on the styles applied to the cells)
+ */
+ public void setLocale(Locale locale) {
+ this.locale = locale;
+ }
+
- /**
- * Retreives the text contents of the file
- */
- public String getText() {
- StringBuffer text = new StringBuffer();
-
- for(int i=0; i<workbook.getNumberOfSheets(); i++) {
+ /**
+ * Retreives the text contents of the file
+ */
+ public String getText() {
+ DataFormatter formatter;
+ if(locale == null) {
+ formatter = new DataFormatter();
+ } else {
+ formatter = new DataFormatter(locale);
+ }
+
+ StringBuffer text = new StringBuffer();
+ for(int i=0; i<workbook.getNumberOfSheets(); i++) {
XSSFSheet sheet = workbook.getSheetAt(i);
if(includeSheetNames) {
text.append(workbook.getSheetName(i)).append("\n");
@@ -129,13 +147,20 @@ public class XSSFExcelExtractor extends
Cell cell = ri.next();
// Is it a formula one?
- if(cell.getCellType() == Cell.CELL_TYPE_FORMULA && formulasNotResults) {
- text.append(cell.getCellFormula());
+ if(cell.getCellType() == Cell.CELL_TYPE_FORMULA) {
+ if (formulasNotResults) {
+ text.append(cell.getCellFormula());
+ } else {
+ if (cell.getCachedFormulaResultType() == Cell.CELL_TYPE_STRING) {
+ handleStringCell(text, cell);
+ } else {
+ handleNonStringCell(text, cell, formatter);
+ }
+ }
} else if(cell.getCellType() == Cell.CELL_TYPE_STRING) {
- text.append(cell.getRichStringCellValue().getString());
+ handleStringCell(text, cell);
} else {
- XSSFCell xc = (XSSFCell)cell;
- text.append(xc.getRawValue());
+ handleNonStringCell(text, cell, formatter);
}
// Output the comment, if requested and exists
@@ -169,6 +194,31 @@ public class XSSFExcelExtractor extends
return text.toString();
}
+
+ private void handleStringCell(StringBuffer text, Cell cell) {
+ text.append(cell.getRichStringCellValue().getString());
+ }
+ private void handleNonStringCell(StringBuffer text, Cell cell, DataFormatter formatter) {
+ int type = cell.getCellType();
+ if (type == Cell.CELL_TYPE_FORMULA) {
+ type = cell.getCachedFormulaResultType();
+ }
+
+ if (type == Cell.CELL_TYPE_NUMERIC) {
+ CellStyle cs = cell.getCellStyle();
+
+ if (cs.getDataFormatString() != null) {
+ text.append(formatter.formatRawCellContents(
+ cell.getNumericCellValue(), cs.getDataFormat(), cs.getDataFormatString()
+ ));
+ return;
+ }
+ }
+
+ // No supported styling applies to this cell
+ XSSFCell xcell = (XSSFCell)cell;
+ text.append( xcell.getRawValue() );
+ }
private String extractHeaderFooter(HeaderFooter hf) {
return ExcelExtractor._extractHeaderFooter(hf);
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org