Chinaunix
标题:
java poi 读取excel时候的问题
[打印本页]
作者:
pwdisok
时间:
2007-12-04 11:11
标题:
java poi 读取excel时候的问题
写了一个java读取excel表格的小程序
如果没有cell中都是文本类型的话,就可以很容易实现读取(打印出来)
但是如果在excel中cell的数据为数字的话,就不能读取了,必须要在这个数据前面手动加上一个('),这样使其变成一个文本类型的,通过程序自动实现,求解
现在我已经做了判断,但接下来应该如何,做转换呢??
if(cell0.getCellType()==CELL_TYPE_NUMERIC ¦ ¦ cell1.getCellType()==CELL_TYPE_NUMERIC ¦ ¦ cell2.getCellType()==CELL_TYPE_NUMERIC){
package cn.bidlink.test;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Date;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
public class readxls {
private static final int CELL_TYPE_NUMERIC = 0;
static String filename = "test.xls"; // 要读取的excel表的文件名称
static String c0 = null; // 单元格的内容
static String c1 = null;
static String c2 = null;
// static String c3=null;
public static void main(String[] args) throws FileNotFoundException, IOException, NullPointerException{
POIFSFileSystem file =new POIFSFileSystem(new FileInputStream(filename)); // 打开输入流
HSSFWorkbook book = new HSSFWorkbook(file); //
HSSFSheet sheet1 = book.getSheetAt(0); // 读取sheet1(book.getSheetAt(0)这里的0表示1!)
int total = sheet1.getLastRowNum(); // 读取该表的总行数
System.out.println("loading...");
System.out.println("共读到数据" + total + "条");
try{
for(int i = 0 ;i <=total;i++){
HSSFRow rows = sheet1.getRow(i); // 读取sheet1中的第i行
HSSFCell cell0 = rows.getCell((short)0); // 读取出第i行的第一列
HSSFCell cell1 = rows.getCell((short)1);
HSSFCell cell2 = rows.getCell((short)2);
// HSSFCell cell3 = rows.getCell((short)3);
// if(cell0.getCellType()==CELL_TYPE_NUMERIC ¦ ¦ cell1.getCellType()==CELL_TYPE_NUMERIC ¦ ¦ cell2.getCellType()==CELL_TYPE_NUMERIC){
// // 判断cell是否为数字
//
// }
c0 = cell0.getStringCellValue(); // 获取单元格的字符(内容)
c1 = cell1.getStringCellValue().trim();
c2 = cell2.getStringCellValue().trim();
// c3 = cell3.getStringCellValue();
System.out.println(c0+" ¦ "+c1+" ¦ "+c2);
}
}catch(Exception e){
e.printStackTrace();
}
}
}
复制代码
作者:
kakasi
时间:
2007-12-04 23:26
该如何,有什么问题了?
作者:
pwdisok
时间:
2007-12-06 15:27
标题:
该如何做转换呢!!??
该如何做转换呢!!??
作者:
kakasi
时间:
2007-12-06 17:34
if(cell0.getCellType()==CELL_TYPE_NUMERIC) {
/* 伪代码
cell0.value = "'" + cell0.value;
*/
}
if(cell1.getCellType()==CELL_TYPE_NUMERIC) {
/* 伪代码
cell1.value = "'" + cell1.value;
*/
}
。。。
想这样做?
作者:
pwdisok
时间:
2007-12-14 16:33
你的方法,我试过了,这样仍然不能解决
我请教过很多朋友,他们说这poi读取excel时候,就只能读取字符串型的
您还有更好的方法吗?
作者:
Jython
时间:
2007-12-14 16:53
我是这样做的
if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
str = cell.getStringCellValue();
} else {
str = String.valueOf((long) cell.getNumericCellValue());
} //~if~else
作者:
xiaojunhu
时间:
2007-12-18 09:13
你可以在excel里先把数字以文本的形式保存起来.如果你要导入数据库的话,而数据库中对应的字段又是int型的.所以只要再程序中转换一下就可以了。不需要想的太复杂.
作者:
pwdisok
时间:
2007-12-29 15:20
标题:
回复 #7 xiaojunhu 的帖子
你的想法很好
我的意思是想把excel中的内容直接读取出来然后自动转换文本格式
如果手动更改成文本格式(还不如直接往数据库中录入呢!)
我们一般的excel表格信息中有相当多的数据!
作者:
lihc_sd0531
时间:
2007-12-31 11:02
学习中!
作者:
caojiqun
时间:
2008-01-01 22:10
不是有
getNumericCellValue()
吗?
作者:
linbenxing
时间:
2009-06-03 18:04
getNumericCellValue()返回的只是指数形式的啊
作者:
linbenxing
时间:
2009-06-03 18:07
标题:
回复 #6 Jython 的帖子
谢谢拉。问题解决了。
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2