You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@poi.apache.org by Andrey Rogov <an...@gmail.com> on 2009/05/10 17:42:18 UTC
error when get numeric value
I have a task to read a number from the cell of file Excel.
I analyse the type of cell at first, then read information.
But, there is the following.
There is a number type and number value in a cell.
type HSSFCell.CELL_TYPE_NUMERIC ignored, a string ( HSSFCell.CELL_TYPE_STRING )
type is recognized and I get an error when reading the value.
if ( HSSFCell.CELL_TYPE_NUMERIC == 1 )
{
fvalue = ( float ) cell.getNumericCellValue() ;
}
else if( HSSFCell.CELL_TYPE_STRING == 1 )
{
try {
svalue = getStringCellValue( cell ) ;
svalue = getStringForDecimal ( svalue ) ;
fvalue = StringToDecimal( svalue ) ;
}
catch ( Exception e )
{
fvalue = ( float ) cell.getNumericCellValue() ;
}
}
java.lang.IllegalStateException: Cannot get a text value from a numeric cell
at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:620)
at org.apache.poi.hssf.usermodel.HSSFCell.getRichStringCellValue(HSSFCell.java:699)
at jobs.com.konus.bean.Configproperty.getStringCellValue(Configproperty.java:554)
at jobs.com.konus.bean.Configproperty.getFloatCellValue(Configproperty.java:497)
Prompt please as correctly to read the numeric data type.
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
For additional commands, e-mail: user-help@poi.apache.org
Re: error when get numeric value
Posted by MSB <ma...@tiscali.co.uk>.
Morning Andrey
Your if statements are coded incorrectly, you are testing the value of a
constant against a numeric literal rather than the cell stype against a
constant.
Try something like this, assuming that the variable cell is an HSSFCell
object that contains a reference to a cell you have read from a worksheet;
int cellType = cell.getCellType();
if ( cellType == HSSFCell.CELL_TYPE_NUMERIC )
{
fvalue = ( float ) cell.getNumericCellValue() ;
}
else if( cellType == HSSFCell.CELL_TYPE_STRING )
{
try {
svalue = getStringCellValue( cell ) ;
svalue = getStringForDecimal ( svalue ) ;
fvalue = StringToDecimal( svalue ) ;
}
catch ( Exception e )
{
fvalue = ( float ) cell.getNumericCellValue();
}
}
Also, you could easilly replace the if.....else construct with a switch
statement, like this;
switch(cellType) {
case HSSFCell.CELL_TYPE_NUMERIC:
fvalue = ( float ) cell.getNumericCellValue() ;
break;
case HSSFCell.CELL_TYPE_STRING:
......
}
and so on to catch all of the different cell types.
Not to sure how comfortable you are with Excel but you also need to remember
that there is a difference between the cells contents and the value the user
sees when viewing the worksheet - think of dates for example. If all you
need is a numeric value to perform a caculation then the apearance of the
value may not matter, but if it does, look at the HSSFDataFormatter class.
Andrey Rogov-2 wrote:
>
> I have a task to read a number from the cell of file Excel.
> I analyse the type of cell at first, then read information.
> But, there is the following.
> There is a number type and number value in a cell.
> type HSSFCell.CELL_TYPE_NUMERIC ignored, a string (
> HSSFCell.CELL_TYPE_STRING )
> type is recognized and I get an error when reading the value.
>
> if ( HSSFCell.CELL_TYPE_NUMERIC == 1 )
> {
> fvalue = ( float ) cell.getNumericCellValue() ;
> }
> else if( HSSFCell.CELL_TYPE_STRING == 1 )
> {
>
> try {
> svalue = getStringCellValue( cell ) ;
> svalue = getStringForDecimal ( svalue ) ;
> fvalue = StringToDecimal( svalue ) ;
> }
> catch ( Exception e )
> {
> fvalue = ( float ) cell.getNumericCellValue() ;
> }
> }
>
>
> java.lang.IllegalStateException: Cannot get a text value from a numeric
> cell
> at org.apache.poi.hssf.usermodel.HSSFCell.typeMismatch(HSSFCell.java:620)
> at
> org.apache.poi.hssf.usermodel.HSSFCell.getRichStringCellValue(HSSFCell.java:699)
> at
> jobs.com.konus.bean.Configproperty.getStringCellValue(Configproperty.java:554)
> at
> jobs.com.konus.bean.Configproperty.getFloatCellValue(Configproperty.java:497)
>
>
> Prompt please as correctly to read the numeric data type.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
> For additional commands, e-mail: user-help@poi.apache.org
>
>
>
--
View this message in context: http://www.nabble.com/error-when-get-numeric-value-tp23471242p23477822.html
Sent from the POI - User mailing list archive at Nabble.com.
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
For additional commands, e-mail: user-help@poi.apache.org