Apache POI – データの入力規則(範囲指定)を設定するには


データの入力規則(範囲指定)を設定するには、DVConstraintクラスのcreateNumericConstraintメソッドを使用し、入力値の種類・最大値・最小値を指定します。

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

import java.io.FileOutputStream;
import java.io.IOException;
import net.tk_factory.sample.AbstractSample;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.DVConstraint;
import org.apache.poi.hssf.usermodel.HSSFDataValidation;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.util.CellRangeAddressList;

/**
 * Apache POI-HSSFを使用したサンプルプログラムです。<br/>
 * <br/>
 * <b>内容</b>
 * <ol type="1">
 * <li>データの入力規則(範囲指定)を設定します。</li>
 * </ol>
 * @author Takafumi Kondo (TK Factory)
 */
public class SampleAddValidationData4 extends AbstractSample
{
    /** クラス名 */
    private static final String CLASS_NAME =
        SampleAddValidationData4.class.getSimpleName();

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

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

    /**
     * SampleAddValidationData4オブジェクトを構築すると、
     * UnsupportedOperationExceptionがスローされます。<br/>
     */
    protected SampleAddValidationData4()
    {
        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();

            //データの入力規則を設定するセルを設定する
            CellRangeAddressList addressList = new CellRangeAddressList(
                    //データの入力規則を設定する開始行のインデックス
                    0,
                    //データの入力規則を設定する終了行のインデックス
                    0,
                    //データの入力規則を設定する開始列のインデックス
                    0,
                    //データの入力規則を設定する終了列のインデックス
                    0);

            //データの入力規則(整数:10~100)を定義する
            DVConstraint dvConstraint =
                DVConstraint.createNumericConstraint(
                        //入力値の種類:整数
                        DVConstraint.ValidationType.INTEGER,
                        //データ:次の値の間
                        DVConstraint.OperatorType.BETWEEN,
                        //最小値
                        "10",
                        //最大値
                        "100");
            HSSFDataValidation dataValidation =
                new HSSFDataValidation(addressList, dvConstraint);

            //データの入力規則を設定する
            sheet.addValidationData(dataValidation);

            //ファイルを保存する
            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);
        }
    }
}

作成されたファイルを開くと、以下のように表示されます。
SampleAddValidationData4Out.xls

SampleAddValidationData4Out.xls(設定)

関連記事

    • 2013 01/21 5:32pm

    上位のソースの通りにした対応した場合、
    既存のCellRangeAddressList(0,0,0,0)のセルに既に指定された入力規則があれば、
    こちらから指定した入力規則は反映できませんでした。
    なにか、方法ありませんか。

  1. 入力規則が上書きされない現象は、私の方でも確認できました。

    ざっとAPI仕様を見たところ、
    シートに入力規則を追加するメソッド(HSSFSheet#addValidationData)はあるのですが、
    削除するメソッドが見当たりませんでした。。。

    HSSFSheet#addValidationDataとかHSSFDataValidationとかのソースを見れば、
    何らかしらのヒントは見つかるかもしれませんが、
    本業の方が忙しくて、ちょっとそこまで調べる時間はないです。

    お力になれなくて申し訳ありません。
    m(_ _)m

  1. トラックバック 0

return top