Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776

    Classe phpexcel, inserimento formula Excel 2016 mi da errore all'aprire il file, mentre con OpenOffice funziona

    Ciao a tutti,

    dato questo codice;
    Codice PHP:
                        $objValidation2 $doc->getActiveSheet()->getCell($letra $pos)->getDataValidation();
                        
    $objValidation2->setType(PHPExcel_Cell_DataValidation::TYPE_LIST);
                        
    $objValidation2->setErrorStyle(PHPExcel_Cell_DataValidation::STYLE_INFORMATION);
                        
    $objValidation2->setAllowBlank(false);
         
                        
    $objValidation2->setShowDropDown(true);

                        
    $objValidation2->setErrorTitle($this->traducir('inputerror'));
                        
    $objValidation2->setError($this->traducir('valornoenlista'));
                        
    $formula '"pippo,pluto,topolino"';
                        
    $objValidation2->setFormula1($formula); 
    Con openoffice funziona correttamente, ho la lista dei valori da scegliere quando apro il documento nella relativa casella, mentre con Microsoft Excel 2016 produce questo errore all'aprire il documento:
    codice HTML:
    <?xml version="1.0" encoding="UTF-8" standalone="true"?>
    
    -<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
    
    <logFileName>error006600_01.xml</logFileName>
    
    <summary>Se han detectado errores en el archivo "F:\plantilla-trabajadores (36).xlsx"</summary>
    
    
    -<removedFeatures summary="Lista de funciones eliminadas:">
    
    <removedFeature>Caracterstica eliminada: Celdas con validacin de datos de /xl/worksheets/sheet1.xml parte</removedFeature>
    
    </removedFeatures>
    
    </recoveryLog>
    Qualche suggerimento?

    Grazie,
    Roberto

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Il tuo problema va aldil di una problematica php.

    In pratica, un file .xlsx solo un file .zip. Basta rinomminarne uno per convincersi. Se fossi in te rinommerei il file, andrei a guardare il contenuto del file /xl/worksheets/sheet1.xml .
    Andrei poi a riperire la parte che contiene i dati della lista per vedere se c' qualcosa che non quadra.

    Se non trovi nulla di strano, ti consiglio di creare un file con Excel con gli stessi dati di salvarlo di rinomminarlo in .zip e di confrontare i dati di entrambi file.

    Mi sono fatto il mio proprio phpExcel (che pero' molto meno potente) e gli errori che ho riscontrato nel generare i dati xml erano spesso un carattere < o > in troppo. Forse nel tuo caso si tratta solo di uno spazio mancante.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Quote Originariamente inviata da badaze Visualizza il messaggio
    Il tuo problema va aldil di una problematica php.

    In pratica, un file .xlsx solo un file .zip. Basta rinomminarne uno per convincersi. Se fossi in te rinommerei il file, andrei a guardare il contenuto del file /xl/worksheets/sheet1.xml .
    Andrei poi a riperire la parte che contiene i dati della lista per vedere se c' qualcosa che non quadra.

    Se non trovi nulla di strano, ti consiglio di creare un file con Excel con gli stessi dati di salvarlo di rinomminarlo in .zip e di confrontare i dati di entrambi file.

    Mi sono fatto il mio proprio phpExcel (che pero' molto meno potente) e gli errori che ho riscontrato nel generare i dati xml erano spesso un carattere < o > in troppo. Forse nel tuo caso si tratta solo di uno spazio mancante.

    Seguendo i tuoi consigli ho estratto il file xml in questione e sono andato su un validatore xml online.
    Mi da un sacco di errori!
    Ho ridotto all'osso i campi, ovvero ho messo solo 2 colonne(una delle quali con una formula che permette di scegliere tra X valori) e funziona correttamente (non mi da errori xml validando il file in questione online) e con Microsoft excel si apre correttamente.
    Deve sicuramente dipendere da un campo (colonna), adesso prover ad aggiungere campo per campo e trovare dov'e' l'errore!

    Ti far sapere.

    Grazie 1000 dei consigli!

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Ho trovato dove si genera il problema, pero' non risco a risolverlo:

    Il metodo della classe PHPEXCEL che mi genera la formula il seguente:
    Codice PHP:
    $objValidation2->setFormula1('"pippo,pluto,topolino"'); 
    In questo caso viene generata correttamente e il file excel si apre correttamente in microsoft excel.

    Ho fatto il mio metodo per generare la formula, dato un array indice numerico e valore, mi restituisce la stringa da passare al metodo setFormula1, il problema e' proprio nel mio metodo:

    Codice PHP:
        private function getFormulaFromArray(Array $array) {
            
    $stringa '"';
            foreach (
    $array as $clave => $valor) {
                
    $stringa.=$valor ',';
            }
            
    $stringa substr($stringa0, -1);
            return 
    $stringa '"';
        } 
    Infatti ci possono essere dei caratteri che generano il problema, dovrei sicuramente utilizzare una codificazione.
    E soprettutto la virgola contenuta in un campo, genera un altro record, es;
    Codice PHP:
    $array=["pippo","pluto","cane, il","gatto, il"];
    $this->getFormulaFromArray($array); 
    genera:

    codice:
    '"pippo,pluto,cane,il,gatto,il"'
    ovvero 6 record al posto di 4.

    Esempio di un array che mi genera i problemi, sia della virgola che di altri caratteri, ho fatto il var_dump:

    array (size=52)
    0 => string 'Albacete' (length=8)
    1 => string 'Alicante/Alacant' (length=16)
    2 => string 'Almer#a' (length=8)
    3 => string 'Araba/Álava' (length=12)
    4 => string 'Asturias' (length=8)
    5 => string 'Ávila' (length=6)
    6 => string 'Badajoz' (length=7)
    7 => string 'Balears, Illes' (length=14)
    8 => string 'Barcelona' (length=9)
    9 => string 'Bizkaia' (length=7)
    10 => string 'Burgos' (length=6)
    11 => string 'Cáceres' (length=8)
    12 => string 'Cádiz' (length=6)
    13 => string 'Cantabria' (length=9)
    14 => string 'Castellón/Castelló' (length=20)
    15 => string 'Ceuta' (length=5)
    16 => string 'Ciudad Real' (length=11)
    17 => string 'Córdoba' (length=8)
    18 => string 'Coruña, A' (length=10)
    19 => string 'Cuenca' (length=6)
    20 => string 'Gipuzkoa' (length=8)
    21 => string 'Girona' (length=6)
    22 => string 'Granada' (length=7)
    23 => string 'Guadalajara' (length=11)
    24 => string 'Huelva' (length=6)
    25 => string 'Huesca' (length=6)
    26 => string 'Jaén' (length=5)
    27 => string 'León' (length=5)
    28 => string 'Lleida' (length=6)
    29 => string 'Lugo' (length=4)
    30 => string 'Madrid' (length=6)
    31 => string 'Málaga' (length=7)
    32 => string 'Melilla' (length=7)
    33 => string 'Murcia' (length=6)
    34 => string 'Navarra' (length=7)
    35 => string 'Ourense' (length=7)
    36 => string 'Palencia' (length=8)
    37 => string 'Palmas, Las' (length=11)
    38 => string 'Pontevedra' (length=10)
    39 => string 'Rioja, La' (length=9)
    40 => string 'Salamanca' (length=9)
    41 => string 'Santa Cruz de Tenerife' (length=22)
    42 => string 'Segovia' (length=7)
    43 => string 'Sevilla' (length=7)
    44 => string 'Soria' (length=5)
    45 => string 'Tarragona' (length=9)
    46 => string 'Teruel' (length=6)
    47 => string 'Toledo' (length=6)
    48 => string 'Valencia/València' (length=18)
    49 => string 'Valladolid' (length=10)
    50 => string 'Zamora' (length=6)
    51 => string 'Zaragoza' (length=8)

    Ovviamente se passo al mio metodo getFormulaFromArray un array di questo tipo non ho problemi, e il file in microsoft excel si legge correttamente:

    array (size=3) 0 => string 'pippo' (length=5) 1 => string 'pluto' (length=5) 2 => string 'topolino' (length=8)
    Suggerimenti?

  5. #5
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,344
    Problema di codifica caratteri UT8 ANSI o vice versa.
    per le virgole nelle voci rimpiazzale con & #44; senza spazio tra & e #.
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    776
    Alla fine ho risolto con un escamotage:
    nella colonna ZZ, che ho nascosto, partendo dalla linea 100 a seguire, ho inserito i valori di tutte le formule.
    Poi passo alla formula i puntatori del valore iniziale e finale dei campi contenuti nella colonna ZZ.
    In questo modo ho evitato qualsiasi conversione/codifica caratteri.

    I tuoi consigli comunque mi sono stati molto utili, come sempre!

    Grazie,
    Roberto
    Ultima modifica di robynosse; 26-09-2018 a 21:14

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 © 2024 vBulletin Solutions, Inc. All rights reserved.