Apache POI – データの入力規則(別シート内のセルを指定した範囲指定)を設定するには
データの入力規則(別シート内のセルを指定した範囲指定)を設定するには、DVConstraintクラスのcreateFormulaListConstraintメソッドを使用し、別シートのセルの範囲を指定します。
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.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.hssf.usermodel.HSSFName; 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.ss.util.CellRangeAddressList; /** * Apache POI-HSSFを使用したサンプルプログラムです。<br/> * <br/> * <b>内容</b> * <ol type="1"> * <li>データの入力規則(別シート内のセルを指定した範囲指定)を設定します。</li> * </ol> * @author Takafumi Kondo (TK Factory) */ public class SampleAddValidationData6 extends AbstractSample { /** クラス名 */ private static final String CLASS_NAME = SampleAddValidationData6.class.getSimpleName(); /** ロガー */ private static final Logger LOGGER = Logger.getLogger(SampleAddValidationData6.class.getName()); /** 出力ファイル名 */ private static final String OUT_FILE_NAME = SAMPLE_FILE_DIRECTORY + CLASS_NAME + "Out.xls"; /** * SampleAddValidationData6オブジェクトを構築すると、 * UnsupportedOperationExceptionがスローされます。<br/> */ protected SampleAddValidationData6() { 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[] sheets = new HSSFSheet[2]; for (int i = 0; i < sheets.length; i++) { sheets[i] = workbook.createSheet(); } //データの入力規則を設定するセルを設定する CellRangeAddressList addressList = new CellRangeAddressList( //データの入力規則を設定する開始行のインデックス 0, //データの入力規則を設定する終了行のインデックス 0, //データの入力規則を設定する開始列のインデックス 0, //データの入力規則を設定する終了列のインデックス 0); //データの入力規則(別シート内のセルを指定した範囲指定)を定義する HSSFName namedRange = workbook.createName(); namedRange.setNameName("list"); namedRange.setRefersToFormula("'Sheet1'!$A$1:$A$3"); DVConstraint dvConstraint = DVConstraint.createFormulaListConstraint("list"); HSSFDataValidation dataValidation = new HSSFDataValidation(addressList, dvConstraint); //データの入力規則を設定する sheets[0].addValidationData(dataValidation); //行を追加する HSSFRow[] rows = new HSSFRow[3]; for (int i = 0; i < rows.length; i++) { rows[i] = sheets[1].createRow(i); } //セルに値を設定する HSSFCell[] cells = new HSSFCell[3]; for (int i = 0; i < cells.length; i++) { cells[i] = rows[i].createCell(0); cells[i].setCellValue(i); } //ファイルを保存する 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); } } }
関連記事
コメント 0