2015-04-13 40 views
8

Sto chiamando un servizio Web e i dati dal servizio Web sono in formato csv. Se provo a salvare i dati in xls/xlsx, ottengo più fogli in una cartella di lavoro. Quindi, come posso salvare i dati in csv con multipletab/fogli in C#.È possibile csv con più schede/fogli?

So che csv con più schede non è pratico, ma esiste un modo dannato o una qualsiasi libreria per salvare i dati in csv con più schede/fogli?

+0

un'alternativa possibile - https://technet.microsoft.com/en-us/magazine/2006.01.blogtales.aspx – MethodMan

+0

Che cosa intendi per "più schede/fogli" per csv? In questo modo, quando aperto in Excel, riceverai più schede? –

+2

Non è possibile salvare un CSV con più schede –

risposta

3

Se provo a salvare i dati in xls/xlsx, ottengo più fogli in una cartella di lavoro.

La tua risposta è nella sua interrogazione, non utilizzare il testo/csv (che certamente può non fare più fogli, non può fare nemmeno un foglio, non c'è cosa come un foglio in formato testo/csv sebbene ci sia nel modo in cui alcune applicazioni come Excel o Calc scelgono di importarlo in un formato che ha dei fogli) ma salvarlo come xls, xlsx, ods o in un altro formato che ha dei fogli.

Sia XLSX che ODS sono molto più complicati di text/csv, ma sono probabilmente i più diretti dei rispettivi gruppi di formati.

+0

I dati che sto ricevendo sono in CSV e mi viene detto di tenerlo solo in csv. Perché il server potrebbe non supportare Excel e Office.Interop dove voglio recuperare determinati valori. –

+0

Non c'è una libreria in C#/Asp.net che può rendere più fogli? –

+0

Non si vorrebbe usare Excel sul server in ogni caso - è esplicitamente non progettato per un uso multithread pesante e non UI. Ci sono un sacco di librerie là fuori che genereranno file Excel in un ambiente server (in puro codice .NET, senza dipendenze esterne); ci sono molti buoni a pagamento, e probabilmente alcuni gratuiti. –

7

CSV, come formato di file, presuppone una "tabella" di dati; in termini di Excel è un foglio di una cartella di lavoro. Anche se è solo testo, e puoi interpretarlo come vuoi, il formato CSV "standard" non supporta ciò che pensa il tuo supervisore.

È possibile fudge ciò che si desidera un paio di modi:

  • Utilizzare un file diverso per ogni foglio, con i nomi correlate ma distinte, come "Book1_Sheet1", "Book1_Sheet2", ecc È possibile quindi trovare gruppi di file correlati dal testo prima del primo carattere di sottolineatura. Questo è il modo più facile da implementare, ma richiede agli utenti di esplorare più file per logica "cartella di lavoro", e se uno si perde nello shuffle hai perso quei dati.

  • Fai quanto sopra, e anche "zip" i file in un unico archivio che puoi spostare. Mantieni il puro vantaggio CSV dell'opzione di cui sopra, oltre alla comodità di avere un file da spostare invece di diversi, ma lo svantaggio di dover zippare/decomprimere l'archivio per arrivare ai file reali. Per alleviare il dolore, se si è in .NET 4.5 si ha accesso a un'implementazione ZipFile integrata, e se non si è in grado di utilizzare il DotNetZip o SharpZipLib open source, ognuno dei quali consentirà di creare e consumare file ZIP standard di Windows. Puoi anche utilizzare la combinazione quasi universale .tar.gz (aka .tgz), ma i tuoi utenti avranno bisogno del tuo programma o di uno strumento di compressione di terze parti come 7Zip o WinRAR per creare l'archivio da una serie di CSV esportati.

  • Implementare un formato quasi CSV in cui una riga vuota (contenente solo una nuova riga) funge da "separatore di separatori" e il parser si aspetta una nuova riga di intestazioni di colonna seguita da righe di dati nella nuova configurazione. Questa variante di CSV standard potrebbe non essere leggibile da altri utenti di CSV in quanto non aderisce al formato di file previsto e pertanto raccomanderei di non utilizzare l'estensione ".csv" poiché confonderebbe e frustrerebbe gli utenti in attesa per poterlo aprire in altre applicazioni come fogli di calcolo.

+0

Grazie.Potete darmi un esempio per implementare un formato quasi-csv con una riga vuota come una separazione. –

+0

È abbastanza semplice; semplicemente analizza le righe CSV come normali (la prima riga è intestazioni, quindi le righe di dati corrispondenti a tali intestazioni), ma prima di analizzare una riga di dati, verifica se la riga contiene caratteri non di spazi bianchi. In caso contrario, interrompere l'analisi della riga di dati e ripetere la logica dell'intestazione di colonna utilizzando una nuova raccolta per memorizzare i dati del successivo foglio. Qualcosa di più specifico di quello e mi chiederai il codice che puoi inserire, e non è questo il sito. – KeithS

2

Sto usando questa libreria per un po 'di tempo,

https://github.com/SheetJS/js-xlsx

nei miei progetti per importare i dati e la struttura da formati come: xls (x), csv e xml, ma si posso di sicuro salvare anche in quei formati (tutto dal client)!

speranza che può aiutare a ,, dare un'occhiata sul demo online,

http://oss.sheetjs.com/js-xlsx/

sbirciatina nel codice sorgente o presentare un problema su GH? ma penso che dovrai fare la maggior parte della codifica per te stesso

+0

quindi stai dicendo che è possibile csv a più fogli? –

+0

no, quella cosa non esiste, csv è un formato approssimativo, vecchio formato ma principalmente per il trasporto di dati utilizzato, niente di niente :) –

+0

Questo sembra davvero buono. Puoi guidarmi su come usare questa libreria nel mio studio visivo? –

0

Penso che tu voglia ridurre la dimensione del tuo file excel. Se sì, puoi farlo salvandolo come xlsb, ad es. Formato di cartella di lavoro binario di Excel. Inoltre, è possibile ridurre le dimensioni del file eliminando tutte le celle vuote.

Spero che questo risponda alla tua preoccupazione.

Problemi correlati