【发布时间】:2018-12-07 16:25:17
【问题描述】:
我正在通过以下方式将 HTML 提供给 Excel 文件:
header('Content-type: application/excel');
header('Content-Disposition: attachment; filename=testfile.xls');
$html = "<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">
<head>
<!--[if gte mso 9]>
<xml>
<x:ExcelWorkbook>
<x:ExcelWorksheets>
<x:ExcelWorksheet>
<x:Name>Sheet1</x:Name>
<x:WorksheetOptions>
<x:Print>
<x:ValidPrinterInfo/>
</x:Print>
</x:WorksheetOptions>
</x:ExcelWorksheet>
</x:ExcelWorksheets>
</x:ExcelWorkbook>
</xml>
<![endif]-->
</head>
<body>
<table>
<thead><tr><th>Header</th></tr></thead>
<tbody><tr><td>Values</td></tr></tbody>
</table>
</body>
</html>";
echo $html;
这会创建一个带有 1 个工作表的 Excel 文件,但我需要第二个工作表。所以我所做的就是复制
<x:ExcelWorksheet>
<x:Name>Sheet2</x:Name>
<x:WorksheetOptions>
<x:Print>
<x:ValidPrinterInfo/>
</x:Print>
</x:WorksheetOptions>
</x:ExcelWorksheet>
只是使用了不同的名称。这按预期工作,但现在我不知道如何将数据放入第二个工作表。有没有办法让我指定<table> 应该进入哪个工作表?
注意事项
第一个链接上的解决方案使用 XML 而不是 HTML,我本来可以接受它,但我无法正确显示多行,因为我无法根据内容。它只显示第一行。
第二个链接讲的是 MHTML(Multipart HTML),但我看不懂。
【问题讨论】:
-
就是把name属性从
<x:Name>Sheet1</x:Name>改成<x:Name>Sheet2</x:Name>这么简单 -
@RiggsFolly 是的,我已经能够做到这一点,但每当我创建
<table>时,它只会进入第一个工作表。第二个工作表始终为空白。 -
@PatrickGregorio 我遇到了同样的问题。您找到解决方案了吗?
-
@AjayLingayat 不幸的是没有 - 我们已经迁移到使用 PhpSpreadsheet 代替。看看那个 - 它好多了。
标签: php html xml excel worksheet