如何将PHP数组写入xls文件?

时间:2011-12-21 19:09:20

标签: php

我的数据如下所示(点击查看页面来源后),

date \t new_users \t cpm \t earnings \t total_pushes \t avail_users \t application \t 
 2011-03-31  \t  336933  \t  $5.27  \t  $10151.2  \t  1925244  \t  1905744  \t  Play Movies  \t 
 2011-03-31  \t  205070  \t  $5.12  \t  $5810.26  \t  1134946  \t  1118354  \t  Watch Movies or TV Shows  \t 

我使用'\ t'对给定数组进行内爆,然后动态写入xls文件.Problem使用这个,所有内容只出现在xls文件的第一列。

我在代码中缺少什么,xls文件是否需要数据格式?

3 个答案:

答案 0 :(得分:3)

您应该使用fputcsv来构建您的文件。您不必担心设置分隔符。然后你应该将文件重命名为something.xls。

如果您是通过网络请求处理此问题,请添加以下标头:application / vnd.ms-excel

<?php
// create header array here...$myHeaders
// create data array here... $myData

$csvName = 'temp.csv';

$fp = fopen($csvName, 'w');
fputcsv($fp, $myHeaders);
foreach ($myData as $line) {
    fputcsv($fp, $line);
}
fclose($fp);

// now send to browser if this is a web request
$csvData = file_get_contents($csvName);
header('Content-Type: application/vnd.ms-excel');
header('Content-Length: ' . strlen($csvData));
echo $csvData;
exit;

答案 1 :(得分:2)

为了生成有效的xml,你可以使用f.e. PHPExcel

如果您对简化格式感到满意,则可以生成csv文件格式。这对于开放式或MS办公室来说已经足够了。 对于csv,只需将构建的内容放入文件中,或使用fputcsv函数

答案 2 :(得分:1)

看起来您不是在尝试编写XLS而是使用CSV(逗号分隔值)格式。如果是这种情况,请将\t替换为,(或;),并用双引号(")包装所有值字段(不是列标题)。

Excel应该处理没有问题的格式化的CSV文件。

如果您确实要生成XLS文件,请尝试生成包含数据的HTML表格。将该表的HTML代码放入单个变量中,并使用以下代码将其自动下载为XLS文件:

// Just some example data in a HTML table
$htmlcontent = "<table><tr><th>col1</th><th>col2</th></tr><tr><td>val1-1</td><td>val1-2</td></tr></table>";

// Create as XLS file and send to browser for download
$filename ="data.xls";
header('Content-type: application/ms-excel');
header('Content-Disposition: attachment; filename='.$filename);
echo $htmlcontent;

这样,您的用户就可以将内容下载为Excel应该能够正常处理的XLS文件。

(PS;您可以尝试使用\t - 分隔数据作为文件内容而不是HTML表,这可能有用,但我不确定这样做。)