Anzeige

Excel mit PhpSpreadSheet einlesen und auf bestimmte Spalten begrenzen


EuroCent

KlappStuhl 2.0
#1
Hallo zusammen,

aktuell Arbeite ich mit dem FW PhpSpreadSheet.
Excel zu erstellen ist damit kein Problem.

Jetzt möchte Ich aber Excel Dateien einlesen, statt nur zu erstellen. :)
Ich lasse mittels Fileupload die Excel in einen definierten Ordner laden.
Das Funktioniert auch, auch hab Ich es geschafft die Excel zu lesen. :)

Mein Problem ist aber nun folgendes:
Ich möchte anhand der Daten in der Excel, die sich von Spalten her nicht ändert außer die Zeilen, nur bestimmte Spalten ausgeben.

Beispielsweise nur erste Spalte, Spalte B, H, M und die Letzte Spalte.
Allerdings komm Ich mit der Doku nicht ganz zurecht :(

Meine aktuelle Datei sieht wie folgt aus:
PHP:
<?php
$verzeichnis = "D:\\htdocs\\dokumente\\upload_module\\";
$inputFilename = basename($_FILES['files']['name'][0]);
$fullFilename = $verzeichnis.$inputFilename;
$exp = explode('.', $_FILES['files']['name'][0]);
$newFilename = $exp[0].'_'.date('Ymd-His', time(true)).'.'.$exp[1];

if (!is_dir($verzeichnis)) {
    mkdir($verzeichnis);
}

$move_uploaded_file = move_uploaded_file($_FILES['files']['tmp_name'][0], $verzeichnis.$newFilename);

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::load($verzeichnis.$newFilename);
$readerfile = $reader->setActiveSheetIndex(0);
$colsRows = $readerfile->getHighestRowAndColumn(); //Anzahl Zeilen
$test = $reader->getActiveSheet()->rangeToArray('A1:'.$colsRows['column'].$colsRows['row']); //Test um zu erfahren ob er alle Ausgibt
?>
Wie genau muss Ich nun verfahren damit Ich die Daten korrekt in ein Array oder JSON bekomme? :)
Hat einer eine Idee oder sogar einen Ansatz/Hinweis/Lösung? :)

PS:
So lese Ich aktuell alles aus:
PHP:
<?php
$verzeichnis = "D:\\htdocs\\dokumente\\upload_module\\";
$inputFilename = basename($_FILES['files']['name'][0]);
$fullFilename = $verzeichnis.$inputFilename;
$exp = explode('.', $_FILES['files']['name'][0]);
$newFilename = $exp[0].'_'.date('Ymd-His', time(true)).'.'.$exp[1];

if (!is_dir($verzeichnis)) {
    mkdir($verzeichnis);
}

$move_uploaded_file = move_uploaded_file($_FILES['files']['tmp_name'][0], $verzeichnis.$newFilename);

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::load($verzeichnis.$newFilename);
$readerfile = $reader->setActiveSheetIndex(0);
$colsRows = $readerfile->getHighestRowAndColumn(); //Anzahl Zeilen
$test = $reader->getActiveSheet()->rangeToArray('A1:'.$colsRows['column'].$colsRows['row']);

//printf('<pre>%s</pre>', print_r($test, true));

$fields = array();

for($i = 1; $i < count($test); $i++) {
    //array_push($fields, $test[$i]);
    $fields[$i] = $test[$i];
}

echo json_encode($fields);
?>
 

EuroCent

KlappStuhl 2.0
#2
Wir haben aktuell das Problem so gelöst:

PHP:
<?php
$verzeichnis = "D:\\htdocs\\dokumente\\upload_module\\";
$inputFilename = basename($_FILES['files']['name'][0]);
$fullFilename = $verzeichnis.$inputFilename;
$exp = explode('.', $_FILES['files']['name'][0]);
$newFilename = $exp[0].'_'.date('Ymd-His', time(true)).'.'.$exp[1];

if (!is_dir($verzeichnis)) {
    mkdir($verzeichnis);
}

$move_uploaded_file = move_uploaded_file($_FILES['files']['tmp_name'][0], $verzeichnis.$newFilename);

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::load($verzeichnis.$newFilename);
$readerfile = $reader->setActiveSheetIndex(0);
$colsRows = $readerfile->getHighestRowAndColumn(); //Anzahl Zeilen
$test = $reader->getActiveSheet()->rangeToArray('A1:'.$colsRows['column'].$colsRows['row']);

$fields = array();

for($i = 1; $i < count($test); $i++) {
    echo $test[$i][0];
}
?>
ist zwar aktuell nicht die feine Art.
Aber wir lesen damit das Array aus und tragen nur die Teile in die DB die wir benötigen. :)

@all
Ist es denn aber aktuell möglich in der For-Schleife einen neuen Prozess zu machen, um die Daten mit der last-insertID der Datenbank in die Excel einzuspeichern?

Also quasi zur Laufzeit die Excel zu Manipulieren, oder doch dann lieber eine neue Datei erzeugen? :)
 
Anzeige
Anzeige