=== modified file 'dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/preview/action/XMLStructureResponse.java'
--- dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/preview/action/XMLStructureResponse.java 2009-11-11 11:09:23 +0000
+++ dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/preview/action/XMLStructureResponse.java 2009-11-16 04:13:04 +0000
@@ -42,6 +42,7 @@
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellReference;
+import org.hisp.dhis.reportexcel.utils.StringUtils;
/**
* Simple demo class which uses the api to present the contents of an excel 97
@@ -121,11 +122,11 @@
throws Exception
{
- this.PATH_FILE_NAME = pathFileName;
- this.WORKBOOK = Workbook.getWorkbook( new File( pathFileName ) );
this.ENCODING = enc;
this.bWRITE_DTD = bWriteDTD;
this.bWRITE_VERSION = bWriteVersion;
+ this.PATH_FILE_NAME = pathFileName;
+ this.WORKBOOK = Workbook.getWorkbook( new File( pathFileName ) );
this.STRUCTURE_DATA_RESPONSE = new StringBuffer();
if ( this.ENCODING == null || !this.ENCODING.equals( "UnicodeBig" ) )
@@ -135,6 +136,7 @@
if ( bFormat )
{
+ // recalculatedValueForCellFormula(sheetId);
writeFormattedXML( sheetId, bDetailed, bWriteDescription );
}
else
@@ -214,19 +216,7 @@
throws Exception
{
FileInputStream fis = new FileInputStream( this.PATH_FILE_NAME );
- org.apache.poi.ss.usermodel.Workbook wb = new HSSFWorkbook( fis );
-
- if ( sheetId > 0 )
- {
- this.recalculatedValueForCellFormula( wb, (sheetId - 1) );
- }
- else
- {
- for ( int sheet = 0; sheet < WORKBOOK.getNumberOfSheets(); sheet++ )
- {
- this.recalculatedValueForCellFormula( wb, sheet );
- }
- }
+ HSSFWorkbook hssfwb = new HSSFWorkbook( fis );
if ( bWriteDescription )
{
@@ -251,13 +241,13 @@
if ( sheetId > 0 )
{
- writeBySheetNo( wb, (sheetId - 1), bDetailed );
+ writeBySheetNo( hssfwb, (sheetId - 1), bDetailed );
}
else
{
for ( int sheet = 0; sheet < WORKBOOK.getNumberOfSheets(); sheet++ )
{
- writeBySheetNo( wb, sheet, bDetailed );
+ writeBySheetNo( hssfwb, sheet, bDetailed );
}
}
@@ -280,6 +270,11 @@
Cell[] cell = null;
CellFormat format = null;
+ boolean bFormula = false;
+ String recalculatedValue = "";
+
+ org.apache.poi.ss.usermodel.Sheet sheet = wb.getSheetAt( sheetNo );
+ org.apache.poi.ss.usermodel.FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
for ( int i = 0; i < s.getRows(); i++ )
{
@@ -294,22 +289,50 @@
// information
if ( (cell[j].getType() != CellType.EMPTY) || (cell[j].getCellFormat() != null) )
{
+ bFormula = false;
+
+ CellReference cellReference = new CellReference( i, j );
+ org.apache.poi.ss.usermodel.Row rowRef = sheet.getRow( cellReference.getRow() );
+ org.apache.poi.ss.usermodel.Cell cellRef = rowRef.getCell( cellReference.getCol() );
+
+ if ( (cellRef != null)
+ && (cellRef.getCellType() == org.apache.poi.ss.usermodel.Cell.CELL_TYPE_FORMULA) )
+ {
+ bFormula = true;
+ recalculatedValue = "";
+
+ switch ( evaluator.evaluateInCell( cellRef ).getCellType() )
+// switch ( evaluator.evaluateFormulaCell( cellRef ) )
+ {
+ case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_NUMERIC:
+
+ recalculatedValue = String.valueOf( cellRef.getNumericCellValue() );
+
+ break;
+
+ // CELL_TYPE_FORMULA will never occur
+ case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_FORMULA:
+ System.out.println( "Place of cell :: [" + cellRef.getRowIndex() + "]["
+ + cellRef.getColumnIndex() + "]" );
+ break;
+ }
+ }
// end of checking the cell formula
STRUCTURE_DATA_RESPONSE.append( "
" );
STRUCTURE_DATA_RESPONSE.append( PRINT_END_LINE );
STRUCTURE_DATA_RESPONSE.append( " " );
- if ( cell[j].getContents().equals( NUMBER_OF_ZERO ) )
+ if ( bFormula )
{
-
- STRUCTURE_DATA_RESPONSE.append( "" );
+ STRUCTURE_DATA_RESPONSE.append( "" );
}
else
{
- STRUCTURE_DATA_RESPONSE.append( "" );
+ STRUCTURE_DATA_RESPONSE.append( "" );
}
- // }
STRUCTURE_DATA_RESPONSE.append( "" );
STRUCTURE_DATA_RESPONSE.append( PRINT_END_LINE );
@@ -336,7 +359,7 @@
if ( format != null )
{
STRUCTURE_DATA_RESPONSE.append( " 0 && column > 0 )
{
HSSFRow rowPOI = sheet.getRow( row - 1 );
-
+
if ( rowPOI == null )
{
rowPOI = sheet.createRow( row - 1 );
@@ -147,14 +147,7 @@
}
else if ( type.equalsIgnoreCase( ExcelUtils.NUMBER ) )
{
- if ( Double.parseDouble( value ) != 0 )
- {
- cellPOI.setCellValue( new HSSFRichTextString( value ) );
- }
- else
- {
- cellPOI.setCellValue( new HSSFRichTextString( ExcelUtils.NUMBER_OF_ZERO ) );
- }
+ cellPOI.setCellValue( Double.parseDouble( value ) );
}
}
}
=== added file 'dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/utils/StringUtils.java'
--- dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/utils/StringUtils.java 1970-01-01 00:00:00 +0000
+++ dhis-2/dhis-web/dhis-web-excel-reporting/src/main/java/org/hisp/dhis/reportexcel/utils/StringUtils.java 2009-11-16 04:13:04 +0000
@@ -0,0 +1,129 @@
+package org.hisp.dhis.reportexcel.utils;
+
+/*
+ * Copyright (c) 2004-2007, University of Oslo
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following disclaimer in the documentation
+ * and/or other materials provided with the distribution.
+ * * Neither the name of the HISP project nor the names of its contributors may
+ * be used to endorse or promote products derived from this software without
+ * specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * @author Dang Duy Hieu
+ * @version $Id$
+ * @since 2009-11-14
+ */
+public class StringUtils
+{
+ private static final String DOT = ".";
+
+ private static final String MIDDLE_LINE = "-";
+
+ public static final String NUMBER_OF_ZERO = "0";
+
+ /* ---------------------------------------------------------------------- */
+ /* */
+ /* ---------------------------------------------------------------------- */
+
+ public static String convertAlignmentString( String s )
+ {
+ if ( s.equalsIgnoreCase( "centre" ) )
+ {
+ return "center";
+ }
+ else
+ {
+ return s;
+ }
+ }
+
+ /* ---------------------------------------------------------------------- */
+ /* */
+ /* ---------------------------------------------------------------------- */
+
+ public static String checkingNumberDecimal( String input )
+ {
+ try
+ {
+ String s1 = "";
+ String s2 = "";
+
+ if ( Double.parseDouble( input ) >= 0.0d )
+ {
+ if ( input.contains( "." ) )
+ {
+ s1 = input.split( "\\." )[0];
+ s2 = input.split( "\\." )[1];
+
+ if ( (new Double( s1 ) == 0.0d) && (new Double( s2 ) != 0.0d) )
+ {
+ input = (NUMBER_OF_ZERO + DOT).concat( splitZeroAtEndOfNumberic( s2 ) );
+ }
+ else if ( (new Double( s1 ) != 0.0d) && (new Double( s2 ) == 0.0d) )
+ {
+ input = String.valueOf( new Long( s1 ) );
+ }
+ else
+ {
+ input = String.valueOf( new Long( s1 ) ).concat( DOT + splitZeroAtEndOfNumberic( s2 ) );
+ }
+ }
+
+ if ( new Double( input ) == 0.0d )
+ {
+ input = MIDDLE_LINE;
+ }
+ }
+
+ return input;
+ }
+ catch ( NumberFormatException nfe )
+ {
+ return input;
+ }
+ }
+
+ /* ---------------------------------------------------------------------- */
+ /* */
+ /* ---------------------------------------------------------------------- */
+
+ public static String splitZeroAtEndOfNumberic( String number )
+ {
+ int counterZero = 0;
+ char[] ch = number.toCharArray();
+
+ for ( int i = (ch.length - 1); i >= 0; i-- )
+ {
+ if ( ch[i] == '0' )
+ {
+ counterZero++;
+ }
+ else
+ {
+ number = number.substring( 0, ch.length - counterZero );
+ break;
+ }
+ }
+
+ return number;
+ }
+}