POI读取Excel的问题,急!!! 想问大家怎么样用POI读取指定目录的表格,表格打开默认第一的读取我已经实现,比如一个xls文件有N个目录,而每个目录下都有表格,那么我怎么想读取我指定的表格呢,知道的告诉我下,谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 根据不同的名称创建不同的sheet package com.aiflow.TestJreeChart;import java.io.FileInputStream;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFDateUtil;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.hssf.util.Region;import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class poi { public void readExcel(String filePath) { try { POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath)); // 创建工作簿 HSSFWorkbook workBook = new HSSFWorkbook(fs); /** * * 获得Excel中工作表个数 * */ System.out.println("工作表个数 :" + workBook.getNumberOfSheets()); for (int i = 0; i < workBook.getNumberOfSheets(); i++) { // 创建工作表 HSSFSheet sheet = workBook.getSheetAt(i); int rows = sheet.getPhysicalNumberOfRows(); // 获得行数 if (rows > 0) { sheet.getMargin(HSSFSheet.TopMargin); for (int r = 0; r < rows; r++) { // 行循环 HSSFRow row = sheet.getRow(r); if (row != null) { int cells = row.getLastCellNum();// 获得列数 for (short c = 0; c < cells; c++) { // 列循环 HSSFCell cell = row.getCell(c); if (cell != null) { String value = getValue(cell); System.out.println("第" + r + "行 " + "第" + c + "列:" + value); } } } } } // 查询合并的单元格 for (i = 0; i < sheet.getNumMergedRegions(); i++) { System.out.println("第" + i + "个合并单元格"); Region region = sheet.getMergedRegionAt(i); int row = region.getRowTo() - region.getRowFrom() + 1; int col = region.getColumnTo() - region.getColumnFrom() + 1; System.out.println("起始行:" + region.getRowFrom()); System.out.println("起始列:" + region.getRowTo()); System.out.println("所占行:" + row); System.out.println("所占列:" + col); } } } catch (Exception ex) { ex.printStackTrace(); } } public String getValue(HSSFCell cell) { String value = ""; switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_NUMERIC: // 数值型 if (HSSFDateUtil.isCellDateFormatted(cell)) { // 如果是date类型则 ,获取该cell的date值 value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString(); } else {// 纯数字 value = String.valueOf(cell.getNumericCellValue()); } break; /* 此行表示单元格的内容为string类型 */ case HSSFCell.CELL_TYPE_STRING: // 字符串型 value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_FORMULA:// 公式型 // 读公式计算值 value = String.valueOf(cell.getNumericCellValue()); if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串 value = cell.getStringCellValue().toString(); } cell.getCellFormula(); break; case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔 value = " " + cell.getBooleanCellValue(); break; /* 此行表示该单元格值为空 */ case HSSFCell.CELL_TYPE_BLANK: // 空值 value = ""; break; case HSSFCell.CELL_TYPE_ERROR: // 故障 value = ""; break; default: value = cell.getStringCellValue().toString(); } return value; } public static void main(String args[]) { poi im = new poi(); im.readExcel("e:/zxb.xls"); }}这是我的代码,怎么让我可以读取任意的sheet中的表格 请教高手,线程互斥怎么没起作用??? JAVA泛型,数组编译不通? JAVA中如何取得当前月份 static方法可以被override吗? 求解 偶菜菜程序的问题 Java面向对象方式(观察者模式)解决菲波拉契数列问题 接触JAVA的第一大难题 ̄ ̄ ̄ ̄ ̄ ̄ ̄不要说不告诉我! 请问java中如何实现报表设计问题? 创建hashmap时,可以自己定制它的load factor。谁能告诉我这个参数起什么作用? 一道SCJP的题目 又是个变量互换问题
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
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.hssf.util.Region;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;public class poi { public void readExcel(String filePath) {
try {
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(filePath));
// 创建工作簿
HSSFWorkbook workBook = new HSSFWorkbook(fs); /**
*
* 获得Excel中工作表个数
*
*/
System.out.println("工作表个数 :" + workBook.getNumberOfSheets());
for (int i = 0; i < workBook.getNumberOfSheets(); i++) {
// 创建工作表
HSSFSheet sheet = workBook.getSheetAt(i);
int rows = sheet.getPhysicalNumberOfRows(); // 获得行数
if (rows > 0) {
sheet.getMargin(HSSFSheet.TopMargin);
for (int r = 0; r < rows; r++) { // 行循环
HSSFRow row = sheet.getRow(r);
if (row != null) {
int cells = row.getLastCellNum();// 获得列数
for (short c = 0; c < cells; c++) { // 列循环
HSSFCell cell = row.getCell(c);
if (cell != null) {
String value = getValue(cell);
System.out.println("第" + r + "行 " + "第" + c
+ "列:" + value);
}
}
}
}
}
// 查询合并的单元格
for (i = 0; i < sheet.getNumMergedRegions(); i++) {
System.out.println("第" + i + "个合并单元格");
Region region = sheet.getMergedRegionAt(i);
int row = region.getRowTo() - region.getRowFrom() + 1;
int col = region.getColumnTo() - region.getColumnFrom() + 1;
System.out.println("起始行:" + region.getRowFrom());
System.out.println("起始列:" + region.getRowTo());
System.out.println("所占行:" + row);
System.out.println("所占列:" + col);
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
} public String getValue(HSSFCell cell) {
String value = "";
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC: // 数值型
if (HSSFDateUtil.isCellDateFormatted(cell)) {
// 如果是date类型则 ,获取该cell的date值
value = HSSFDateUtil.getJavaDate(cell.getNumericCellValue()).toString();
} else {// 纯数字
value = String.valueOf(cell.getNumericCellValue());
}
break; /* 此行表示单元格的内容为string类型 */
case HSSFCell.CELL_TYPE_STRING: // 字符串型
value = cell.getStringCellValue();
break;
case HSSFCell.CELL_TYPE_FORMULA:// 公式型
// 读公式计算值
value = String.valueOf(cell.getNumericCellValue());
if (value.equals("NaN")) {// 如果获取的数据值为非法值,则转换为获取字符串
value = cell.getStringCellValue().toString();
}
cell.getCellFormula();
break;
case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔
value = " " + cell.getBooleanCellValue();
break; /* 此行表示该单元格值为空 */
case HSSFCell.CELL_TYPE_BLANK: // 空值
value = "";
break;
case HSSFCell.CELL_TYPE_ERROR: // 故障
value = "";
break;
default:
value = cell.getStringCellValue().toString();
}
return value;
} public static void main(String args[]) {
poi im = new poi();
im.readExcel("e:/zxb.xls");
}
}
这是我的代码,怎么让我可以读取任意的sheet中的表格