【问题标题】:How to format excel file with styles, fonts, colors, tables etc with pure PHP?如何使用纯 PHP 格式化带有样式、字体、颜色、表格等的 excel 文件?
【发布时间】:2011-10-01 00:20:38
【问题描述】:

我需要一种通过纯 PHP 编写具有格式的 excel 文件的方法。 警告:请,此 Q 不是关于库、插件等的 - 请勿打扰。 我用谷歌搜索了很多并没有找到答案,但是在 StackOverflow 上的一些文章中,有人提到了 HTML/CSS 格式方式 HTML format solutions that didn't work 我已经尝试过这样做,但是在保存的列中填充了标签并且没有任何反应的文件中。 可能有一些专业人士可以帮助我通过 PHP、HTML、CSS 之类的纯代码编写 Excel。

再举一个例子,我已经使用过这样的概念,但没有帮助:

    // headers for excel
$headers .= "<div style='font:bold 14px Times;'>Журнал остатков и инкассаций</div>\n";
$headers .= "Начало периода\t ".date('d.m.Y')."0:00 \n";
$headers .= "Начало периода\t ".date('d.m.Y')."23:59 \n\n";

$headers .= "Терминал\t";
$headers .= "Место расположения\t";
$headers .= "Дата\t";
$headers .= "Время\t";
$headers .= "Сумма инкассации\t";
$headers .= "Банкноты\t";

// excel content with overloaded terminals
if (mssql_num_rows($resCollection)>0) {
  while ($rowCollection = mssql_fetch_object($resCollection)) {

    $data .= $rowCollection->Name."\t".$rowCollection->Address."\t"
            .$rowCollection->TerminalNotes."\t".$rowCollection->TerminalAmount
            ."\t".$rowCollection->DayAmountAll."\t"
            .$rowCollection->LastPaymentTime."\n";

  }
}

$fileName = 'collection'.date('d_m_Y_H_i_s').'.xls';


header("Content-type: application/vnd.ms-excel");// application/excel had also been used
header("Content-Disposition: attachment; filename=$fileName");
echo iconv('utf-8', 'cp1251', "$headers\n$data"); 

我不仅使用了 div 和表格,但它没有用。

【问题讨论】:

    标签: php html css excel


    【解决方案1】:

    以下示例可能会对您有所帮助:

      1 <?php
      2 header('Content-type: application/excel');                                  
      3 header('Content-Disposition: attachment; filename="test.xls"');
      4 ?>
      5 
      6 <table>
      7 <tr><th>Column 1</th><th>Column 2</th></tr>
      8 <tr><td style="font-size:200%">Answer 1</td><td style="color:#f00">Answer 2<    /td></tr>
      9 <tr><td colspan="2" style="font-weight:bold">Answer 3 with 2 columns</td></t    r>
     10 </table>
    

    将此作为 .php 文件保存在您的服务器上。

    它的作用是:添加标题以强制浏览器提供 Excel 文件。然后在里面返回一张桌子。我的 Excel 完美地解决了这个问题。

    注意:示例 HTML 来自您已经找到的答案。我刚刚在开头添加了标题。

    注意:您刚刚更改了问题并添加了一个示例。您的示例不使用 html!您正在交付一个制表符分隔的文件,其中每一行都以换行符结尾。

    这样做的正确方法是真正生成HTML,即在开头使用&lt;table&gt;,每行使用&lt;tr&gt;&lt;/tr&gt;,并将字段放在&lt;td&gt;标签中,然后以结束 &lt;/table&gt; 结束,所以基本上:

    $data='<table>';
    // excel content with overloaded terminals
    if (mssql_num_rows($resCollection)>0) {
      while ($rowCollection = mssql_fetch_object($resCollection)) {
        $data.='<tr>';
        $data .= '<td>'.$rowCollection->Name."</td><td>".$rowCollection->Address."</td><td>"
                .$rowCollection->TerminalNotes."</td><td>".$rowCollection->TerminalAmount
                ."</td><td>".$rowCollection->DayAmountAll."</td><td>"
                .$rowCollection->LastPaymentTime."</td>";
        $data.='</tr>';
    
      }
    }
    $data.='</table>';
    

    然后将最后一行更改为:

    echo iconv('utf-8', 'cp1251', "$data"); 
    

    如果可行,我建议您将输出更改为在表头周围添加 &lt;th&gt; 标签,而不是示例中的 div。

    【讨论】:

    • 现在由您来查询数据库并动态生成表数据。
    • 这种类型的东西以前对我有用 - 它比尝试编写本机 XLS 文件要简单得多。唯一的问题是,非 Excel 电子表格应用程序(即 Numbers.app、OpenOffice 等)可能无法正确读取文件。
    • 所以,对我来说 - 问题是开放的,它不能正常工作。
    • @zeusakm:你用我的例子得到了什么结果?你试过了吗?
    • @zeusakm:根据您的扩​​展问题,我在回答中添加了另一个示例。
    猜你喜欢
    • 2022-12-03
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多