首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel中的PHPexcel头

Laravel中的PHPexcel头
EN

Stack Overflow用户
提问于 2013-12-20 21:02:26
回答 1查看 4.3K关注 0票数 3

我正在Laravel 4中练习phpExcel,下面的代码是基于这个phpExcel练习的。它在Laravel外面很好用。由于我只修改了一些与安装路径相匹配的必要代码,所以我相信如果使用phpExcel,很多Laravel用户将面临同样的问题。我相信有些专家已经解决了这个问题,希望他们能帮我个忙。

代码语言:javascript
运行
复制
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');
ob_clean();
flush();
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('d:/l4/test/01simple.xlsx');
ob_end();
exit;

但是,当我将代码放在视图中时,我会得到以下错误消息:

Excel无法打开文件01simple.xlsx,因为文件格式或文件扩展名无效。

我在谷歌上搜索了很多,尝试了几种选择,但到目前为止还没有什么好运气。我也看到过一个类似的问题,有人通过在头下添加ob_clean()flush()来解决这个问题,但这在Laravel中是行不通的。

我有MS excel 2010和下载的文件可以手动打开。我正在使用WAMP (php5.4),并在Firefox和IE上进行了测试。以下是视图中的完整代码:

代码语言:javascript
运行
复制
<?php
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
date_default_timezone_set('Asia/Taipei');

if (PHP_SAPI == 'cli')
die('This example should only be run from a Web Browser');

/** Include PHPExcel */
$pRoot=dirname(dirname(dirname(__FILE__))).'/vendor';
require_once $pRoot.'/phpoffice/phpexcel/Classes/PHPExcel.php';


// Create new PHPExcel object
$objPHPExcel = new PHPExcel();

// Set document properties
$objPHPExcel->getProperties()->setCreator("Maarten Balliauw")
                         ->setLastModifiedBy("Maarten Balliauw")
                         ->setTitle("Office 2007 XLSX Test  Document")
                         ->setSubject("Office 2007 XLSX Test Document")
                         ->setDescription("Test document for Office 2007 XLSX, generated using PHP classes.")
                         ->setKeywords("office 2007 openxml php")
                         ->setCategory("Test result file");


// Add some data
$objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('A1', 'Hello')
        ->setCellValue('B2', 'world!')
        ->setCellValue('C1', 'Hello')
        ->setCellValue('D2', 'world!');

// Miscellaneous glyphs, UTF-8
$objPHPExcel->setActiveSheetIndex(0)
        ->setCellValue('A4', 'Miscellaneous glyphs')
        ->setCellValue('A5', 'TW');

// Rename worksheet
$objPHPExcel->getActiveSheet()->setTitle('Simple');


// Set active sheet index to the first sheet, so Excel opens this as the first sheet
$objPHPExcel->setActiveSheetIndex(0);


// Redirect output to a client’s web browser (Excel2007)

//$file = "myfile.xlsx";
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename="01simple.xlsx"');
header('Cache-Control: max-age=0');
ob_clean();
flush();
//readfile($file);
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('d:/l4/test/01simple.xlsx');
ob_end();
exit;
EN

回答 1

Stack Overflow用户

发布于 2013-12-22 14:08:50

第一:

代码语言:javascript
运行
复制
"phpexcel/phpexcel": "dev-master"

将上面的行放在URComposer.json的Laravel的require选项中。然后做composer update,在那之后,你不需要做require_once的工作,Laravel是为你做的。

第二:您是否请求此excel使用Ajax生成操作?如果你这样做了,我建议你用通常的方式。因为Ajax请求方法会影响数据格式。

第三:不要这样做:

要创建“$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');”写入器对象,您只能使用它来创建“Excel2005”写入器对象。使用以下方法:

代码语言:javascript
运行
复制
   $objWriter = new PHPExcel_Writer_Excel2007($objPHPExcel);
   $objWriter->setOffice2003Compatibility(true);
   $objWriter->save($path);

祝你好运!

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20711890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档