2013-05-24 21 views
5

Ho un file excel (file.xls)/csv (file.csv) che contiene/conterrà centinaia di migliaia di voci, anche milioni immagino. È possibile dividere questo in più file? Come file.xls in file1.xls, file2.xls, file3.xls e così via.Suddivisione di file Excel/Csv di grandi dimensioni su più file su PHP o Javascript

Esistono librerie da utilizzare? È possibile su PHP? o che ne dici di javascript? Dove posso specificare quante righe includere in ogni file?

Grazie

+1

Stai parlando di un xls (BIFF) file? o su un file CSV? o un file CSV con un'estensione di .xls? I file xls di Excel e CSV sono due molto diversi ... e un file xls (BIFF) è limitato a 65535 righe, quindi a meno che i tuoi dati non siano divisi tra più fogli di lavoro è impossibile avere milioni di voci –

+0

entrambe. Possibile un codice di compatibilità incrociata che funzionerà sia su csv che su excel. è possibile? –

+0

È possibile, ma potresti avere problemi di memoria e prestazioni lente quando parli di volumi di dati così grandi in un xls. La mia libreria PHPExcel può farlo, ma mi raccomando di attaccare con CSV diretto che può essere facilmente elaborato una riga alla volta –

risposta

1

Sì, è possibile farlo in PHP e con i file CSV. In pratica, esegui iterazioni sul file di grandi dimensioni e metti a pezzo ogni riga X, inoltrandole a un altro file.

a trovare le informazioni su come aprire il file CSV di grandi dimensioni come un iteratore in questa risposta qui:

allora avete bisogno di pezzo l'iteratore ogni x righe parti. Ciò può essere fatto come contorno qui:

Basta invece di emettere in multipla <ul>...</ul> elenchi HTML, si copiano sopra in un nuovo file. Che funziona praticamente come descritto in:

Tuttavia questa volta si desidera utilizzare il SplFileObject::fputcsv method. Fai attenzione a usare l'ultimo PHP stabile per questo, altrimenti devi fare qualcosa di diverso, vedi fputcsv().

Se la prima riga del file originale contiene colonna-headers, potrebbe essere così interessato al seguente:

mostra solo alcuni modi per estendere/processo del file in entrata. Potresti non aver bisogno dell'astrazione completa fatta lì, solo mantenere la prima linea potrebbe farlo già.

13

modo rapido e sporco di dividere un file CSV in diversi file CSV

$inputFile = 'input.csv'; 
$outputFile = 'output'; 

$splitSize = 10000; 

$in = fopen($inputFile, 'r'); 

$rowCount = 0; 
$fileCount = 1; 
while (!feof($in)) { 
    if (($rowCount % $splitSize) == 0) { 
     if ($rowCount > 0) { 
      fclose($out); 
     } 
     $out = fopen($outputFile . $fileCount++ . '.csv', 'w'); 
    } 
    $data = fgetcsv($in); 
    if ($data) 
     fputcsv($out, $data); 
    $rowCount++; 
} 

fclose($out); 
+1

Mark: funziona bene, ma data la domanda dell'OP sulla divisione di file di grandi dimensioni, l'esempio come scritto creerebbe 500k file ciascuno con 2 righe di dati csv. Sono sicuro che questo non è piacevole per lui. Suggerirei di alzare splitSize sopra a qualcosa di più ragionevole - diciamo almeno 10k. – Ross

Problemi correlati