我正在创建一个应包含下拉列表的 excel 模板。我看到它可能与 phpexcel 库(PHPExcel Multiple Dropdown list thatdependent)。我想知道是否可以使用 maatwebsite 提供的 laravel-excel 库来完成。我需要下拉、NamedRange、datavalidation、setFormula 等函数的语法。
问问题
6484 次
3 回答
4
对于 maatwebite 版本 V.3.1,使用以下代码
<?php
namespace App\Exports;
use App\Models\Category;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\WithEvents;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Events\AfterSheet;
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
class BulkUploadProductExport implements FromView, WithEvents , WithTitle
{
public function view(): View
{
return view('exports', [
'categories' => Category::all()
]);
}
public function title(): string
{
return 'bulkupload';
}
public function registerEvents(): array
{
//$event = $this->getEvent();
return [
AfterSheet::class => function (AfterSheet $event) {
/** @var Sheet $sheet */
$sheet = $event->sheet;
/**
* validation for bulkuploadsheet
*/
$sheet->setCellValue('B5', "SELECT ITEM");
$configs = "DUS800, DUG900+3xRRUS, DUW2100, 2xMU, SIU, DUS800+3xRRUS, DUG900+3xRRUS, DUW2100";
$objValidation = $sheet->getCell('B5')->getDataValidation();
$objValidation->setType(DataValidation::TYPE_LIST);
$objValidation->setErrorStyle(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('"' . $configs . '"');
}
];
}
}
于 2020-12-22T13:28:30.537 回答
2
public function index() {
\Excel::create('file', function($excel) {
require_once("/apppath//vendor/phpoffice/phpexcel/Classes/PHPExcel/NamedRange.php");
require_once("/apppath/vendor/phpoffice/phpexcel/Classes/PHPExcel/Cell/DataValidation.php");
$excel->sheet('New sheet', function($sheet) {
$sheet->SetCellValue("A1", "UK");
$sheet->SetCellValue("A2", "USA");
$sheet->_parent->addNamedRange(
new \PHPExcel_NamedRange(
'countries', $sheet, 'A1:A2'
)
);
$sheet->SetCellValue("B1", "London");
$sheet->SetCellValue("B2", "Birmingham");
$sheet->SetCellValue("B3", "Leeds");
$sheet->_parent->addNamedRange(
new \PHPExcel_NamedRange(
'UK', $sheet, 'B1:B3'
)
);
$sheet->SetCellValue("C1", "Atlanta");
$sheet->SetCellValue("C2", "New York");
$sheet->SetCellValue("C3", "Los Angeles");
$sheet->_parent->addNamedRange(
new \PHPExcel_NamedRange(
'USA', $sheet, 'C1:C3'
)
);
$objValidation = $sheet->getCell('D1')->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('countries'); //note this!
});
})->download("xlsx");
return view('home');
}
于 2015-05-27T01:43:02.420 回答
1
只想分享有关=INDIRECT 函数下拉列表的namedRange,当您尝试将它与registerEvents 一起使用时,这是我的示例代码
AfterSheet::class => function(AfterSheet $event) {
$event->sheet->getDelegate()->getParent()->addNamedRange(
new PhpOffice\PhpSpreadsheet\NamedRange(
'mynamerange',
$event->sheet->getDelegate(),
'=$A$1:$A$10')
);
},
在 namedRange 中调用单元格时使用 $ 以准确影响您的单元格。我希望它会帮助你们中的一些人。参考:https ://phpspreadsheet.readthedocs.io/en/latest/topics/defined-names/#named-ranges
这里是 INDIRECT excel 函数参考: https ://www.exceldemy.com/excel-data-validation-based-on-another-cell/
于 2022-02-16T16:55:28.593 回答