2

package jp.co.test.common;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ReadExcelProcess {

 /**
  * Excelファイルの読込
  *
  * @param file        ファイル格納パス
  * @return dataList   新規されたファイル
  */
 public static List<List<Object>> readExcel(File file) throws IOException {

  // ファイル名称を取得する
  String fName = file.getName();

  // ファイルの保存版本区分を取得する
  String extension = fName.lastIndexOf(Constant.POINT) == -1 ? Constant.EMPTY : fName
    .substring(fName.lastIndexOf(Constant.POINT) + 1);
  
  // ファイルの保存類型によって、データの読込処理
  if (Constant.EXCEL2003.equals(extension.toUpperCase())) {

   // Excel2003の読込メソッド処理
   return read2003Excel(file);
   
  } else if (Constant.EXCEL2007.equals(extension.toUpperCase())) {

   // Excel2007の読込メソッド処理
   return read2007Excel(file);
   
  } else {

   // 異常処理
   throw new IOException("不具合なファイル類型:" + extension);
  }
 }

 /**
  * Excel2003ファイルの読込処理
  *
  * @param file 選択されたファイル
  * @return dataList データリスト
  */
 public static List<List<Object>> read2003Excel(File file)
   throws IOException {

  // 戻るデータリストの初期化
  List<List<Object>> dataList = new ArrayList<List<Object>>();

  // 新規ワークブック
  HSSFWorkbook workBook = new HSSFWorkbook(new FileInputStream(file));
  // 新規シート
  HSSFSheet sheet = workBook.getSheet(Constant.SHEET_NAME);
  // 新規行
  HSSFRow row = null;
  // 新規列
  HSSFCell cell = null;
  // セルの値の変数
  Object val = null;
  // データフォーマット定義
  DecimalFormat df = new DecimalFormat(Constant.DATA_FORMAT);
  // 日付のフォーマット
  SimpleDateFormat sdf = new SimpleDateFormat(Constant.DATA_FORMAT);

  // 毎シートの行について、行番号が6から、最大行番号まで、毎行を読込する
  for (int i = sheet.getFirstRowNum(); i < sheet.getLastRowNum(); i++) {
   
   // 現在行を取得する、 不存在の場合、処理終了
   row = sheet.getRow(i);
   if (row == null) {
    break;
   }
   
   List<Object> objList = new ArrayList<Object>();
   // 毎行セルのindexについて、0から、セルの個数まで、毎列を読込する
   for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
    
    // 毎行のセルを取得
    cell = row.getCell(j);
    if (cell == null) {
     val = null;
     objList.add(val);
     continue;
    }
    
    // セルのデータタイプによって、各メソッドで値を取得する
    switch (cell.getCellType()) {
    // 文字列
    case HSSFCell.CELL_TYPE_STRING:
     val = cell.getStringCellValue();
     break;
    // 数値
    case HSSFCell.CELL_TYPE_NUMERIC:
     if (Constant.EMAIL_DATA.equals(cell.getCellStyle().getDataFormatString())) {
      val = df.format(cell.getNumericCellValue());
     } else if (Constant.GENERAL_DATA.equals(cell.getCellStyle()
       .getDataFormatString())) {
      val = df.format(cell.getNumericCellValue());
     } else {
      val = sdf.format(HSSFDateUtil.getJavaDate(cell
        .getNumericCellValue()));
     }
     break;
    // boolean類型
    case HSSFCell.CELL_TYPE_BOOLEAN:
     val = cell.getBooleanCellValue();
     break;
    // 空値
    case HSSFCell.CELL_TYPE_BLANK:
     val = Constant.EMPTY;
     break;
    default:
     val = cell.toString();
     break;
    }
    objList.add(val);
   }
   dataList.add(objList);
  }
  workBook.close();
  return dataList;
 }

 /**
  * Excelのヘッダー部の読込処理
  *
  * @param file
  * @return
  * @throws IOException
  */
 public static String[] readExcelHead(File file) throws IOException {
  
  // 新規ワークブック
  HSSFWorkbook wb = new HSSFWorkbook(new FileInputStream(file));
  // ワークシートを取得する
  HSSFSheet sheet = wb.getSheet(Constant.SHEET_NAME);
  // 行新規
  HSSFRow row = null;
  // セル新規
  HSSFCell cell = null;
  // ヘッダー部を取得する
  row = sheet.getRow(Constant.CELL_INDEX);
  String[] buff = new String[row.getLastCellNum()];
  for (int i = row.getFirstCellNum(); i < row.getLastCellNum(); i++) {
   cell = row.getCell(i);
   buff[i] = cell.getStringCellValue();
  }
  wb.close();
  return buff;
 }

 /**
  * 2007Excelの読込処理
  *
  * @param file
  * @return
  */
 public static List<List<Object>> read2007Excel(File file)
   throws IOException {
  
  // 戻るデータリストの初期化
  List<List<Object>> dataList = new ArrayList<List<Object>>();
  // 新規ワークブック
  XSSFWorkbook xwb = new XSSFWorkbook(new FileInputStream(file));
  // ワークシートを取得する
  XSSFSheet sheet = xwb.getSheet(Constant.SHEET_NAME);
  // 行新規
  XSSFRow row = null;
  // セル新規
  XSSFCell cell = null;
  Object val = null;
  // データフォーマット定義
  DecimalFormat df = new DecimalFormat(Constant.DATA_FORMAT);
  // 日付のフォーマット
  SimpleDateFormat sdf = new SimpleDateFormat(Constant.DATE_FORMAT);
  
  // 毎シートの行について、行番号が6から、最大行番号まで、毎行を読込する
  for (int i = sheet.getFirstRowNum(); i < sheet
    .getPhysicalNumberOfRows(); i++) {
   
   // 現在行を取得する、 不存在の場合、処理続き
   row = sheet.getRow(i);
   if (row == null) {
    continue;
   }
   
   List<Object> objList = new ArrayList<Object>();
   // 毎行セルのindexについて、0から、セルの個数まで、毎列を読込する
   for (int j = row.getFirstCellNum(); j < row.getLastCellNum(); j++) {
    
    // 毎行のセルを取得
    cell = row.getCell(j);
    if (cell == null) {
     val = null;
     objList.add(val);
     continue;
    }
    
    // セルのデータタイプによって、各メソッドで値を取得する
    switch (cell.getCellType()) {
    // 文字列
    case XSSFCell.CELL_TYPE_STRING:
     val = cell.getStringCellValue();
     break;
    // 数値
    case XSSFCell.CELL_TYPE_NUMERIC:
     if (Constant.EMAIL_DATA.equals(cell.getCellStyle().getDataFormatString())) {
      val = df.format(cell.getNumericCellValue());
     } else if (Constant.GENERAL_DATA.equals(cell.getCellStyle()
       .getDataFormatString())) {
      val = df.format(cell.getNumericCellValue());
     } else {
      val = sdf.format(HSSFDateUtil.getJavaDate(cell
        .getNumericCellValue()));
     }
     break;
    // boolean類型
    case XSSFCell.CELL_TYPE_BOOLEAN:
     val = cell.getBooleanCellValue();
     break;
    // 空値
    case XSSFCell.CELL_TYPE_BLANK:
     val = Constant.EMPTY;
     break;
    default:
     val = cell.toString();
     break;
    }
    objList.add(val);
   }
   dataList.add(objList);
  }
  xwb.close();
  return dataList;
 }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值