Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Acquisire dati da excel: errori e miglioramento del codice

    Salve,
    il mio compito è quello di realizzare un programma che mi permatta di acquisire dei dati da fogli excel mandati in input tramite un form

    Quanto da me scritto funziona...dovrò solamente sistemare la parte delle celle da acquisire non appena mi verrano fornite altre informazioni ma questo è un altro aspetto.

    Volevo chiedere e sapere se, secondo voi, ci sono delle parti che posso essere scritte meglio o eventuali errori da me non notati.

    Tipo la gestione degli errori è ben configurata oppure devo fare delle modifiche?

    La parte in HTML del form è la seguente:

    -------------------------------------------------------------------------------------
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Leggere xls</title>
    </head>

    <body>
    <form enctype="multipart/form-data" method="post" action="LeggereDaExcel.php">
    Seleziona il file .xls da leggere:




    <label for="excel"> file </label>
    <input type="file" name="excel" id="excel" />


    <input type="submit" value="LEGGI" />
    </form>
    </body>
    </html>
    -------------------------------------------------------------------------------------

    Volevo aggiungere in questa parte un controllo che mi facesse comparire sulla stessa pagina un messagio con scritto "file caricato" nel caso in cui sia correttamente caricato oppure "Errore perchè..." nel caso non venga caricato nulla o nel caso in cui venga caricato un file diverso da .xls o .xlsx e quindi non esegua l'operazione.

    Mentre il codice PHP è il seguente:

    ----------------------------------------------------------------------------------------
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>LeggereDaExcel</title>
    </head>

    <body>

    <?php

    /** PHPExcel */
    require_once 'Classes/PHPExcel.php';

    /** PHPExcel_IOFactory */
    require_once 'Classes/PHPExcel/IOFactory.php';

    $inputFileName = $_FILES['excel']['name'];

    $sheetname = array('Foglio1' , 'Foglio2');

    /** Identify the type of $inputFileName **/
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);
    /** Create a new Reader of the type that has been identified **/
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    /** Advise the Reader of which WorkSheets we want to load **/
    $objReader->setLoadSheetsOnly($sheetname);

    try {
    /** Load $inputFileName to a PHPExcel Object **/
    $objPHPExcel = $objReader->load($inputFileName);
    } catch(Exception $e) {
    die('Error loading file: '.$e->getMessage());
    }

    echo $objPHPExcel->getSheetCount(),' worksheet',(($objPHPExcel->getSheetCount() == 1) ? '' : 's'),' loaded

    ';
    $loadedSheetNames = $objPHPExcel->getSheetNames();
    foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
    echo $sheetIndex,' -> ',$loadedSheetName,'
    ';

    $objPHPExcel->setActiveSheetIndex($sheetIndex);
    $objWorksheet = $objPHPExcel->getActiveSheet();

    $highestRow = $objWorksheet->getHighestRow();
    $highestColumn = $objWorksheet->getHighestColumn();
    $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColum n);
    $hCi = $highestColumnIndex - 1;

    echo '<table border="1">' . "\n";
    for ($row = 1; $row <= $highestRow; ++$row) {
    echo '<tr>' . "\n";

    for ($col = 0; $col <= $hCi; ++$col) {
    echo '<td>' . $objWorksheet->getCellByColumnAndRow($col, $row)->getValue() . '</td>' . "\n";
    }

    echo '</tr>' . "\n";
    }

    echo '</table>' . "\n";

    echo '
    ';

    }

    $objPHPExcel->disconnectWorksheets();
    unset($objPHPExcel);

    ?>

    </body>

    </html>
    -----------------------------------------------------------------------------------------

    La parte dell'errore è ben gestita così con il try/catch?
    Ci sono altri errori?
    Avete qualche consiglio da darmi o c'è qualcosa che dovrei sapere?

    Grazie a tutti quelli che mi presteranno un minimo di attenzione!

  2. #2
    Utente di HTML.it L'avatar di Razorblade
    Registrato dal
    Feb 2002
    Messaggi
    1,308
    Ciao,
    per migliorare il tuo codice potresti pensare di creare una tua libreria che legga il file excel e ti restituisca i dati.

    Per libreria intendo un oggetto a se stante (in un file a parte, ad esempio ExcelDataReader), a cui passare il file e che ti restituisca i dati nel formato in cui ti servono, per esempio un oggetto o un array.

    La parte della visualizzazione è un passaggio successivo.

    Gli oggetti PHPExcel potrebbero essere incapsulati all'interno della tua libreria.

    Inoltre non fidarti dell'esistenza di chiavi all'interno di un array, verifica sempre se esistono le chiavi che ti aspetti e con i dati che ti aspetti, inoltre verifica se il file è esistente, leggibile e del formato corretto.

    Crea uno o più oggetti Exception per la tua libreria, es. ExcelDataReaderException, questo può semplicemente estendere Exception nativa di Php, puoi lanciare questa eccezione all'interno della tua libreria in caso di eccezione ( ad esempio, il foglio che dovrebbe esistere nell'excel non è presente).

    Questo un possibile esempio

    Codice PHP:
    try {
      
    $excelReader = new ExcelDataReader($filepath);
      
    $data $excelReader->getData();
    } catch(
    ExcelDataReaderException $e) { 

    /* Blocco catch multiplo nel caso in cui sia necessaria 
    una differente gestione delle eccezioni in base all'eccezione lanciata */


    } catch(ExcelDataReaderException $e) {

    } catch(
    Exception $e) {

    }


    // visualizzazione dei dati 

  3. #3
    Ok, ti ringrazio per la risposta!

    Cerco di riorganizzare tutto in questi giorni e mi chiarisco/riguardo la parte delle eccezioni...

    Nel caso dovessi avere qualche altro dubbio mi farò vivo!

    Grazie ancora

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.