Poi判断单元格的数据类型问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Poi判断单元格的数据类型问题相关的知识,希望对你有一定的参考价值。

写了一个关于Excel数据写入数据库的程序,下面是把读Excel文件的相关代码:public List<SAV_TMP> readSAV_TMP(File xlsFile)
List<SAV_TMP> list=new ArrayList<SAV_TMP>();
try
FileInputStream fln=new FileInputStream(xlsFile);//创建一个文件流
HSSFWorkbook readWorkBook=new HSSFWorkbook(fln);//获取工作簿
HSSFSheet readSheet=readWorkBook.getSheet("Sheet1");//获取第一张工作表,Sheet1表名
HSSFRow readRow=readSheet.getRow(0);//数据起始行
HSSFCell readCell=readRow.getCell((short)0);//单元格
System.out.println("第一个单元格是:"+readCell.getStringCellValue());
int count=readSheet.getPhysicalNumberOfRows();//获得工作表中一共有多少条数据
for(int i=2;i<count;i++)//Excel中的第三行起是要读入的数据
HSSFRow readRow1=readSheet.getRow(i);
String acno=readCell.getStringCellValue();
String rctl=readCell.getStringCellValue();
String cunm=readCell.getStringCellValue();
double acbl=readCell.getNumericCellValue();
double rjye=readCell.getNumericCellValue();

现在报出异常:java.lang.NumberFormatException: You cannot get a numeric value from a String based cell
应该就是这两句的问题
double acbl=readCell.getNumericCellValue();
double rjye=readCell.getNumericCellValue();
我的数据库中acbl和rjye就是Double类型的,Excel表中是数值型的

我不清楚怎样进行类型转换,向大家请教!!!谢谢

参考技术A if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC)
String form = cell.getCellStyle().getDataFormatString();
DecimalFormat format = new DecimalFormat(form);
format.format(cell.getNumericCellValue());
参考技术B ACNO
1234567890
2343456566
4565678878

1、这种情况下,POI在读取ACNO时,认为他是数值,CUNM也一样,所以这两列应该用getNumericCellValue()读取

2、在用getNumericCellValue()读取数值后,返回的值是用科学计数法表示的:double acno=1.23456789E9,因而必须用NumberFormat类格式化一下:format(acno)="1234567890",这才是正确的ACNO,CUNM同

3、代码:
NumberFormat nf = NumberFormat.getInstance();
nf.setGroupingUsed(false);//true时的格式:1,234,567,890
double acno=readCell0.getNumericCellValue();
String acnoStr=nf.format(acno);本回答被提问者采纳

使用poi如何设置指定单元格的颜色

设置指定的单元格的颜色,不是所有的背景色,只希望前五行有指定的颜色,其余行均不能有颜色

参考技术A for (int i = 0; i <6; i++)
Row row = (Row)sheet.createRow(i);
// 循环写入列数据
for (int j = 0; j < 8; j++)
Cell cell = row.createCell(j);
cell.setCellValue("测试" + j);

if(i<=5)

XSSFCellStyle cellStyle = (XSSFCellStyle)wb.createCellStyle(); //建立新的cell样式

cellStyle.setFillForegroundColor((short)43);
cellStyle.setFillForegroundColor(IndexedColors.GREY_40_PERCENT.getIndex());

cell.setCellStyle(cellStyle);


参考技术B 采用一个计数器记录row,计数器计数到第5行时,cell里不再写入style就可以了。 参考技术C poi你可以搜搜api,有创建style的方法,然后在设置对应的样式,最后用cell或者row的设置style方法

以上是关于Poi判断单元格的数据类型问题的主要内容,如果未能解决你的问题,请参考以下文章

poi 取excel单元格内容时,需要判断单元格的类型,才能正确取出

poi 中解析Excel 时 获取单元格中的值。

poi解析excel

java读取excel时间格式出现数字怎么处理

Java-poi-excel-对空值单元格的读取

poi读取excel 列宽