使用phpspreadsheet给单元格设置下拉选项的时候,如果文件类型是xlsx,那么下拉项里面可以有中文。
use app\BaseController;
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use think\response\Json;
use utils\CacheUtils;
class Test extends BaseController
{
public function test()
{
// 创建Spreadsheet对象
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 为A1单元格添加下拉选项
$validation = $sheet->getCell('A1')->getDataValidation();
$validation->setType(DataValidation::TYPE_LIST);
$validation->setErrorStyle(DataValidation::STYLE_INFORMATION);
$validation->setAllowBlank(false);
$validation->setShowDropDown(true);
$validation->setFormula1('"开启,关闭"'); // 下拉选项值
// 直接输出Excel文件到浏览器
$writer = new Xlsx($spreadsheet);
// 设置响应头,xlsx文件类型
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="1111.xlsx"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
exit;
}
}
如果文件类型是xls,那么下拉项里面不可以有中文。下面代码将会报错。
use app\BaseController;
use PhpOffice\PhpSpreadsheet\Cell\DataValidation;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xls;//!!!引入
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
use think\response\Json;
use utils\CacheUtils;
class Test extends BaseController
{
public function test()
{
// 创建Spreadsheet对象
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// 为A1单元格添加下拉选项
$validation = $sheet->getCell('A1')->getDataValidation();
$validation->setType(DataValidation::TYPE_LIST);
$validation->setErrorStyle(DataValidation::STYLE_INFORMATION);
$validation->setAllowBlank(false);
$validation->setShowDropDown(true);
$validation->setFormula1('"开启,关闭"'); // 下拉选项值
// 直接输出Excel文件到浏览器!!!此处更改
$writer = new Xls($spreadsheet);
// 设置响应头!!!此处更改为xls文件类型
header('Content-Type: application/vnd.ms-excel');
header('Content-Disposition: attachment;filename="2222.xls"');
header('Cache-Control: max-age=0');
$writer->save('php://output');
exit;
}
}