3

我正在尝试格式化我正在使用 PHPExcel 创建的文档的单元格宽度,但是当我使用 getColumnDimension('A')->setWidth(7) 方法时,它并没有在生成的 xlsx 文件中准确生成。

我在 Excel 中对文档进行了格式化,以便可以找到所需单元格的值,并得到两个值,一个以 Excel 单位表示,另一个以英寸为单位。

例如:

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth('7');

最终会给我一个 6.17 而不是 7 的列宽。我已经尝试过同时使用字符串和 int 值,没有任何变化。有任何想法吗?

4

4 回答 4

16

这是因为 MS Excel 将图形本身调整为自己的内部单位:开发人员文档中有一个完整的部分(第 4.6.28 节,标题为“设置列的宽度”)解释了这一点。

从该部分的侧边栏中引用:

PHPExcel 中的列宽度量与您在 Microsoft Office Excel 中可能习惯的度量不完全对应。列宽在 Excel 中很难处理,列宽有多种度量。

  1. 字符单位的内部宽度(例如 8.43,这可能是您在 Excel 中熟悉的)
  2. 以像素为单位的全宽(例如 64 像素)
  3. 字符单位的全宽(例如 9.140625,值 -1 表示未设置宽度)

PHPExcel 始终使用 3)“字符单位的全宽”,这实际上是存储在任何 Excel 文件中的唯一值,因此是最可靠的度量。不幸的是,Microsoft Office Excel 没有为您提供此度量。相反,测量 1) 和 2) 由应用程序在打开文件时计算,这些值显示在各种对话框和工具提示中。

字符宽度单位是工作簿默认字体中“0”(零)字形的宽度。因此,只有在两个不同的工作簿具有相同的默认工作簿字体时,才能比较以字符为单位测量的列宽。

如果您有一些 Excel 文件并且需要知道测量 3) 中的列宽,您可以使用 PHPExcel 读取 Excel 文件并回显检索到的值。

(我用粗体强调)

于 2013-01-04T17:51:00.590 回答
0

将 0.71 添加到 excel 单元格宽度值并将该值赋予

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);

例如:A Column width = 3.71(excel 值)

给列宽 = 4.42

将给出具有相同单元格宽度的输出文件。

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(4.42);
于 2015-02-08T21:10:38.203 回答
0

在设置任何列的宽度之前,首先您需要禁用自动大小

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setAutoSize(false);

之后,您需要设置一个宽度

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(40);

我在 MS Excel 中找到的宽度计算:MS Excel 从我们定义的大小减去 0.71。示例:当您在 MS Excel 设置宽度 39.29 的代码中定义宽度 40 时。放置任何列的确切所需大小的好方法,首先您在 MS Excel 中设置所需的宽度,然后在其中添加 0.71 并在您的代码中设置。

设置宽度后,您可以再次启用自动大小。

于 2018-06-29T09:07:20.323 回答
-4

试试这个:- 在设置宽度之前添加以下行:-

$objPHPExcel->setActiveSheetIndex(0);
于 2013-01-04T17:40:45.937 回答