我正在尝试格式化我使用PHPExcel创建的文档的单元格宽度,但是当我使用getColumnDimension('A') - > setWidth(7)方法时,它在生成时没有准确生成xlsx文件。
我在Excel中格式化文档,以便找到我想要的单元格的值,我得到两个值,一个是Excel单位,另一个是英寸。
例如:
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth('7');
最终会给我一个6.17而不是7的列宽。我已经尝试过使用字符串和int值,没有任何变化。有什么想法吗?
答案 0 :(得分:16)
这是因为MS Excel将数字本身调整为自己的内部单位:开发人员文档中有一整节(第4.6.28节,标题为“设置列的宽度”),这解释了这一点。
从该部分的侧边栏引用:
PHPExcel中列宽的度量并不完全对应 您可能习惯在Microsoft Office Excel中使用的度量。柱 Excel中的宽度很难处理,有几种 列宽的度量。
- 以字符为单位的内部宽度(例如,8.43这可能是您在Excel中熟悉的内容)
- 像素的全宽(例如64像素)
- 字符单位的全宽(例如9.140625,值-1表示 未设置的宽度)
醇>PHPExcel始终以3)“字符单位的全宽”操作 实际上是存储在任何Excel文件中的唯一值,因此 最可靠的措施。 不幸的是,Microsoft Office Excel没有 告诉你这个措施。而是计算测量1)和2) 由文件打开时的应用程序和这些值 在各种对话和工具提示中提供。
字符宽度单位是“0”(零)字形的宽度 工作簿默认字体。因此,字符宽度以字符形式测量 两个不同工作簿中的单位只有具有的才能进行比较 相同的默认工作簿字体。
如果你有一些Excel文件,需要知道列宽 测量3),你可以用PHPExcel读取Excel文件并回显 检索到的值。
(我的重点是粗体)
答案 1 :(得分:0)
将0.71添加到excel单元格宽度值并将该值提供给
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(10);
例如:列宽= 3.71(excel值)
给列宽= 4.42
将为输出文件提供相同的单元格宽度。
$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth(4.42);
答案 2 :(得分: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并在代码中进行设置。
设置宽度后,您可以再次启用自动调整大小。
答案 3 :(得分:-2)
试试这个: - 在设置宽度之前添加以下行: -
$objPHPExcel->setActiveSheetIndex(0);