Importa ed esporta Excel - Qual è la migliore libreria? [chiuso]


180

In una delle nostre applicazioni ASP.NET in C #, prendiamo una determinata raccolta di dati (raccolta SubSonic) ed esportiamo in Excel. Vogliamo anche importare file Excel in un formato specifico. Sto cercando una biblioteca che posso usare per questo scopo.

Requisiti:

  • File Excel 2007 (Excel 2003 supporta oltre 64k righe? Ne ho bisogno di più.)
  • Non richiede Excel sul server
  • Prende una raccolta digitata e, se possibile, prova a mettere i campi numerici come numerici in Excel.
  • Funziona bene con file di grandi dimensioni (da 100k a 10M) - abbastanza velocemente.
  • Non si arresta in modo anomalo durante l'esportazione di GUID!
  • Non costa un sacco di soldi (nessuna biblioteca aziendale come Aspose). Free è sempre fantastico, ma può essere una libreria commerciale.

Quale biblioteca mi consigliate? L'hai usato per grandi quantità di dati? Ci sono altre soluzioni?

In questo momento, sto usando un semplice strumento che genera HTML che verrà successivamente caricato da Excel, ma sto perdendo alcune funzionalità, inoltre Excel si lamenta quando viene caricato. Non ho bisogno di generare grafici o cose del genere, solo esportare dati grezzi.

Sto pensando a file CSV piatti, ma Excel è un requisito del cliente. Posso lavorare direttamente con CSV, se avessi uno strumento per convertire da e verso Excel. Dato che Excel 2007 è un formato di file basato su XML (e zippato), immagino che questo tipo di libreria dovrebbe essere facile da trovare. Tuttavia, ciò che conta di più per me sono i tuoi commenti e opinioni.


EDIT: Ironicamente, secondo me e seguendo la risposta con il maggior numero di voti, la migliore libreria di importazione ed esportazione di Excel non è affatto esportazione. Questo non è il caso di tutti gli scenari, ma è mio. I file XLS supportano solo 64k righe. XLSX supporta fino a 1M. Le librerie gratuite che ho provato presentano cattive prestazioni (un secondo per caricare una riga quando hai 200k righe). Non ho provato quelli a pagamento, poiché ritengo che siano troppo cari per il valore che offrono quando tutto ciò di cui hai bisogno è una rapida routine di conversione CSV XLSX <->.


18
"Dato che Excel 2007 è un formato di file basato su XML (e compresso), immagino che questo tipo di libreria dovrebbe essere facile da trovare" - hah! È come dire "Excel 97 è basato su byte, quindi questo tipo di libreria dovrebbe essere facile da trovare". XML non implica semplicità, e OOXML è il bambino poster per come rendere XML non specificato e indecifrabilmente complesso. :-)
Ken,

In realtà non hai del tutto corretto nel fare quell'ipotesi. Ci sono strumenti disponibili che rendono la costruzione di un documento OOXML ben formato almeno per XLSX, molto facile da fare con C # .NET.
Tipo anonimo

3
Ho creato una proposta di sito per dare domande come questa una casa ufficiale fuori dallo Stack Overflow. Si chiama Code Tips per aiutare a renderlo realtà unendosi e ponendo domande ora!
daviewales,

Che dire di Spire.xls. Sono solo $ 800 per la Pro Edition. Ottieni tutte le tue conversioni nonché l'importazione o l'esportatore di Excel. e-iceblue.com/Introduce/…
Programmatore DotNet,

GemBox.Spreadsheet è un'altra soluzione che vale la pena provare , super veloce e ha sia versioni gratuite che pro. Inoltre, la versione pro è piuttosto economica e non ha costi nascosti per la distribuzione come la maggior parte di loro.
NixonUposseen,

Risposte:


41

Ho intenzione di lanciare la mia mano per i file CSV piatti, se non altro perché hai il massimo controllo sul codice. Assicurati solo di leggere le righe e di elaborarle una alla volta (la lettura del documento fino alla fine e la suddivisione consumeranno tutta la tua memoria - lo stesso con la scrittura, lo streaming).

Sì, l'utente dovrà salvare come CSV in Excel prima di poterlo elaborare, ma forse questa limitazione può essere superata attraverso l'addestramento e fornendo istruzioni chiare sulla pagina?

Infine, quando esporti al cliente, se imposti il ​​tipo mime su text / csv, Excel viene di solito mappato su quel tipo in modo che appaia all'utente un "file Excel".


4
Ho provato anche l'approccio CSV, ma ci sono diversi problemi. Ad esempio, cosa succede se si desidera avere un testo a più righe in una cella? Non riuscivo a fare in modo che Excel importasse un CSV del genere.
Igor Brejc,

23
CSV ha il suo posto ma il poster ha chiesto di Excel, presumo che debba volere Excel, non CSV.
John Scipione,

7
CSV cade quando si esportano colonne come 0345. Excel lo imposta automaticamente su 345. Il che non è affatto utile quando la cifra iniziale è importante.
NotMe,

2
La tabella HTML con un'estensione di file Excel sembra funzionare abbastanza bene ... analizzerà alcuni CSS in un modo peculiare per cose come la formattazione di più linee, colori e così via - senza effettivamente dover creare un file Excel nativo
Oskar Duveborn

3
"Salva come"? No. Se il cliente utilizza Excel, perché dovrebbe salvare un secondo file molto più limitato per interagire con il tuo prodotto?
mlibby,

41

Ho scoperto Open XML SDK dalla mia risposta originale. Fornisce classi fortemente tipizzate per gli oggetti di fogli di calcolo, tra le altre cose, e sembra essere abbastanza facile da lavorare. Lo userò per i rapporti in uno dei miei progetti. Purtroppo, la versione 2.0 non dovrebbe essere rilasciata fino alla fine del 2009 o 2010.


Molto interessante! L'hai provato usando grandi quantità di dati?
Jason Kealey,

Non ho eseguito alcun test delle prestazioni. Sarò principalmente grafici e report a pagina singola, quindi la velocità effettiva non è un problema per me. Tuttavia, sembra essere veloce quanto può essere il codice gestito.
cdonner,

1
@Jason Kealey: questa è davvero la migliore risposta su questo post - l'esportazione diventa irrilevante con SpreadsheetML. I dati sono tutti accessibili dall'interno del file. Se hai bisogno di dati in un formato diverso, fornisci una trasformazione tramite XSLT o Linq.
Todd Main,

1
Questo non funziona affatto per i file ".xls".
Quillbreaker,

github.com/OfficeDev/Open-XML-SDK ora è open-source e ospitato da github (mi piace dove MS è diretto di recente)
Alex

34

la nuova versione di ExcelPackage è qui http://EPPlus.codeplex.com

Sto ancora combattendo con la funzione di esportazione in Excel poiché la mia applicazione dovrebbe esportare alcuni dati in Excel 2007

questo progetto mi sembra perfetto e lo sviluppatore è molto sensibile a bug e problemi.


3
Funziona bene, ma è concesso in licenza GPL - ad esempio, qualsiasi software che lo utilizza deve essere disponibile anche in semplice codice sorgente .... non sempre una buona scelta ...
marc_s

Esporta in un formato nativo per te conveniente, scrivi un prog. che utilizza EPPlus per convertire in Excel, rendilo gratuito. Fai in modo che il tuo prog principale lo usi come predefinito, ma consenti altri "plug-in", ehi presto il tuo vero codice è libero dalla GPL.

5
Sembra che questo sia ora concesso in licenza ai sensi della LGPL, quindi è possibile utilizzarlo come libreria collegata senza le restrizioni di copyleft.
Brad R,

Nota che se devi produrre un file Excel con stringhe di grandi dimensioni, questa libreria ha la tendenza a produrre casualmente errori di "contenuto illeggibile" in Excel.
Kevin Laity,

1
Attenzione che EPPlus perde memoria, non è davvero buono per grandi quantità di dati.
user3285954,

18

Sto usando ClosedXML e funziona benissimo!

ClosedXML semplifica la creazione di file Excel 2007/2010 per gli sviluppatori. Fornisce un buon modo orientato agli oggetti per manipolare i file (simile a VBA) senza occuparsi delle seccature dei documenti XML. Può essere utilizzato da qualsiasi linguaggio .NET come C # e Visual Basic (VB).


8
Adoro l'ironia nel nome ...
Jagd,

Usata pure e stessa esperienza. Funziona bene ed è molto flessibile.
AnthonyVO,

14

SpreadsheetGear per .NET legge e scrive CSV / XLS / XLSX e fa di più.

Puoi vedere esempi ASP.NET live con codice sorgente C # e VB qui e scaricare una versione di prova gratuita qui .

Ovviamente penso che SpreadsheetGear sia la migliore libreria per importare / esportare cartelle di lavoro Excel in ASP.NET - ma sono di parte. Puoi vedere cosa dicono alcuni dei nostri clienti sul lato destro di questa pagina .

Disclaimer: possiedo SpreadsheetGear LLC


@Joe Erickson: Puoi dirci come si fa a leggere un CSV e quindi a produrre un XML dal CSV appena letto usando l'ingranaggio del foglio di calcolo e usando tale XLS producendo un file XML risultante che contiene quella struttura? Oppure possiamo usare Spreadsheetgear per produrre direttamente un XML da un CSV?
AnkitSablok,


5

Ho usato Flexcel in passato ed è stato fantastico. Ma questo era più per la creazione e l'aggiornamento a livello di codice di fogli di lavoro Excel.


Non riesco a vedere che questo supporta Excel 2007 (xlsx). Poiché xls supporta solo 64k righe, questa è una limitazione per me.
Jason Kealey,

@Jason Kealey - Flexcel ora supporta Excel 2007 e 2010.
Pauk

5

L'esportazione CSV è semplice, facile da implementare e veloce. Tuttavia, c'è un potenziale problema degno di nota. Excel (fino al 2007) non conserva gli zeri iniziali nei file CSV. Ciò genererà codici postali, ID prodotto e altri dati testuali contenenti valori numerici. Esiste un trucco che consentirà a Excel di importare correttamente i valori (utilizzando delimitatori e valori di prefisso con il segno =, se ricordo bene, ad es., = "02052", ...). Se hai utenti che eseguiranno attività di post-elaborazione con CSV, devono essere consapevoli del fatto che devono cambiare il formato in XLS e non salvare il file in CSV. Se lo fanno, gli zeri iniziali andranno persi per sempre.


1
Per tutto ciò che dovrebbe essere conservato come testo, metti semplicemente un '(apostrofo) all'inizio
phuclv,

Un altro fatto divertente: non riesco ad aprire un file separato da virgole in molti locali, come il tedesco. Il che rende il CSV un formato scadente per condividere dati con contatti internazionali
Christian Sauer,

4

Per anni ho usato JExcel per questo, un eccellente progetto Java open source. È stato anche in grado di usare .NET usando J # per compilarlo, e ho anche avuto un grande successo con esso in questa incarnazione. Tuttavia, recentemente ho dovuto migrare il codice su .NET nativo per supportare un'applicazione IIS a 64 bit in cui creo l'output di Excel. La versione J # a 32 bit non si caricava.

Il codice per CSharpJExcel è LGPL ed è attualmente disponibile in questa pagina, mentre ci prepariamo a distribuirlo sul sito JExcel SourceForge. Si compilerà con VS2005 o VS2008. Gli esempi nella documentazione originale di JExcel passeranno piuttosto intatti alla versione .NET.

Spero sia utile a qualcuno qui fuori.


Entrambi i collegamenti non funzionano più ... ma ne ho trovati alcuni frammenti e sembra che sia più compatibile con Java, non tanto per gli sviluppatori .NET. Tuttavia, ho trovato un'altra libreria che è opposta, è una libreria .NET nativa ( GemBox.Spreadsheet ), che è stata anche portata su Java ( GemBox.Spreadsheet per Java ).
Hazel Patton,


3

Il seguente sito illustra come esportare un DataTable, un DataSet o un Elenco <> in un "corretto" file .xlsx di Excel 2007 (anziché esportare un file .csv e ottenere Excel per aprirlo).

Utilizza le librerie OpenXML, quindi non è necessario che Excel sia installato sul server.

Knowledge Base di Mikes - ExportToExcel

Tutto il codice sorgente viene fornito gratuitamente e un'applicazione demo.

È molto facile da aggiungere alle tue applicazioni, devi solo chiamare una funzione, passare un nome file Excel e l'origine dati:

DataSet ds = CreateSampleData();
string excelFilename = "C:\\Sample.xlsx";
CreateExcelFile.CreateExcelDocument(ds, excelFilename);

Spero che questo ti aiuti.


2

Controlla il progetto ExcelPackage , utilizza il formato di file Office Open XML di Excel 2007, è leggero e open source ...


1
Sembrava buono ma un commento dice che è male con file di grandi dimensioni (il mio scenario)
Jason Kealey,

1
Interessante: è concesso in licenza come GPL, non LGPL. Pertanto, deve essere utilizzato nelle applicazioni GPL. (Inoltre, sfortunato che lo sviluppo sembra essersi fermato.)
Jason Kealey,

1
Ho provato ExcelPackage, ma ho dovuto abbandonarlo - non riesce quando si tenta di inserire virgolette singole (') in una cella.
Igor Brejc,

2

Ho provato CSharpJExcel e non lo consiglierei, almeno fino a quando non sarà disponibile della documentazione. Contrariamente agli sviluppatori commenta che è non è una porta nativa dritto.


2

So che è abbastanza tardi, ma mi sento in dovere di rispondere a xPorter (scrittura) e xlReader (lettura) da xPortTools.Net . Abbiamo testato alcune librerie e nulla si è avvicinato alla performance (qui sto parlando di scrivere milioni di righe in pochi secondi). Non posso dire abbastanza cose positive di questi prodotti!


2

Puoi usare Microsoft.Jet.OLEDB.4.0


1
Uno dei miei requisiti è non avere Excel in esecuzione sul server.
Jason Kealey,

2
non penso, quindi è in esecuzione !!
Soner Gönül,

2
MS Office non è richiesto per "Microsoft.Jet.OLEDB.4.0" (per xls) "Microsoft.ACE.OLEDB.12.0 per xlsx". devi usare solo i driver, quindi nessuna possibilità di eseguire Excel sul server @Jason Kealey
Sanjay Goswami

1
L'ho usato per XLS (non il requisito originale) e per completezza ... Ci sono alcuni problemi importanti: (1) È solo a 32 bit, quindi dovrai impostare IIS per consentirlo. (2) È terribilmente lento all'esportazione. (3) Ha limiti di riga e colonna scarsamente documentati. (4) Insiste sul "tipo sniffing" colonne importate a meno che tu non abbia accesso al registro, e generalmente sbaglia.
philw,

1

Abbiamo appena identificato un'esigenza simile. E penso che sia importante considerare l'esperienza dell'utente.

Ci siamo quasi allontanati lungo lo stesso:

  1. Preparare / lavorare in un foglio di calcolo
  2. Salvare il file
  3. Importare file
  4. Lavora con i dati nel sistema

... flusso di lavoro

Il componente aggiuntivo Express ti consente di creare un pulsante all'interno di Excel senza tutto quel noioso pasticcio con VSTO. Quindi il flusso di lavoro diventa:

  1. Preparare / lavorare in un foglio di calcolo
  2. Importa file (utilizzando il pulsante all'interno di Excel )
  3. Lavora con i dati nel sistema

Chiedi al codice dietro il pulsante di utilizzare l'API Excel "nativa" (tramite Add-in Express) e spingi direttamente nel sistema del destinatario. Non puoi ottenere molto più trasparente per lo sviluppatore o l'utente. Vale la pena considerare.



1

Puoi provare la seguente libreria, è abbastanza semplice ed è solo un wrapper leggero su Open XML SDK di Microsoft (puoi persino riutilizzare la formattazione, gli stili e persino interi fogli di lavoro dal file Excel secondario): http://officehelper.codeplex.com


La nuova versione della biblioteca è stata recentemente pubblicata.
aron.sinoai,

0

Spreadsheetgear è la migliore biblioteca commerciale che abbiamo trovato e che stiamo usando. La nostra azienda offre molte funzionalità avanzate di importazione ed esportazione di Excel e Spreadsheetgear supporta molte funzionalità di Excel avanzate ben oltre qualsiasi cosa tu possa fare con un semplice CSV, ed è veloce. Non è gratuito o molto economico, ma ne vale la pena perché il supporto è eccellente. Gli sviluppatori ti risponderanno effettivamente se riscontri un problema.


0

Che ne dici della libreria java POI di Apache. Non l'ho mai usato per Excel, ma l'ho usato per Word 2007.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.