使用PHPSpreadsheet为VLOOKUP创建数据集/数组

时间:2019-03-13 13:43:21

标签: php phpspreadsheet phpoffice

我有一个export.php文件,目的是通过VLOOKUP函数设置数据验证。但是,似乎我在食谱中找不到任何实际上可以支持此功能的东西。我以为我找到了一些东西,但是它似乎不起作用,或者至少它不符合我的意愿。

这是我的简化代码:

require_once 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;

$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();

$i = 3;

foreach ($_POST['foo'] as $key => $el)
{
    $sheet->setCellValue('D'. $i, '=VLOOKUP(C'. $i .',array,2,0)');
    $i++;
}

# Column A = labels
# Column B = value

# create range
$spreadsheet->addNamedRange(new \PhpOffice\PhpSpreadsheet\NamedRange('array', $spreadsheet->getActiveSheet(), 'A'));
$spreadsheet->addNamedRange(new \PhpOffice\PhpSpreadsheet\NamedRange('array', $spreadsheet->getActiveSheet(), 'B'));

# redirect browser output -> php://output (download)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="hello.xlsx"');
header('Cache-Control: max-age=0');

$writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('php://output');

但是,这不起作用-单元格范围出现致命错误,因为您无法选择要添加到范围中的列。

如何使用PHPSpreadsheet为VLOOKUP创建数据集?

谢谢

1 个答案:

答案 0 :(得分:0)

答案是不使用数据集本身,而是使用单元格范围:

$lastValueCell = 84; # this is dynamically got, but no value in showing how
$output[$partNum][3] = '=VLOOKUP(C'. $x .',Formulas!A$1:B$'. $lastValueCell .',2,0)';

# then append to spreadsheet using ->setCellValue()

VLOOKUP现在可用于导出