Java对Excel的读取操作
2012-01-13 16:16
381 查看
因为工作用到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();
}
}
/**
* @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 (读取Excel2003 2007,Poi实现)
- Java 操作 Excel (读取Excel2007,Poi实现)
- java操作office和pdf文件java读取word,excel和pdf文档内容
- java 对excel操作 读取、写入、修改数据;导出数据库数据到excel
- java 操作 poi 解析、读取 Excel 文件
- 用Java POI操作Excel,读取数据导入DB2数据库
- Java操作Excel使用jxl.jar--读取Excel
- JAVA读取等操作Excel文件
- Java操作Excel之理解JXL--读取Excel模板动态写入数据并生成Excel
- 读取excel文件(jxl.jar包简介/java操作excel jxl.jar下载地址)
- java中excel的读取操作
- java poi读取excel操作示例(2个代码)
- Java 操作 Excel (读取Excel2003 2007,Poi实现)
- Java 操作 Excel (读取Excel2003 2007,Poi实现)
- 【JAVA】poi操作,excel读取数据。
- JXL介绍 Java操作Excel--读取Excel(简单步骤,适合初学者)
- Java操作Excel之理解JXL--读取Excel
- Java 操作 Excel (读取Excel2007,Poi实现)
- Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pdf文档内容
- Java程序员从笨鸟到菜鸟之(一百零三)java操作office和pdf文件(一)java读取word,excel和pdf文档内容