使用PHPExcel设置列宽度不起作用

Eth*_*han 3 php xlsx phpexcel

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

我在Excel中格式化文档,以便找到我想要的单元格的值,我得到两个值,一个在Excel单位,另一个在英寸.

例如:

$objPHPExcel->getActiveSheet()->getColumnDimension('A')->setWidth('7');
Run Code Online (Sandbox Code Playgroud)

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

Mar*_*ker 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文件并回显检索到的值.

(我的重点是粗体)