Java对Excel的读取操作
来源:互联网 发布:linux 关闭tomcat命令 编辑:程序博客网 时间:2024/06/01 13:54
因为工作用到java操作Excel,今天在实际开发前作了一个小的dome,对于2003格式的Excel的操作用的是jxl.jar包。对于2007格式的Excel用的是poi-examples-3.7-20101029.jar,poi-3.7-20101029.jar,poi-ooxml-3.7-20101029.jar,poi-ooxml-schemas-3.7-20101029.jar,poi-scratchpad-3.7-20101029.jar,dom4j-1.6.1.jar,geronimo-stax-api_1.0_spec-1.0.jar,xmlbeans-2.3.0.jar等包
/**
* @param args
*/
public static void main(String[] args) {
// EXCELのパスにより、データを取得して
File file = new File("D:/11111.xlsx");
// File file1 = new File("D:/var/am/ANONYMOUS/tmp/test_null_20120112.xls");
// ReadExcels(file1, 1);
// readExcelData(file);
readExcelData2(file);
}
以下是对03格式的操作
/**
*
* EXCELを読む
* @param file ファイル流
* @param sheetNum どのシートを読むか
*/
public static List<Object> ReadExcels(File file, int sheetNum) {
// 戻り値
List<Object> listData = new ArrayList<Object>();
//ファイル流を作成し、EXCELファイルを読み
try {
InputStream is = new FileInputStream(file.getAbsolutePath());
Workbook wb = Workbook.getWorkbook(is);
// パラメータsheetNumによりどのシートがことにします。
Sheet sheet = wb.getSheet(sheetNum);
// シート①を読み場合
if (sheetNum == 0) {
}
// シート②を読み場合
if (sheetNum == 1){
// ヘッダ部で格納するデータ用
Map<String, String> headMap = new HashMap<String, String>();
// ヘッダ部用キーで
String headkey;
// ヘッダ部用値で
String headValue;
// 期計(ヘッダ用で)
int syukeiHeadFlag = 1;
// タイトル名
String titleNm = "";
// ヘッダ部を読み
// シートのカラムのカウンタ
for (int i = 5; i < sheet.getColumns(); i++) {
// ヘッダ部には四つのカラムがあります。
for (int j = 0; j < 4; j++) {
// キーを取得する
if (StringUtils.equals(sheet.getCell(8, 5+ i).getContents(), "期計")) {
syukeiHeadFlag ++;
titleNm = sheet.getCell(8, 5+ i).getContents() + "_" + String.valueOf(syukeiHeadFlag);
} else {
titleNm = sheet.getCell(8, 5+ i).getContents();
}
headkey = sheet.getCell(9 + j, 4).getContents()
+ titleNm;
// 値を取得する
headValue = sheet.getCell(9 + j, 5+ i).getContents();
// マップにキーと値を格納する
headMap.put(headkey, headValue);
}
}
// 明細部で格納するデータ用
Map<String, String> detailMap = new HashMap<String, String>();
List<Map<String, String>> listDetailMap = new ArrayList<Map<String, String>>();
// 明細部用キーで
String detailkey;
// 明細部用値で
String detailValue;
// 期計(明細用で)
int syukeiDetalFlag = 1;
int whileflag = 15;
while (whileflag <= sheet.getRows()) {
syukeiDetalFlag = 1;
if (StringUtils.equals("", sheet.getCell(whileflag, 4).getContents())) {
for (int i = 0; i < sheet.getColumns(); i++) {
if (i != 4) {
detailMap = new HashMap<String, String>();
// キーを取得する
if (StringUtils.equals(sheet.getCell(whileflag - 1, i).getContents(), "期計")) {
syukeiDetalFlag ++;
detailkey = "期計" + "_" + String.valueOf(syukeiDetalFlag);
} else {
detailkey = sheet.getCell(whileflag - 1, i).getContents();
}
// 値を取得する
detailValue = sheet.getCell(whileflag, i).getContents();
// マップにキーと値を格納する
detailMap.put(detailkey, detailValue);
}
}
// リストにマップを格納する
listDetailMap.add(detailMap);
// ループフラグとするカウント
whileflag++;
} else {
syukeiDetalFlag = 1;
for (int i = 0; i < sheet.getColumns(); i++) {
detailMap = new HashMap<String, String>();
for (int j = 0; j < 4; j ++) {
if (j == 0) {
if (i != 4) {
// キーを取得する
if (StringUtils.equals(sheet.getCell(whileflag - 1, i).getContents(), "期計")) {
syukeiDetalFlag ++;
detailkey = "期計" + "_" + String.valueOf(syukeiDetalFlag);
} else {
detailkey = sheet.getCell(whileflag - 1, i).getContents();
}
// 値を取得する
detailValue = sheet.getCell(whileflag, i).getContents();
// マップにキーと値を格納する
detailMap.put(detailkey, detailValue);
}
} else {
// キーを取得する
if (StringUtils.equals(sheet.getCell(whileflag - 1, i).getContents(), "期計")) {
syukeiDetalFlag ++;
detailkey = "期計" + "_" + String.valueOf(syukeiDetalFlag);
} else {
detailkey = sheet.getCell(whileflag - 1, i).getContents();
}
// 値を取得する
detailValue = sheet.getCell(whileflag, 5).getContents();
// マップにキーと値を格納する
detailMap.put(detailkey, detailValue);
}
// ループフラグとするカウント
whileflag++;
}
}
// リストにマップを格納する
listDetailMap.add(detailMap);
}
}
// ヘッダ部のデータを取得する
listData.add(headMap);
// 明細部のデータを取得する
listData.add(listDetailMap);
}
} catch (FileNotFoundException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (BiffException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
return listData;
}
以下是对07格式的操作
/**
* 拡張名は「xlsx」のファイルを取得する
* @param file ファイルオブジェクト
*/
public static void readExcelData2(File file) {
try {
// EXCELファイル対象を取得する
XSSFWorkbook xwb = new XSSFWorkbook(file.getAbsolutePath());
// EXCELの中の行オブジェクトを宣言します。
XSSFRow row;
// カラムのデータを取得する用で格納するオブジェクト
String strKaramu;
// 総シート数を取得する
int sheet_size = xwb.getNumberOfSheets();
// 全部なシートをループにしています。
for (int sheetindex = 0; sheetindex < sheet_size; sheetindex++) {
// EXCELにシートの対象を取得する
XSSFSheet sheet = xwb.getSheetAt(sheetindex);
//
System.out.println("シート" + String.valueOf(sheetindex + 1));
// 該当のシートの行数によりループにします。
for (int i = sheet.getFirstRowNum(); i < sheet.getPhysicalNumberOfRows(); i++) {
// i行のデータを取得する
row = sheet.getRow(i);
// 該当のシートのカラム数によりループにします。
for (int j = row.getFirstCellNum(); j < row.getPhysicalNumberOfCells(); j++) {
//cellString中存的是读取出来的那个单元格中的内容
strKaramu = row.getCell(j).toString();
System.out.println(strKaramu);
}
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
- Java对Excel的读取操作
- POI对Excel操作——java读取Excel数据
- java对Excel的操作
- java 对EXCEL 的操作
- java 对excel的操作
- java对excel的操作
- java 对excel的操作
- Java对Excel文件的读取
- Java对Excel文件的读取--后续
- java 对Excel的读取和写入
- java对excel的创建,读取,复制
- java对Excel操作
- 对Excel表的操作(读取,更新,创建)
- java操作excel之读取excel的内容
- jexcelapi java对excel的操作
- java对word、excel、pdf的操作
- java对excel文件的读写操作
- java对Excel的写操作
- weblogic 部署后出现Error 404--Not Found
- 利用PL/SQL工具导出、导入数据库、视图、解发器等
- Query 创建方法
- XSL-FO
- errno.h & errno-base.h
- Java对Excel的读取操作
- linux多线程博客
- js 给button按钮绑定enter键
- template 的递归调用问题
- javascript笔记1——js初步认识
- mount
- 传智博客毕向东老师java基础视频笔记——Day 01
- IDOC&ALE常用tcode
- 创建表空间