PHP 到 Excel,粗体字体

发布于 2024-09-14 12:24:11 字数 347 浏览 10 评论 0原文

为了通过 php 将一些数据传输到 excel,我使用此函数来创建标签;

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

这会添加一个常规字体的标签。

现在我想知道我需要向这个函数添加什么才能使标签的字体变为粗体?


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

For transferring some data from to excel via php I am using this function for the creation of labels;

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

This adds a label in regular font.

Now I was wondering what do I need to add to this function to make the font of the label bold?


I do not want to use any library since I just need this one simple function.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

白首有我共你 2024-09-21 12:24:11

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

您甚至没有说出您需要什么 BIFF 版本,所以我假设 BIFF5,因为您使用的标签单元标记为 0x204

重要元素是 pack 语句中的 0x0 值:

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

You'您需要在“工作簿全局子流”中创建一个字体 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

正如您可能开始意识到的那样,这并不像您想象的那么简单和直接。这就是为什么我们大多数人在处理复杂的二进制格式时使用库而不是尝试自己编写它。

I'd say use a library, because (as Marc B has said) "If you're using formatting/fonts, then it's no longer a "very simple" Excel file."

You don't even say what BIFF version you need, so I'll assume BIFF5 because you're using a label cell marker of 0x204

The significant element is the 0x0 value in your pack statement:

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

You'll need to create a Font xf record in the "Workbook Global Substream", then set the 0x0 value to the xf identifier for that font record, +16.

You don't show enough of your code to identify where you'd need to add the new font record, but font records have a type of 0x0031. You should already be writing the default font record (xf = 0), so you'll need to modify this section of your code to create a second font record with an xf of 1, which would mean that your 0x0 would need to be 0x11.

For bold, this Font record needs a value of 0x02BC at offset 6. For future reference, in case you want to add further font styling subsequently, italic requires a bitmask of 0x0002 at offset 2, while strikethrough requires a bitmask of 0x0008 at offset 2. Offset 4 points to the colour index, if you want to change font colour, while offset 8 identifies superscript/subscript, and offset 10 identifies underline type. Offsets 11, 12 and 14 identify the font family, character set and size of the font name, followed by the font name itself.

You can find full details of all the options at http://msdn.microsoft.com/en-us/library/cc313154(v=office.12).aspx

As you can perhaps begin to appreciate, this is not as simple and straightforward as you might like to believe. That's why most of us use libraries when working with complex binary format rather than trying to write it all ourselves.

流殇 2024-09-21 12:24:11

告诉你一个秘密:制作一个 HTML 表格并将其写入扩展名为 .XLS 的文件中。当 Excel 打开它时,它会像 IE 一样读取格式,但现在您有了一个电子表格。这意味着您可以应用任何您喜欢的格式。将其与 PHP 连接起来,您将成为 Web 开发部门的金童一周。

Tell you a secret: Make an HTML table and write it into a file with a .XLS extension. When Excel opens it, it reads the formatting the way IE would, but now you have a spreadsheet. That means you can apply whatever formatting you please. Connect this with PHP, and you're the golden boy in the web dev department for a week.

装纯掩盖桑 2024-09-21 12:24:11

我使用以下格式,我使用所有html标签,如bold、font等。post

<?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";
?>

变量在其他一些文件中生成并提交到此文件。

I use the following format, i use all the html tags like bold , font etc..

<?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";
?>

the post variable is generated in some other files and submitted to this file..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文