4

PHPExcel を使用して、ユーザーが一括データをアップロードするためにダウンロードするテンプレート Excel ドキュメントを生成しています。

その一環として、特定のフィールドをドロップダウンから選択できるようにしたいと考えています。

DataValidation の例は、次のように個々のセルに対してこれを行う方法を示しています。

$objValidation = $objPHPExcel->getActiveSheet()->getCell('B5')->getDataValidation();
$objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
$objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
$objValidation->setAllowBlank(false);
$objValidation->setShowInputMessage(true);
$objValidation->setShowErrorMessage(true);
$objValidation->setShowDropDown(true);
$objValidation->setErrorTitle('Input error');
$objValidation->setError('Value is not in list.');
$objValidation->setPromptTitle('Pick from list');
$objValidation->setPrompt('Please pick a value from the drop-down list.');
$objValidation->setFormula1('"Item A,Item B,Item C"');  // Make sure to put the list items between " and "  !!!

これは個々のセルには問題ありませんが、新しいデータ行が追加されたときに、列 B のすべてのセルをドロップダウンにしたいと考えています。どうすればこれを達成できますか?

ありがとう

4

3 に答える 3

2

このコードを試すことができます: 開始セル no $i=3 この値と $i<=250 ループ領域を変更できます。

for ($i = 3; $i <= 250; $i++)
{
    $objValidation2 = $objPHPExcel->getActiveSheet()->getCell('N' . $i)->getDataValidation();
    $objValidation2->setType(PHPExcel_Cell_DataValidation::TYPE_LIST);
    $objValidation2->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION);
    $objValidation2->setAllowBlank(false);
    $objValidation2->setShowInputMessage(true);
    $objValidation2->setShowDropDown(true);
    $objValidation2->setPromptTitle('Pick from list');
    $objValidation2->setPrompt('Please pick a value from the drop-down list.');
    $objValidation2->setErrorTitle('Input error');
    $objValidation2->setError('Value is not in list');
    $objValidation2->setFormula1('"male,female"');
}
于 2015-02-02T10:29:57.033 に答える
1

公式ドキュメントから:

複数のセルでデータ検証が必要な場合は、ルールセットを複製できます。

$objPHPExcel->getActiveSheet()->getCell('B8')->setDataValidation(clone
$objValidation);

しかし、2015 年末の時点でも、これを「エリアごと」に設定する方法はありません。

于 2015-12-14T13:44:00.210 に答える
1

私はこれが非常に遅い返事であることを知っています。しかし、念のため。

ループを使用する (foreach / for)

ループの内側

$i = 2;
foreach(...){
   $objValidation = $objPHPExcel->getActiveSheet()->getCell('B'.$i)->getDataValidation();
   $objValidation->setType( PHPExcel_Cell_DataValidation::TYPE_LIST );
   $objValidation->setErrorStyle( PHPExcel_Cell_DataValidation::STYLE_INFORMATION );
   $objValidation->setAllowBlank(false);
   $objValidation->setShowInputMessage(true);
   $objValidation->setShowErrorMessage(true);
   $objValidation->setShowDropDown(true);
   $objValidation->setErrorTitle('Input error');
   $objValidation->setError('Value is not in list.');
   $objValidation->setPromptTitle('Pick from list');
   $objValidation->setPrompt('Please pick a value from the drop-down list.');
   $objValidation->setFormula1('"Item A,Item B,Item C"');

   $i++;
}

これはあなたが望むことをします。

于 2014-12-09T11:46:00.607 に答える