Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。
HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft OOXML格式档案的功能。
以下是项目工程结构图:
使用POI解析EXCEL文件需要用到POI相关的jar包,这些jar包可以在apache官网上去下载:http://poi.apache.org/download.html;
这里我使用的jar包版本为poi-3.14-beta1-20151223.jar
相关代码如下:
Excel文件解析接口 IExcelParse.java
1 /* 2 * IExcelParse.java 3 * 4 * 2016-1-6 下午4:45:53 5 * 6 * RecluseKapoor 7 * 8 * Copyright © 2016, RecluseKapoor. All rights reserved. 9 * 10 */11 package com.rk.pub.poi.excel;12 13 /**14 * @Title: recluse-Excel文件解析接口15 * 16 * @Description:Excel文件解析接口,所有版本的Excel解析类都要实现该接口17 * 18 * @Company: 卡普工作室19 * 20 * @Website: http://www.cnblogs.com/reclusekapoor/21 * 22 * @author: RecluseKapoor23 * 24 * @CreateDate:2016-1-6 下午9:42:0825 * 26 * @version: 1.027 * 28 * @lastModify:29 * 30 */31 public interface IExcelParse {32 public void loadExcel(String path) throws Exception;33 34 public String getSheetName(int sheetNo);35 36 public int getSheetCount() throws Exception;37 38 public int getRowCount(int sheetNo);39 40 public int getRealRowCount(int sheetNo);41 42 public String readExcelByRowAndCell(int sheetNo, int rowNo, int cellNo)43 throws Exception;44 45 public String[] readExcelByRow(int sheetNo, int rowNo) throws Exception;46 47 public String[] readExcelByCell(int sheetNo, int cellNo) throws Exception;48 49 public void close();50 }
1 /* 2 * ExcelParse2003.java 3 * 4 * 2016-1-6 下午4:45:53 5 * 6 * RecluseKapoor 7 * 8 * Copyright © 2016, RecluseKapoor. All rights reserved. 9 * 10 */ 11 package com.rk.pub.poi.excel; 12 13 import java.io.FileInputStream; 14 import java.io.FileNotFoundException; 15 import java.io.IOException; 16 import java.sql.Timestamp; 17 import java.text.DecimalFormat; 18 import java.util.Date; 19 20 import org.apache.poi.hssf.usermodel.HSSFCell; 21 import org.apache.poi.hssf.usermodel.HSSFDateUtil; 22 import org.apache.poi.hssf.usermodel.HSSFRow; 23 import org.apache.poi.hssf.usermodel.HSSFSheet; 24 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 25 import org.apache.poi.poifs.filesystem.POIFSFileSystem; 26 27 /** 28 * @Title: recluse--2003版Excel文件解析工具 29 * 30 * @Description: 解析2003版Excel文件具体实现类 31 * 32 * @Company: 卡普工作室 33 * 34 * @Website: http://www.cnblogs.com/reclusekapoor/ 35 * 36 * @author: RecluseKapoor 37 * 38 * @CreateDate:2016-1-6 下午9:59:51 39 * 40 * @version: 1.0 41 * 42 * @lastModify: 43 * 44 */ 45 public class ExcelParse2003 implements IExcelParse { 46 // Excel工作区 47 private HSSFWorkbook wb = null; 48 49 /** 50 * 加载excel文件,获取excel工作区 51 * 52 * @param filePathAndName 53 * @throws FileNotFoundException 54 * @throws IOException 55 */ 56 @Override 57 public void loadExcel(String filePathAndName) throws FileNotFoundException, 58 IOException { 59 FileInputStream fis = null; 60 POIFSFileSystem fs = null; 61 try { 62 fis = new FileInputStream(filePathAndName); 63 fs = new POIFSFileSystem(fis); 64 wb = new HSSFWorkbook(fs); 65 } catch (FileNotFoundException e) { 66 e.printStackTrace(); 67 throw new FileNotFoundException("加载Excel文件失败:" + e.getMessage()); 68 } catch (IOException e) { 69 e.printStackTrace(); 70 throw new IOException("加载Excel文件失败:" + e.getMessage()); 71 } finally { 72 if (fis != null) { 73 fis.close(); 74 fis = null; 75 } 76 if (fs != null) { 77 fs.close(); 78 } 79 } 80 } 81 82 /** 83 * 获取sheet页名称 84 * 85 * @param sheetNo 86 * @return 87 */ 88 public String getSheetName(int sheetNo) { 89 return wb.getSheetName(sheetNo - 1); 90 } 91 92 /** 93 * 获取sheet页数 94 * 95 * @return int 96 */ 97 public int getSheetCount() throws Exception { 98 int sheetCount = wb.getNumberOfSheets(); 99 if (sheetCount == 0) {100 throw new Exception("Excel中没有SHEET页");101 }102 return sheetCount;103 }104 105 /**106 * 获取sheetNo页行数107 * 108 * @param sheetNo109 * @return110 */111 public int getRowCount(int sheetNo) {112 int rowCount = 0;113 HSSFSheet sheet = wb.getSheetAt(sheetNo - 1);114 rowCount = sheet.getLastRowNum();115 return rowCount;116 }117 118 /**119 * 获取sheetNo页行数(含有操作或者内容的真实行数)120 * 121 * @param sheetNo122 * @return123 */124 public int getRealRowCount(int sheetNo) {125 int rowCount = 0;126 int rowNum = 0;127 HSSFSheet sheet = wb.getSheetAt(sheetNo - 1);128 rowCount = sheet.getLastRowNum();129 if (rowCount == 0) {130 return rowCount;131 }132 HSSFRow row = null;133 HSSFCell cell = null;134 rowNum = rowCount;135 for (int i = 0; i < rowCount; i++) {136 row = sheet.getRow(rowNum);137 rowNum--;138 if (row == null) {139 continue;140 }141 short firstCellNum = row.getFirstCellNum();142 short lastCellNum = row.getLastCellNum();143 for (int j = firstCellNum; j < lastCellNum; j++) {144 cell = row.getCell(j);145 if (cell == null) {146 continue;147 } else if (cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {148 continue;149 } else if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {150 String value = cell.getStringCellValue();151 if (value == null || value.equals("")) {152 continue;153 } else {154 value = value.trim();155 if (value.isEmpty() || value.equals("")156 || value.length() == 0) {157 continue;158 }159 }160 }161 rowCount = rowNum + 1;162 return rowCount;163 }164 }165 rowCount = rowNum;166 return rowCount;167 }168 169 /**170 * 读取第sheetNo个sheet页中第rowNo行第cellNo列的数据171 * 172 * @param sheetNo173 * sheet页编号174 * @param rowNo175 * 行号176 * @param cellNo177 * 列号178 * @return 返回相应的excel单元格内容179 * @throws Exception180 */181 public String readExcelByRowAndCell(int sheetNo, int rowNo, int cellNo)182 throws Exception {183 String rowCellData = "";184 sheetNo = sheetNo - 1;185 HSSFSheet sheet = wb.getSheetAt(sheetNo);186 String sheetName = wb.getSheetName(sheetNo);187 try {188 HSSFRow row = sheet.getRow(rowNo - 1);189 if (row == null) {190 return "NoData";191 }192 HSSFCell cell = row.getCell((cellNo - 1));193 if (cell == null) {194 return "NoData";195 }196 int cellType = cell.getCellType();197 if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {// 数值(包括excel中数值、货币、日期、时间、会计专用等单元格格式)198 //判断数值是否为日期或时间;但是该判断方法存在漏洞,只能识别一种日期格式。199 if (HSSFDateUtil.isCellDateFormatted(cell)) {//日期、时间200 double d = cell.getNumericCellValue();201 Date date = HSSFDateUtil.getJavaDate(d);202 Timestamp timestamp = new Timestamp(date.getTime());203 String temp = timestamp.toString();204 if (temp.endsWith("00:00:00.0")) {205 rowCellData = temp.substring(0,206 temp.lastIndexOf("00:00:00.0"));207 } else if (temp.endsWith(".0")) {208 rowCellData = temp.substring(0, temp.lastIndexOf(".0"));209 } else {210 rowCellData = timestamp.toString();211 }212 } else {//数值、货币、会计专用、百分比、分数、科学记数 单元格式213 rowCellData = new DecimalFormat("0.########").format(cell214 .getNumericCellValue());215 }216 } else if (cellType == HSSFCell.CELL_TYPE_STRING) {// 字符串217 rowCellData = cell.getStringCellValue();218 } else if (cellType == HSSFCell.CELL_TYPE_FORMULA) {// 公式219 double d = cell.getNumericCellValue();220 rowCellData = String.valueOf(d);221 } else if (cellType == HSSFCell.CELL_TYPE_BLANK) {// 空值222 rowCellData = "";223 } else if (cellType == HSSFCell.CELL_TYPE_BOOLEAN) {// boolean值224 rowCellData = "";225 } else if (cellType == HSSFCell.CELL_TYPE_ERROR) {// 异常226 rowCellData = "";227 } else {228 229 }230 } catch (Exception e) {231 e.printStackTrace();232 throw new Exception(sheetName + "sheet页中" + "第" + rowNo + "行" + "第"233 + cellNo + "列" + "数据不符合要求,请检查sheet页");234 }235 return rowCellData;236 }237 238 /**239 * 读取第sheetNo个sheet页中第rowNo行的数据240 * 241 * @param sheetNo242 * 指定sheetNo页243 * @param rowNo244 * 指定rowNo行245 * @return 返回第rowNo行的数据246 * @throws Exception247 */248 public String[] readExcelByRow(int sheetNo, int rowNo) throws Exception {249 String[] rowData = null;250 HSSFSheet sheet = wb.getSheetAt(sheetNo - 1);251 HSSFRow row = sheet.getRow(rowNo - 1);252 int cellCount = row.getLastCellNum();253 rowData = new String[cellCount];254 for (int k = 1; k <= cellCount; k++) {255 rowData[k - 1] = readExcelByRowAndCell(sheetNo, rowNo, k);256 }257 return rowData;258 }259 260 /**261 * 读取第sheetNo个sheet页中第cellNo列的数据262 * 263 * @param sheetNo264 * 指定sheetNo页265 * @param cellNo266 * 指定cellNo列号267 * @return 返回第cellNo列的数据268 * @throws Exception269 */270 public String[] readExcelByCell(int sheetNo, int cellNo) throws Exception {271 String[] cellData = null;272 HSSFSheet sheet = wb.getSheetAt(sheetNo - 1);273 int rowCount = sheet.getLastRowNum();274 cellData = new String[rowCount + 1];275 for (int i = 0; i <= rowCount; i++) {276 cellData[i] = readExcelByRowAndCell(sheetNo - 1, i, cellNo - 1);277 }278 return cellData;279 }280 281 /**282 * 关闭excel工作区,释放资源283 * 284 * @throws Exception285 */286 @Override287 public void close() {288 if (wb != null) {289 try {290 wb.close();291 wb = null;292 } catch (IOException e) {293 e.printStackTrace();294 }295 }296 }297 }
1 /* 2 * ExcelParse2007.java 3 * 4 * 2016-1-6 下午4:45:53 5 * 6 * RecluseKapoor 7 * 8 * Copyright © 2016, RecluseKapoor. All rights reserved. 9 * 10 */ 11 package com.rk.pub.poi.excel; 12 13 import java.io.FileInputStream; 14 import java.io.FileNotFoundException; 15 import java.io.IOException; 16 import java.sql.Timestamp; 17 import java.text.DecimalFormat; 18 import java.util.Date; 19 20 import org.apache.poi.ss.usermodel.DateUtil; 21 import org.apache.poi.xssf.usermodel.XSSFCell; 22 import org.apache.poi.xssf.usermodel.XSSFRow; 23 import org.apache.poi.xssf.usermodel.XSSFSheet; 24 import org.apache.poi.xssf.usermodel.XSSFWorkbook; 25 26 /** 27 * @Title: recluse--2007版Excel文件解析工具 28 * 29 * @Description: 解析2007版Excel文件具体实现类 30 * 31 * @Company: 卡普工作室 32 * 33 * @Website: http://www.cnblogs.com/reclusekapoor/ 34 * 35 * @author: RecluseKapoor 36 * 37 * @CreateDate:2016-1-6 下午9:51:15 38 * 39 * @version: 1.0 40 * 41 * @lastModify: 42 * 43 */ 44 public class ExcelParse2007 implements IExcelParse { 45 // Excel工作区 46 private XSSFWorkbook wb = null; 47 48 /** 49 * 加载excel文件,获取excel工作区 50 * 51 * @param filePathAndName 52 * @throws FileNotFoundException 53 * @throws IOException 54 */ 55 public void loadExcel(String filePathAndName) throws FileNotFoundException, 56 IOException { 57 FileInputStream fis = null; 58 try { 59 fis = new FileInputStream(filePathAndName); 60 wb = new XSSFWorkbook(fis); 61 } catch (FileNotFoundException e) { 62 e.printStackTrace(); 63 throw new FileNotFoundException("加载Excel文件失败:" + e.getMessage()); 64 } catch (IOException e) { 65 e.printStackTrace(); 66 throw new IOException("加载Excel文件失败:" + e.getMessage()); 67 } finally { 68 if (fis != null) { 69 fis.close(); 70 fis = null; 71 } 72 } 73 } 74 75 /** 76 * 获取sheet页名称 77 * 78 * @param sheetNo 79 * @return 80 */ 81 public String getSheetName(int sheetNo) { 82 return wb.getSheetName(sheetNo - 1); 83 } 84 85 /** 86 * 获取sheet页数 87 * 88 * @return int 89 */ 90 public int getSheetCount() throws Exception { 91 int sheetCount = wb.getNumberOfSheets(); 92 if (sheetCount == 0) { 93 throw new Exception("Excel中没有SHEET页"); 94 } 95 return sheetCount; 96 } 97 98 /** 99 * 获取sheetNo页行数100 * 101 * @param sheetNo102 * @return103 */104 public int getRowCount(int sheetNo) {105 int rowCount = 0;106 XSSFSheet sheet = wb.getSheetAt(sheetNo - 1);107 rowCount = sheet.getLastRowNum();108 return rowCount;109 }110 111 /**112 * 获取sheetNo页行数(含有操作或者内容的真实行数)113 * 114 * @param sheetNo115 * @return116 */117 public int getRealRowCount(int sheetNo) {118 int rowCount = 0;119 int rowNum = 0;120 XSSFSheet sheet = wb.getSheetAt(sheetNo - 1);121 rowCount = sheet.getLastRowNum();122 if (rowCount == 0) {123 return rowCount;124 }125 XSSFRow row = null;126 XSSFCell cell = null;127 rowNum = rowCount;128 for (int i = 0; i < rowCount; i++) {129 row = sheet.getRow(rowNum);130 rowNum--;131 if (row == null) {132 continue;133 }134 short firstCellNum = row.getFirstCellNum();135 short lastCellNum = row.getLastCellNum();136 for (int j = firstCellNum; j < lastCellNum; j++) {137 cell = row.getCell(j);138 if (cell == null) {139 continue;140 } else if (cell.getCellType() == XSSFCell.CELL_TYPE_BLANK) {141 continue;142 } else if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) {143 String value = cell.getStringCellValue();144 if (value == null || value.equals("")) {145 continue;146 } else {147 value = value.trim();148 if (value.isEmpty() || value.equals("")149 || value.length() == 0) {150 continue;151 }152 }153 }154 rowCount = rowNum + 1;155 return rowCount;156 }157 }158 159 rowCount = rowNum;160 return rowCount;161 }162 163 /**164 * 读取第sheetNo个sheet页中第rowNo行第cellNo列的数据(通过)165 * 166 * @param sheetNo167 * sheet页编号168 * @param rowNo169 * 行号170 * @param cellNo171 * 列号172 * @return 返回相应的excel单元格内容173 * @throws Exception174 */175 public String readExcelByRowAndCell(int sheetNo, int rowNo, int cellNo)176 throws Exception {177 String rowCellData = "";178 XSSFSheet sheet = wb.getSheetAt(sheetNo - 1);179 String sheetName = wb.getSheetName(sheetNo - 1);180 try {181 XSSFRow row = sheet.getRow(rowNo - 1);182 if (row == null) {183 return "NoData";184 }185 XSSFCell cell = row.getCell((short) (cellNo - 1));186 if (cell == null) {187 return "NoData";188 }189 int cellType = cell.getCellType();190 String df = cell.getCellStyle().getDataFormatString();191 if (cellType == XSSFCell.CELL_TYPE_NUMERIC) {// 数值(包括excel中数值、货币、日期、时间、会计专用等单元格格式)192 double d = cell.getNumericCellValue();193 // 判断数值是否是日期,该方法只能识别部分日期格式,故加入第二个判断条件对不能识别的日期再次进行识别194 if (DateUtil.isCellDateFormatted(cell)195 || df.contains("yyyy\"年\"m\"月\"d\"日\"")) {// 日期、时间单元格格式196 Date date = DateUtil.getJavaDate(d);197 Timestamp timestamp = new Timestamp(date.getTime());198 String temp = timestamp.toString();199 if (temp.endsWith("00:00:00.0")) {// yyyy-MM-dd 格式200 rowCellData = temp.substring(0,201 temp.lastIndexOf("00:00:00.0"));202 } else if (temp.endsWith(".0")) {// yyyy-MM-dd hh:mm:ss 格式203 rowCellData = temp.substring(0, temp.lastIndexOf(".0"));204 } else {205 rowCellData = timestamp.toString();206 }207 } else {// 数值、货币、会计专用、百分比、分数、科学记数 单元格式208 rowCellData = new DecimalFormat("0.########").format(d);209 }210 } else if (cellType == XSSFCell.CELL_TYPE_STRING) {// 文本211 rowCellData = cell.getStringCellValue();212 } else if (cellType == XSSFCell.CELL_TYPE_FORMULA) {// 公式213 double d = cell.getNumericCellValue();214 rowCellData = String.valueOf(d);215 } else if (cellType == XSSFCell.CELL_TYPE_BLANK) {// 空216 rowCellData = "";217 } else if (cellType == XSSFCell.CELL_TYPE_BOOLEAN) {// 布尔值218 rowCellData = "";219 } else if (cellType == XSSFCell.CELL_TYPE_ERROR) {// 异常220 rowCellData = "";221 } else {222 throw new Exception(sheetName + " sheet页中" + "第" + rowNo + "行"223 + "第" + cellNo + "列,单元格格式无法识别,请检查sheet页");224 }225 } catch (Exception e) {226 e.printStackTrace();227 throw new Exception(sheetName + "sheet页中" + "第" + rowNo + "行" + "第"228 + cellNo + "列" + "数据不符合要求,请检查sheet页");229 }230 return rowCellData;231 }232 233 /**234 * 读取第sheetNo个sheet页中第rowNo行的数据235 * 236 * @param sheetNo237 * 指定sheetNo页238 * @param rowNo239 * 指定rowNo行240 * @return241 * @throws Exception242 */243 public String[] readExcelByRow(int sheetNo, int rowNo) throws Exception {244 String[] rowData = null;245 XSSFSheet sheet = wb.getSheetAt(sheetNo - 1);246 XSSFRow row = sheet.getRow(rowNo - 1);247 int cellCount = row.getLastCellNum();248 rowData = new String[cellCount];249 for (int k = 1; k <= cellCount; k++) {250 rowData[k - 1] = readExcelByRowAndCell(sheetNo, rowNo, k);251 }252 return rowData;253 }254 255 /**256 * 读取第sheetNo个sheet页中第cellNo列的数据257 * 258 * @param sheetNo259 * 指定sheetNo页260 * @param cellNo261 * 指定cellNo列号262 * @return263 * @throws Exception264 */265 public String[] readExcelByCell(int sheetNo, int cellNo) throws Exception {266 String[] cellData = null;267 XSSFSheet sheet = wb.getSheetAt(sheetNo - 1);268 int rowCount = sheet.getLastRowNum();269 cellData = new String[rowCount + 1];270 for (int i = 0; i <= rowCount; i++) {271 cellData[i] = readExcelByRowAndCell(sheetNo - 1, i, cellNo - 1);272 }273 return cellData;274 }275 276 /**277 * 关闭excel工作区,释放资源278 * 279 * @throws Exception280 */281 @Override282 public void close() {283 if (wb != null) {284 try {285 wb.close();286 } catch (IOException e) {287 e.printStackTrace();288 } finally {289 wb = null;290 }291 }292 }293 }
1 /* 2 * ExcelParse.java 3 * 4 * 2016-1-6 下午4:45:53 5 * 6 * RecluseKapoor 7 * 8 * Copyright © 2016, RecluseKapoor. All rights reserved. 9 * 10 */ 11 package com.rk.pub.poi; 12 13 import com.rk.pub.poi.excel.ExcelParse2003; 14 import com.rk.pub.poi.excel.ExcelParse2007; 15 import com.rk.pub.poi.excel.IExcelParse; 16 17 /** 18 * @Title:recluse-Excel文件解析工具类(兼容2003和2007版本Excel) 19 * 20 * @Description: 该工具类用于解析Excel文件,同时兼容2003版和2007版Excel文件的解析,且随时可以进行新版本的扩展, 21 * <p> 22 * 若要支持新版本Excel格式的解析,只需要在excle包下新增一个实现了IExcelParse接口的实现类, 23 * <p> 24 * 在新增的实现类中实现新对版本Excel格式的解析的功能代码即可 ; 该扩展方法可以最大程度的实现解耦 。 25 * <p> 26 * 27 * @Company: 卡普工作室 28 * 29 * @Website: http://www.cnblogs.com/reclusekapoor/ 30 * 31 * @author: RecluseKapoor 32 * 33 * @CreateDate:2016-1-6 下午9:43:56 34 * 35 * @version: 1.0 36 * 37 * @lastModify: 38 * 39 */ 40 public class ExcelParse { 41 42 private IExcelParse excelParse = null; 43 44 /** 45 * 加载实例,根据不同版本的Excel文件,加载不同的具体实现实例 46 * 47 * @param path 48 * @return 49 */ 50 private boolean getInstance(String path) throws Exception { 51 path = path.toLowerCase(); 52 if (path.endsWith(".xls")) { 53 excelParse = new ExcelParse2003(); 54 } else if (path.endsWith(".xlsx")) { 55 excelParse = new ExcelParse2007(); 56 } else { 57 throw new Exception("对不起,目前系统不支持对该版本Excel文件的解析。"); 58 } 59 return true; 60 } 61 62 /** 63 * 获取excel工作区 64 * 65 * @param path 66 * @throws Exception 67 */ 68 public void loadExcel(String filePathAndName) throws Exception { 69 getInstance(filePathAndName); 70 excelParse.loadExcel(filePathAndName); 71 } 72 73 /** 74 * 获取sheet页名称 75 * 76 * @param sheetNo 77 * @return 78 */ 79 public String getSheetName(int sheetNo) { 80 return excelParse.getSheetName(sheetNo); 81 } 82 83 /** 84 * 获取sheet页数 85 * 86 * @return 87 * @throws Exception 88 */ 89 public int getSheetCount() throws Exception { 90 return excelParse.getSheetCount(); 91 } 92 93 /** 94 * 获取sheetNo页行数 95 * 96 * @param sheetNo 97 * @return 98 * @throws Exception 99 */100 public int getRowCount(int sheetNo) {101 return excelParse.getRowCount(sheetNo);102 }103 104 /**105 * 获取sheetNo页行数(含有操作或者内容的真实行数)106 * 107 * @param sheetNo108 * @return109 * @throws Exception110 */111 public int getRealRowCount(int sheetNo) {112 return excelParse.getRealRowCount(sheetNo);113 }114 115 /**116 * 读取第sheetNo个sheet页中第rowNo行第cellNo列的数据117 * 118 * @param sheetNo119 * sheet页编号120 * @param rowNo121 * 行号122 * @param cellNo123 * 列号124 * @return 返回相应的excel单元格内容125 * @throws Exception126 */127 public String readExcelByRowAndCell(int sheetNo, int rowNo, int cellNo)128 throws Exception {129 return excelParse.readExcelByRowAndCell(sheetNo, rowNo, cellNo);130 }131 132 /**133 * 读取指定SHEET页指定行的Excel内容134 * 135 * @param sheetNo136 * 指定SHEET页137 * @param lineNo138 * 指定行139 * @return140 * @throws Exception141 */142 public String[] readExcelByRow(int sheetNo, int rowNo) throws Exception {143 return excelParse.readExcelByRow(sheetNo, rowNo);144 }145 146 /**147 * 读取指定SHEET页指定列中的数据148 * 149 * @param sheetNo150 * 指定SHEET页151 * @param cellNo152 * 指定列号153 * @return154 * @throws Exception155 */156 public String[] readExcelByCell(int sheetNo, int cellNo) throws Exception {157 return excelParse.readExcelByCell(sheetNo, cellNo);158 }159 160 /**161 * 关闭excel工作区,释放资源162 * 163 */164 public void close() {165 excelParse.close();166 }167 168 /**169 * 测试方法170 * 171 * @param args172 */173 public static void main(String[] args) {174 ExcelParse parse = new ExcelParse();175 try {176 // 加载excel文件177 parse.loadExcel("E:\\2007.xls");178 // 统计sheet页数179 System.out.println(parse.getSheetCount());180 // 读取单元格信息181 System.out.println(parse.readExcelByRowAndCell(1, 1, 1));182 } catch (Exception e) {183 e.printStackTrace();184 } finally {185 // 释放资源186 parse.close();187 }188 }189 190 }