【问题标题】:Refresh variable value each loop每次循环刷新变量值
【发布时间】:2018-09-05 01:45:39
【问题描述】:

当我在 PHP 中上传多个 Excel 文件时,我遇到了麻烦。我正在使用for 循环来获取每个文件中特定单元格中的数据,但我得到的值与第一个文件的值相同。它不会为每个文件获得价值,而是停留在第一个值上。

我试图在每个文件中获取值表单单元格“N14”。

<?php
include 'Classes/PHPExcel.php';
include 'Classes/PHPExcel/IOFactory.php';


$total=count($_FILES['files']['name']);
for($x=0;$x<$total;$x++){
    $file = $_FILES['files']['tmp_name'][$x];
    $fileName = $_FILES['files']['name'][$x];
    $load = PHPExcel_IOFactory::load($file);
    $num=$load->getSheetCount() ;

    echo $fileName."    ";

    $sheets =$load->setActiveSheetIndex(0);
    $sheets = $load->getActiveSheet()->toArray(null,true,true,true);

    $i = 1;
    foreach ($sheets as $sheet) {
        $c=$sheet['N'];
        if($i==14){echo $c."</br>";break;}

        $i++;
    }   
}

输出:

proses 15 Januari 2017.xlsx **308060**

proses 16 Januari 2017.xlsx **308060**

proses 17 Januari 2017.xlsx **308060**

有人可以向我解释为什么它会重复第一个值吗?

【问题讨论】:

  • 感谢大家的回答,这真的很有帮助。但这并不能解决我的问题,因此请使用困难的方法。并不是您的回答是错误的,但它对我不起作用..无论如何,我真的很高兴有人回答我的问题。谢谢

标签: php excel loops object phpexcel


【解决方案1】:

如果您的工作表有名称(例如“sheetName”),您可以尝试:

$reader = PHPExcel_IOFactory::createReader("Excel2007");
$excelWorkbook = $reader->load($file);
$sheet = $excelWorkbook->getSheetByName("sheetName");
$c= $sheet->getCell("N14")->getValue();

这可能是一个更简单的起点。

【讨论】:

  • 我使用过该方法,但它返回的是公式,而不是值 \n proses1.xlsx : =SUM(N9:N12)\n proses1.xlsx : =SUM(N9:N12)\ n 散文1.xlsx : =SUM(N9:N13)
【解决方案2】:

更简单的方法是get the cell value directly:

<?php
include 'Classes/PHPExcel.php';
include 'Classes/PHPExcel/IOFactory.php';


$total = count($_FILES['files']['name']);

for($x = 0; $x < $total; $x++) {
    $file     = $_FILES['files']['tmp_name'][$x];
    $fileName = $_FILES['files']['name'][$x];
    $load     = PHPExcel_IOFactory::load($file);

    $sheet = $load->getSheet(0);
    $i = $sheet->getCell("N14")->getCalculatedValue();

    echo "$fileName : $i<br/>";
}

至于为什么您的原始代码不起作用,如果不知道所涉及的文件,就很难说。看起来它应该可以工作,只要文件都有不同的值。但是将Excel文件加载到数组中(库已经在内存中有一个副本,然后你再做一个)然后无缘无故地循环前14行是非常低效的。

【讨论】:

  • 我用过那个方法,但它返回的是公式,而不是值...... proses1.xlsx : =SUM(N9:N12)散文1.xlsx : =SUM(N9:N12) 散文1.xlsx : =SUM(N9:N13)
  • 我已经尝试过了,但它们都不起作用,然后我找到了另一种方法来解决我的 excel 和 cmd 问题。无论如何,谢谢你回答我的问题,这真的救了我。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-10-17
  • 2012-09-02
  • 2012-11-30
  • 2016-11-08
相关资源
最近更新 更多