2013-01-04 36 views
3

我想格式化我用PHPExcel创建的文档的单元格宽度,但是当我使用getColumnDimension('A') - > setWidth(7)方法时,它不是在生成的xlsx文件中准确生成。设置列宽与PHPExcel不工作

我在Excel中格式化文档,以便我可以找到我想要的单元格的值,然后得到两个值,一个用Excel单位,另一个用英寸表示。

例如:

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

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

回答

13

这是因为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文件并回显 检索的值。

(我用粗体强调)

-2

试试这个: - 设置宽度前添加下面一行: -

$objPHPExcel->setActiveSheetIndex(0); 
+4

你是认真的吗? –

-1

添加0。71到Excel单元格的宽度值,并给该值到

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

例如为:A列宽= 3.71(练成值)

给列的宽度= 4.42

将给与输出文件相同的单元宽度。

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