将PHP导出到Excel,加粗字体

3

为了通过php将一些数据从Excel传输,我正在使用以下函数创建标签:

function xls_label($row, $col, $value, $bold )  
{       
     echo pack("ssssss", 0x204, 8 + strlen($value), $row, $col, 0x0, strlen($value)); 
     echo $value;  
}

这将在常规字体中添加一个标签。

现在我想知道我需要添加什么内容到此函数以使标签的字体加粗?


我不想使用任何库,因为我只需要这个简单的函数。


4
我使用梨子Excel写入器,您有很多选项可以使用样式..http://pear.php.net/package/Spreadsheet_Excel_Writer - Haim Evgi
由于我只需要创建一个非常简单的Excel文件,因此我不想使用任何库。 - Thizzer
10
如果您使用格式/字体,那么这就不再是一个“非常简单”的Excel文件。一旦涉及到格式,你就会深入到BIFF文件格式的内核中,情况会很快变得非常复杂。Haim提到的软件包非常轻巧且运行良好,但在支持超过Excel 5.0方面已经几乎无法更新。请尝试http://phpexcel.codeplex.com获取一个更新/最新的库,该库处理直到Excel '07。 - Marc B
3
这里有一个关于如何在PHPExcel中加粗单元格值的链接 - Lance Roberts
3个回答

7

我建议使用一个库,因为(正如Marc B所说),“如果你使用格式/字体,那么它就不再是一个“非常简单”的Excel文件了。”

你甚至没有说明需要哪个BIFF版本,所以我假设你需要BIFF5,因为你使用了标签单元格标记0x204。

重要的元素是您打包语句中的0x0值:

echo pack("ssssss", 0x204, 8 + strlen($value), $row, $col, 0x0, strlen($value));

您需要在“工作簿全局子流”中创建一个字体xf记录,然后将0x0值设置为该字体记录的xf标识符+16。
您没有展示足够的代码以确定需要添加新字体记录的位置,但是字体记录的类型为0x0031。您应该已经编写了默认字体记录(xf = 0),因此您需要修改代码的这个部分,以创建具有xf为1的第二个字体记录,这意味着您的0x0需要是0x11。
对于粗体,此字体记录在偏移量6处需要一个值为0x02BC。供以后参考,如果您想随后添加其他字体样式,则斜体要求偏移量2处的位掩码为0x0002,而删除线要求偏移量2处的位掩码为0x0008。偏移量4指向颜色索引,如果您想更改字体颜色,而偏移量8标识上标/下标,偏移量10标识下划线类型。偏移量11、12和14标识字体系列、字符集和字体名称的大小,然后是字体名称本身。
您可以在http://msdn.microsoft.com/en-us/library/cc313154(v=office.12).aspx找到所有选项的完整详细信息。
正如您可能已经开始意识到的那样,这并不像您想象的那么简单和直接。这就是为什么大多数人在处理复杂的二进制格式时使用库,而不是尝试自己编写它们的原因。

偏移量是什么意思? - Bongsky
偏移量 == 偏移量:它是从块的开头开始的位置。 - Mark Baker
可以请问一个在echo包函数中实现加粗的例子吗? - Bongsky
@Bongsky - 我已经在我的PHPExcel库中提供了一个完整的工作示例,用于处理电子表格文件。 - Mark Baker

6
告诉你一个秘密:制作一个HTML表格并将其写入一个扩展名为.XLS的文件中。当Excel打开它时,它会像IE一样读取格式,但现在你有了一个电子表格。这意味着你可以应用任何你想要的格式。将此与PHP连接起来,你就是网页开发部门的黄金男孩一个星期。


首先,我知道保存HTML为.XLS的技巧,但Excel是将HTML转换为电子表格的少数应用程序之一,而且仍然会出现警告,说明它不是正确的标记。其次,这不是对我的问题的答案。 - Thizzer
2
我不知道“但Excel是少数几个将HTML转换为电子表格的应用程序之一”是什么意思,但也许你应该更好地表达你的问题。这个解决方案确实可以让你从PHP传输数据到Excel(或Calc)并加粗字体。这是最直接的方法,而不需要使用任何库。 - Lèse majesté
“但是Excel是少数几个可以将HTML转换为电子表格的应用程序之一”,我的意思是例如Google文档或OpenOffice不会打开以.xls扩展名保存的文档中给定的HTML表格。 - Thizzer
2
实际上,它可以在OpenOffice中使用(这就是我提到“Calc”的原因——OO.o的电子表格程序)。也许您没有使用有效的HTML。如果您需要在其他程序中使用它,则应在问题中指定。 - Lèse majesté

1

我使用以下格式,使用所有的HTML标签,如粗体、字体等。

<?php
$fn=$_POST[fname];
header("Content-type: application/csv");
header("Content-Disposition: attachment; filename=$fn.xls");
header("Pragma: no-cache");
header("Expires: 0");

$c=$_POST[con];
print "$c";
?>

post变量是在其他文件中生成并提交到此文件中的。


1
这与问题有什么关系? - BoltClock
@Boltclock他问道:“现在我想知道我需要添加什么功能才能使标签的字体加粗?”所以我告诉他使用php字符串中的所有html内容,并将其发布到上面的代码中以下载.xls文件。我认为它总是会回答问题的答案。如果您没有清楚地阅读它,那么它看起来就像那样。 - Vijay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接