我正在尝试从视图中使用CodeIgniter和PhpSpreadsheet库生成Excel文件。我需要制作的报告不是列表,而是要复杂得多,并且可以通过视图和发送参数更快地生成报告。这是我的代码:
$data = $this->model->bringdata();
$view = $this->load->view("data_view", $ data);
$spreadsheet = new Spreadsheet();
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
$writer-> save($view);
并显示以下错误
严重性:警告
消息:fopen():文件名不能为空
文件名:Writer / Html.php
行号:160
在PhpSpreadsheet文档中,它表明必须显式发送html页面:
$ writer-> save(“ 05featuredemo.htm”);
有什么办法可以做我需要的吗?
感谢您的帮助
答案 0 :(得分:0)
这是一个简单的解决方案,您需要将true传递给load-> view的第三个参数,以便它返回字符串,而不是将其发送到浏览器。
$view = $this->load->view("data_view", $ data, true);
在评论后添加
我犯了一个错误,就是没有研究HTML编写器的工作方式。
HTML编写器将电子表格编写为html文件。它不会创建电子表格。据我了解(我可能会误会),您可以使用\PhpOffice\PhpSpreadsheet\Reader\Html
将html文件读取到电子表格中。
就您而言,我认为您必须将$this->load->view()
返回的字符串保存到一个临时文件中。 CodeIgniter的file_helper在这里可能有用。
然后,您阅读临时文件以创建电子表格。之后,您可以使用$writer
将电子表格保存为PhpSpreadsheet支持的任何文件类型。
$view = $this->load->view("data_view", $data, true);
$this->load->helper("file");
$fileName = "temp_file_name.html";
$path = "full/path/to/some_writable_folder/";
$path_file = $path . $fileName;
if (write_file($path_file, $view))
{
//create spreadsheet the temp html
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Html();
$spreadsheet = $reader->load($path_file);
//write out to html file
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Html($spreadsheet);
$writer->save($path."05featuredemo.htm");
//delete the temporary file
unlink($path_file);
}
else
{
//handle the failure to write the temp file
}
我还没有测试过,并且我不确定您是否真的要保存到html文件中,但是我认为以上内容很接近答案。
第二次添加
如果要保存.xlsx文件,则需要一个Xlsx
编写器。使用以下内容代替上面显示的内容。
//write out to excel file
$writer = new \PhpOffice\PhpSpreadsheet\Writer\Xlsx($spreadsheet);
$writer->save($ path. "doc.xlsx");
我承认我从未使用过或考虑使用html
阅读器,因此不确定是否会得到想要的东西。老实说,我认为创建html表以便将其导入excel可能是困难的方法。