2014-09-19 184 views
1

我正在使用PHPExcel库来读取Microsoft Office Excel xlsx文件。我XLSX仅有一行:使用PHPExcel读取Excel的内部计算值

enter image description here

当我试图XLSX仅仅是一个zip文件,其中包含XML文件。我拉开我的XLSX文件

:~> unzip w2.xlsx -d w2 
Archive: w2.xlsx 
    inflating: w2/_rels/.rels 
    inflating: w2/docProps/app.xml 
    inflating: w2/docProps/core.xml 
    inflating: w2/xl/_rels/workbook.xml.rels 
    inflating: w2/xl/worksheets/sheet1.xml 
    inflating: w2/xl/styles.xml 
    inflating: w2/xl/workbook.xml 
    inflating: w2/[Content_Types].xml 

,打开W2/XL /工作表/ sheet1.xml包含下一XML(重要组成部分,显示如下):

<sheetData> 
    <row collapsed="false" customFormat="false" customHeight="false" hidden="false" ht="12.1" outlineLevel="0" r="1"> 
    <c r="A1" s="1" t="n"> 
     <f aca="true">RAND()*10000/100</f> 
     <v>94.5569227915257</v> 
    </c> 
    <c r="C1" s="1"/> 
    </row> 
</sheetData> 

看来,Excel的内部存储已经计算出的值。 PHPExcel库是否有一些方法来读取这个内部计算的值。我知道有像的getValue方法(返回式= RAND * 10000/1000),getCalculatedValue(计算值),getFormattedValue(还计算值)

+0

我在文件Cell.php中找到方法getOldCalculatedValue()。 – broadband 2014-09-19 08:16:47

回答

2

PHPExcel确实有一个方法,以检索对于任何细胞,其值:

$objPHPExcel->getActiveSheet()->getCell('A1')->getOldCalculatedValue(); 

请注意,这不能保证....如果自动计算已在MS Excel中被禁用,那么它只能作为该MS Excel的实际执行的计算

1

其对上一次为有效单元格式。如果是一般的“数字”,excel会显示8位小数。您可以像这样为phpexcel中的每个单元格设置自定义格式。

$sheet->getStyle('A1') 
    ->getNumberFormat() 
    ->setFormatCode('0.0000000000'); 

我不完全确定格式(写下O's)是否正确,暂时不能尝试。 尝试在设置自定义格式后获取值getCalculatedValue

学分:user2131419/so

编辑: 哈*。只要贝克先生变成这个,你可以忽略我的帖子。与往常一样,他的回答显然是最正确的。 :)

+0

这里的主题是单元格的计算值,我的意思是Excel已经计算出的值。虽然感谢指定setFormatCode,但也许它有一天会派上用场。 – broadband 2014-09-19 08:34:02

+0

我知道!问题在哪里?我猜phpexcel会根据它的公式和格式获得计算值。如果你先改变格式,然后得到计算值,它应该工作。这是我试图指出的一切。 :) – C4u 2014-09-19 08:36:28

+0

这里的问题是我想读取值而不是公式来提供PHP和Excel之间的一致性。例如,PHP可以通过不同的原因计算出与Excel不同的值(舍入可能不同,内部表示...,PHP 5.6的功能与PHP 5.2不同)。如果有一种方法可以读取已经计算好的Excel值,这样我们就可以得到Excel的计算值,而不是PHP。 – broadband 2014-09-19 08:55:27