前不久,自己写了一个Jxl读取Excel文件的,支持多张sheet的结构。
要使用,自己去下载jxl这个jar包,具体的作用在文件中有说明。
package lzb.utls.io;
import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.WorkbookSettings;
/**
* Jxl目前只支持Excel 2003版本
* 支持Excel的多表读数据
* @author lizhenbin
*
*/
public class JxlUtil {
/**
* 读取路径下的Excel文件
* @param excelfilePath 文件路径
* @return Excel的全部信息包装再一个list
* @throws Exception
*/
public static List<String> readExcel(String excelfilePath) throws Exception {
InputStream ins = new FileInputStream(excelfilePath); //读取xls文件
WorkbookSettings setEncode = new WorkbookSettings(); //设置读文件编码
setEncode.setEncoding("GBK");
Workbook rwb = Workbook.getWorkbook(ins, setEncode);
List<String> alldata = new ArrayList<String>();
alldata.clear();
Sheet[] sheets=rwb.getSheets();//获得当前Excel表共有几个sheet
int pages = sheets.length; //获得表数
//将excel表中的数据读取出来
//在从Excel中读取数据的时候不需要知道每个sheet有几行,有那多少列
for(int i=0; i<pages; i++) {
Sheet sheet = rwb.getSheet(i);
int cols = sheet.getColumns(); //列
for(int j=0; j<cols; j++) {
Cell excelColumn = sheet.getCell(j, 0);
String strColumn = excelColumn.getContents(); //获得列信息
alldata.add(strColumn);
}
//读取每一行对应的列数目
//循环读取每一行的全部列数目的内容
int rows = sheet.getRows(); //行
for(int r=1; r<rows; r++) { //行循环,Excel的行列是从(0,0)开始
for(int c=0; c<cols; c++) { //列循
Cell excelRows = sheet.getCell(c, r);
String strRow = excelRows.getContents();
alldata.add(strRow);
}
}
}
ins.close();
return alldata;
}
/**
* 获取Excel列数List
* @param excelfilePath
* @return
* @throws Exception
*/
public List<Integer> getCols(String excelfilePath) throws Exception {
List<Integer> colslist = new ArrayList<Integer>();
InputStream ins = new FileInputStream(excelfilePath); //读取xls文件
WorkbookSettings setEncode = new WorkbookSettings(); //设置读文件编码
setEncode.setEncoding("GBK");
Workbook rwb = Workbook.getWorkbook(ins, setEncode);
Sheet[] sheets = rwb.getSheets();//获得当前Excel表共有几个sheet
int pages = sheets.length; //获得表数
for(int i=0; i<pages; i++) {
Sheet sheet = rwb.getSheet(i);
colslist.add(sheet.getColumns()); //列
}
ins.close();
return colslist;
}
/**
* 获取Excel行数List
* @param excelfilePath
* @return
* @throws Exception
*/
public List<Integer> getRows(String excelfilePath) throws Exception {
List<Integer> rowslist = new ArrayList<Integer>();
InputStream ins = new FileInputStream(excelfilePath); //读取xls文件
WorkbookSettings setEncode = new WorkbookSettings(); //设置读文件编码
setEncode.setEncoding("GBK");
Workbook rwb = Workbook.getWorkbook(ins, setEncode);
Sheet[] sheets = rwb.getSheets();//获得当前Excel表共有几个sheet
int pages = sheets.length; //获得表数
for(int i=0; i<pages; i++) {
Sheet sheet = rwb.getSheet(i);
rowslist.add(sheet.getRows()); //行
}
ins.close();
return rowslist;
}
}
后面的用Jxl构建一张Excel的表格时候,我总是跳不出要传一个实实在在POJO过来的想法,现在还在构思之中,亲各位高手指正。