Apache POI – セルに設定されている値を取得するには


セルに設定された値を取得するには、セルに設定されている値の型によって取得方法が変わります。

boolean型の場合にはHSSFCellクラスのgetBooleanCellValueメソッドを、
エラーコードの場合にはHSSFCellクラスのgetErrorCellValueメソッドを、
計算式の場合にはHSSFCellクラスのgetCellFormulaメソッドを、
日付型の場合にはHSSFCellクラスのgetDateCellValueメソッドを、
数値の場合にはHSSFCellクラスのgetNumericCellValueメソッドを、
文字列の場合にはHSSFCellクラスのgetRichStringCellValueメソッドを使用します。

package net.tk_factory.sample.apache.poi.cell;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Calendar;

import net.tk_factory.sample.AbstractSample;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;

/**
 * Apache POI-HSSFを使用したサンプルプログラムです。<br/>
 * <br/>
 * <b>内容</b>
 * <ol type="1">
 * <li>セルに設定された値を取得します。</li>
 * </ol>
 * @author Takafumi Kondo (TK Factory)
 */
public class SampleGetCellValue extends AbstractSample
{
    /** クラス名 */
    private static final String CLASS_NAME =
        SampleGetCellValue.class.getSimpleName();

    /** ロガー */
    private static final Logger LOGGER =
        Logger.getLogger(SampleGetCellValue.class.getName());

    /** 出力ファイル名 */
    private static final String OUT_FILE_NAME =
        SAMPLE_FILE_DIRECTORY + CLASS_NAME + "Out.xls";

    /**
     * SampleGetCellValueオブジェクトを構築すると、
     * UnsupportedOperationExceptionがスローされます。<br/>
     */
    protected SampleGetCellValue()
    {
        throw new UnsupportedOperationException();
    }

    /**
     * mainメソッドです。<br/>
     *
     * @param args 引数
     */
    public static void main(String[] args)
    {
        LOGGER.info("[START]" + CLASS_NAME);

        FileOutputStream out = null;

        try
        {
            //すでに出力ファイルが存在している場合は削除する
            deleteExistsFile(OUT_FILE_NAME);

            //ワークブックを生成する
            HSSFWorkbook workbook = new HSSFWorkbook();

            //シートを追加する
            HSSFSheet sheet = workbook.createSheet();

            //行を追加する
            HSSFRow[] rows = new HSSFRow[7];
            for (int i = 0; i < rows.length; i++)
            {
                rows[i] = sheet.createRow(i);
            }

            //セルを追加する
            HSSFCell[] cells = new HSSFCell[7];
            for (int i = 0; i < cells.length; i++)
            {
                cells[i] = rows[i].createCell(0);
            }

            //何も設定されていない場合
            LOGGER.debug(getCellValue(cells[0]));

            //boolean型の場合
            cells[1].setCellValue(true);
            LOGGER.debug(getCellValue(cells[1]));

            //エラーコードの場合
            cells[2].setCellType(HSSFCell.CELL_TYPE_ERROR);
            LOGGER.debug(getCellValue(cells[2]));

            //計算式の場合
            cells[3].setCellFormula("A2+B2");
            LOGGER.debug(getCellValue(cells[3]));

            //日付型の場合
            HSSFCellStyle style = workbook.createCellStyle();
            HSSFDataFormat format = workbook.createDataFormat();
            style.setDataFormat(format.getFormat("yyyy/mm/dd"));
            Calendar calendar = Calendar.getInstance();
            calendar.set(2010, Calendar.JANUARY, 1);
            cells[4].setCellStyle(style);
            cells[4].setCellValue(calendar);
            LOGGER.debug(getCellValue(cells[4]));

            //数値の場合
            cells[5].setCellValue(1234.56d);
            LOGGER.debug(getCellValue(cells[5]));

            //文字列の場合
            HSSFRichTextString text = new HSSFRichTextString("文字列");
            cells[6].setCellValue(text);
            LOGGER.debug(getCellValue(cells[6]));

            //ファイルを保存する
            out = new FileOutputStream(OUT_FILE_NAME);
            workbook.write(out);
        }
        catch (IOException ioex)
        {
            LOGGER.error(getStackTrace(ioex));
        }
        finally
        {
            try
            {
                if (out != null)
                {
                    out.close();
                }
            }
            catch (IOException ioex)
            {
                LOGGER.error(getStackTrace(ioex));
            }

            LOGGER.info("[E N D]" + CLASS_NAME);
        }
    }

    /**
     * セルの値を文字列に変換して返却します。<br/>
     *
     * @param cell セル
     * @return セルの設定されている値の文字列
     */
    private static String getCellValue(HSSFCell cell)
    {
        String value;

        int type = cell.getCellType();
        switch (type)
        {
            case HSSFCell.CELL_TYPE_BLANK:
                //何も設定されていない場合
                value = "";
                break;

            case HSSFCell.CELL_TYPE_BOOLEAN:
                //boolean型の場合
                value = String.valueOf(cell.getBooleanCellValue());
                break;

            case HSSFCell.CELL_TYPE_ERROR:
                //エラーコードの場合
                value = String.valueOf(cell.getErrorCellValue());
                break;

            case HSSFCell.CELL_TYPE_FORMULA:
                //計算式の場合
                value = String.valueOf(cell.getCellFormula());
                break;

            case HSSFCell.CELL_TYPE_NUMERIC:
                //数値の場合
                if (HSSFDateUtil.isCellDateFormatted(cell))
                {
                    //日付型の場合
                    value = String.valueOf(cell.getDateCellValue());
                }
                else
                {
                    //数値の場合
                    value = String.valueOf(cell.getNumericCellValue());
                }
                break;

            case HSSFCell.CELL_TYPE_STRING:
                //文字列の場合
                value = cell.getRichStringCellValue().getString();
                break;

            default:
                //その他の場合
                value = cell.getRichStringCellValue().getString();
                break;
        }

        return value;
    }
}

関連記事

  1. コメント 0

  1. トラックバック 0

return top