[PHP] Upload Excel in db

  • Creatore Discussione Creatore Discussione Vera
  • Data di inizio Data di inizio

Vera

Utente Attivo
3 Giu 2014
76
1
8
Buongiorno,
ho questo codice php che da un file excel mi deve scrivere il relativo db:

PHP:
require 'lib/Spout/Autoloader/autoload.php';

use Box\Spout\Reader\ReaderFactory;
use Box\Spout\Common\Type;

$conn = db2_connect();
$filename = dirname(__dir__).'/storage/'.$fileExcel;

$reader = ReaderFactory::create(Type::XLSX); // for XLSX files
//$reader = ReaderFactory::create(Type::CSV); // for CSV files
//$reader = ReaderFactory::create(Type::ODS); // for ODS files

$reader->open($filename);

// Clear files DB
$sqla = "DELETE FROM Lib01.MioDB01F";
$exec01 = db2_exec($conn, $sqla);

$sqlb = "DELETE FROM Lib01.MioDB02F";
$exec02 = db2_exec($conn, $sqlb);

foreach ($reader->getSheetIterator() as $sheetIndex => $sheet) {
                             
    switch($sheetIndex){
        
        case 1: $fileDB = 'MioDB01F'; break; 
        case 2: $fileDB = 'MioDB02F'; break; 
    }             //echo $sheetIndex.' '.$fileDB; exit;

    foreach ($sheet->getRowIterator() as $key => $row) {

        if($key === 1) {

            $row = array_filter($row, 'strlen');

            $numCols = count($row);

            $header = strtoupper(implode(', ', $row));
            $values = implode(', ', array_fill(0, $numCols, '?'));
            $sql1 = "INSERT INTO Lib01.$fileDB($header) VALUES($values)";     
            $stmt = odbc_prepare($conn, $sql1);
            continue;
        }

        $row = array_slice($row, 0, $numCols);

        $insert = odbc_execute($stmt, array_map('trim', $row));
        if($insert === false) {
            echo $sql1;
            var_dump($row);
        }
    }
}

$reader->close();

il mio problema é che ho definiti i campi del mio db con f1, f2,f3,... fx, vorrei che il php, nella lettura del file excel non tenesse conto delle intestazioni delle colonne dello stesso excel. Cioè scrivere tutte le righe del file excel nel db usando le intestazioni del db (f1, f2, f3,....fx).

Grazie
 

Discussioni simili