在PHP中创建XLS文件的最佳方法是什么

时间:2010-06-28 14:44:54

标签: php csv xls

我目前正在尝试找出从PHP创建.xls文件的最佳方法。在我看来,我需要做的就是将标题内容类型更改为“application / vnd.ms-excel”,然后以逗号分隔格式输出数据。这是最好的方法吗?

感谢您的帮助!
大都会

修改

将数据输出为HTML会不会很糟糕?我已经有一个课程,我想扩展这个问题,所以我宁愿远离第三方解决方案。我只需要知道输出数据的最佳方法是什么,以便充分利用该文件格式。

在查看PHPExcel之后,它似乎是解决此问题的最佳解决方案。我很感谢你的所有答案,如果我能解决的话,我会给出三个正确的答案。但是投票必须要做:)

9 个答案:

答案 0 :(得分:15)

取决于您是否需要CSV文件或XLS文件。 XLS文件可以包括单元格的格式信息,以及行/列锁定,保护和CSV文件中不可能的其他功能。另外,请记住,在打开CSV文件时,Excel不能正确支持UTF-8编码的内容。

如果你想要一个格式化的XLS文件,那么你需要一个可以用这种格式编写文件的PhpSpreadsheet库,或者如果服务器在安装了Excel的Windows上运行则需要COM

答案 1 :(得分:13)

非常简单,因为excel支持html代码。所以你只需要在文件顶部添加一个标题..然后回显你的html代码!

header ( "Content-type: application/vnd.ms-excel" );
header ( "Content-Disposition: attachment; filename=foo_bar.xls" );
echo "<table><tr><th>Header1</th></tr><tr><td>value1</td></tr></table>";

这将生成一个excel文件!

答案 2 :(得分:3)

您可以使用Microsoft Office理解的XML formats之一。

有关详情/规格,请参阅Microsoft的OpenXML Developer网站。

有一个名为PHPExcel的图书馆可供您查看以帮助您解决此问题。

当然,这完全取决于你的意思:

  

“充分利用该文件格式”

如果您只有简单的表格而没有格式化,那么您可能只需要CSV文件;但是,如果您想使用电子表格的更多功能,我建议您查看OpenXML。

答案 3 :(得分:2)

您可以输出HTML,更新版本的Excel会读取它。我不知道你可以用它做多少格式化。

如果您需要数据输入,丰富的格式或公式,我已成功使用PHPExcel

我的偏好是写出CSV文件。 CSV是一种非常简单的格式,可以从现有的html表脚本轻松转换。它还具有可被各种非微软电子表格程序读取的优点。如果您可以将CSV作为Web应用程序的首选文件格式,那么当您必须接受电子表格作为输入时,您将获得奖励。读取和解析CSV文件要比Excel文件容易得多。

答案 4 :(得分:1)

在SO上尝试XLS file wrapper,ala this post

答案 5 :(得分:1)

看看这个PEAR包:Spreadsheet Excel Writer

答案 6 :(得分:1)

免责声明:我在开发DocRaptor的公司Expected Behavior工作。

也就是说,您可以使用DocRaptor从HTML生成XLS文件。 DocRaptor是一个Ruby on Rails项目,但您可以将它与PHP一起使用。这是我们的PHP示例:

DocRaptor PHP example

这是DocRaptor主页的另一个链接:

HTML to Excel with DocRaptor

答案 7 :(得分:0)

是的,这是一种可能的方式 - 如果您需要一个将在Excel中打开的普通CSV文件。

如果您需要丰富的XLS文件,可以使用许多选项,包括使用第三方DLL(如“CarlosAg.ExcelXmlWriter.dll”)来创建XLS文件。您可以在网上搜索使用此dll的示例或Look here

答案 8 :(得分:0)

您可以开始使用此文件。它将创建一个excel文件并帮助您下载它。 在此处下载Souce代码或现场演示:http://purpledesign.in/blog/to-generate-excel-using-php/

您可以在

中添加这样的行
  

01-简单下载-xlsx.php

$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A1', 'Roll')
            ->setCellValue('B1', 'Name')
            ->setCellValue('C1', 'Total Classes')
            ->setCellValue('D1', 'Class Attended')
        ->setCellValue('E1', 'Percentage');

您可以使用while循环从这样的数据库打印数据。

$i=2;   
while ($row = $database->fetch_array($result)) 
 { 

       $objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue('A'.$i, $row[0])
            ->setCellValue('B'.$i, $row[1])
            ->setCellValue('C'.$i, $row[2])
            ->setCellValue('D'.$i, $total)
        ->setCellValue('E'.$i, round(($row[2]/$total)*100));
          $i++;
 }