从视图中使用Codeigniter中的PhpSpreadsheet生成Excel文件

时间:2018-07-26 22:24:43

标签: codeigniter phpspreadsheet

我正在尝试从视图中使用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”);

有什么办法可以做我需要的吗?

感谢您的帮助

1 个答案:

答案 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可能是困难的方法。