java poi Excel2007里的SXSSFWorkbook怎样读取文件? SXSSFWorkbook只能写吗,那怎样获得要写的内容
2个回答
展开全部
Notes是一个具有Id , RuleID , MainId 属性的javaBean.
public static List<Notes> readFromXLS2007(String filePath) {
File excelFile = null;// Excel文件对象
InputStream is = null;// 输入流对象
String cellStr = null;// 单元格,最终按字符串处理
List<Notes> NotesList = new ArrayList<Notes>();// 返回封装数据的List
Notes Notes = null;// 每一个Notes对象
try {
excelFile = new File(filePath);
is = new FileInputStream(excelFile);// 获取文件输入流
XSSFWorkbook workbook2007 = new XSSFWorkbook(is);// 创建Excel2007文件对象
XSSFSheet sheet = workbook2007.getSheetAt(0);// 取出第一个工作表,索引是0
// 开始循环遍历行,表头不处理,从1开始
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Notes = new Notes();// 实例化Notes对象
XSSFRow row = sheet.getRow(i);// 获取行对象
if (row == null) {// 如果为空,不处理
continue;
}
// 循环遍历单元格
for (int j = 0; j < row.getLastCellNum(); j++) {
XSSFCell cell = row.getCell(j);// 获取单元格对象
if (cell == null) {// 单元格为空设置cellStr为空串
cellStr = "";
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {// 对布尔值的处理
cellStr = String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {// 对数字值的处理
cellStr = cell.getNumericCellValue() + "";
} else {// 其余按照字符串处理
cellStr = cell.getStringCellValue();
}
// 下面按照数据出现位置封装到bean中
if (j == 0) {
Notes.setId(new Double(cellStr).intValue());
} else if (j == 1) {
Notes.setRuleId(new Double(cellStr).intValue());
} else if (j == 2) {
Notes.setMainId(new Double(cellStr).intValue());
}
}
NotesList.add(Notes);// 数据装入List
}
} catch (IOException e) {
e.printStackTrace();
} finally {// 关闭文件流
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return NotesList;
}
}
public static List<Notes> readFromXLS2007(String filePath) {
File excelFile = null;// Excel文件对象
InputStream is = null;// 输入流对象
String cellStr = null;// 单元格,最终按字符串处理
List<Notes> NotesList = new ArrayList<Notes>();// 返回封装数据的List
Notes Notes = null;// 每一个Notes对象
try {
excelFile = new File(filePath);
is = new FileInputStream(excelFile);// 获取文件输入流
XSSFWorkbook workbook2007 = new XSSFWorkbook(is);// 创建Excel2007文件对象
XSSFSheet sheet = workbook2007.getSheetAt(0);// 取出第一个工作表,索引是0
// 开始循环遍历行,表头不处理,从1开始
for (int i = 1; i <= sheet.getLastRowNum(); i++) {
Notes = new Notes();// 实例化Notes对象
XSSFRow row = sheet.getRow(i);// 获取行对象
if (row == null) {// 如果为空,不处理
continue;
}
// 循环遍历单元格
for (int j = 0; j < row.getLastCellNum(); j++) {
XSSFCell cell = row.getCell(j);// 获取单元格对象
if (cell == null) {// 单元格为空设置cellStr为空串
cellStr = "";
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {// 对布尔值的处理
cellStr = String.valueOf(cell.getBooleanCellValue());
} else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {// 对数字值的处理
cellStr = cell.getNumericCellValue() + "";
} else {// 其余按照字符串处理
cellStr = cell.getStringCellValue();
}
// 下面按照数据出现位置封装到bean中
if (j == 0) {
Notes.setId(new Double(cellStr).intValue());
} else if (j == 1) {
Notes.setRuleId(new Double(cellStr).intValue());
} else if (j == 2) {
Notes.setMainId(new Double(cellStr).intValue());
}
}
NotesList.add(Notes);// 数据装入List
}
} catch (IOException e) {
e.printStackTrace();
} finally {// 关闭文件流
if (is != null) {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return NotesList;
}
}
追问
我没看见你用SXSSFWorkbook,你给的是读取Excel2007方法,碰到几万行的时候会内存溢出。我就是要解决这个问题。
追答
SXSSFWorkbook 是写, XSSFWorkbook 是读.
如果是写入数据可以考虑用SXSSFWorkbook xwb = new SXSSFWorkbook(workbook ,1000);
读的话我还没遇到这么大的文件,我的想法是输入流那里限制一下读取的大小.然后循环读取.
2013-01-23
展开全部
不是吧,看看下载的例子呀
追问
哪里有例子啊,我没找到啊
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询