您的位置:首页 > 编程语言 > Java开发

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();

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: