每次循环刷新变量值

时间:2018-09-05 01:45:39

标签: php excel loops object phpexcel

当我在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**

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

2 个答案:

答案 0 :(得分:0)

一种更简单的方法是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行效率非常低。

答案 1 :(得分:0)

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

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

这可能会使起点更简单。