Обновить значение переменной каждый цикл - PullRequest
0 голосов
/ 05 сентября 2018

У меня проблема, когда я загружаю несколько файлов Excel в PHP. Я использую цикл 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 голосов
/ 05 сентября 2018

Если у ваших листов есть имя (скажем, «имя листа»), вы можете попробовать:

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

Это может сделать более простую отправную точку.

0 голосов
/ 05 сентября 2018

Более простым способом было бы получить значение ячейки напрямую :

<?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 строк.

...