Importuj i eksportuj program Excel - jaka jest najlepsza biblioteka? [Zamknięte]


180

W jednej z naszych aplikacji ASP.NET w języku C # pobieramy określoną kolekcję danych (kolekcję SubSonic) i eksportujemy ją do programu Excel. Chcemy również importować pliki Excel w określonym formacie. Szukam biblioteki, której mogę użyć do tego celu.

Wymagania:

  • Pliki programu Excel 2007 (czy program Excel 2003 obsługuje ponad 64 tys. Wierszy? Potrzebuję więcej.)
  • Nie wymaga programu Excel na serwerze
  • Pobiera wpisaną kolekcję i, jeśli to możliwe, próbuje umieścić pola numeryczne jako numeryczne w programie Excel.
  • Działa dobrze z dużymi plikami (100k do 10M) - wystarczająco szybko.
  • Nie ulega awarii podczas eksportowania identyfikatorów GUID!
  • Nie kosztuje ogromu pieniędzy (żadna biblioteka korporacyjna nie jest podobna). Darmowy jest zawsze świetny, ale może być biblioteką komercyjną.

Jaką bibliotekę polecasz? Czy używałeś go do dużych ilości danych? Czy są inne rozwiązania?

Obecnie używam prostego narzędzia, które generuje HTML ładowany później przez program Excel, ale tracę pewne możliwości, a program Excel narzeka, gdy go ładujemy. Nie muszę generować wykresów ani nic podobnego, wystarczy wyeksportować surowe dane.

Mam na myśli płaskie pliki CSV, ale Excel jest wymaganiem klienta. Mogę pracować bezpośrednio z CSV, jeśli miałbym narzędzie do konwersji do iz Excela. Biorąc pod uwagę, że Excel 2007 jest formatem pliku XML (i spakowanym), domyślam się, że tego rodzaju biblioteki powinny być łatwe do znalezienia. Jednak najważniejsze są dla mnie twoje komentarze i opinie.


EDYCJA: Jak na ironię, moim zdaniem i po odpowiedzi z największą liczbą głosów, najlepsza biblioteka importu i eksportu Excel w ogóle nie eksportuje. Nie dotyczy to wszystkich scenariuszy, ale dotyczy moich. Pliki XLS obsługują tylko 64k wierszy. XLSX obsługuje do 1M. Darmowe biblioteki, które wypróbowałem, mają niską wydajność (jedna sekunda, aby załadować jeden wiersz, gdy masz 200 000 wierszy). Nie wypróbowałem płatnych, ponieważ uważam, że są one zawyżone za wartość, którą zapewniają, gdy wszystko, czego potrzebujesz, to szybka procedura konwersji XLSX <-> CSV.


18
„Biorąc pod uwagę, że Excel 2007 jest formatem pliku XML (i spakowanym), domyślam się, że tego rodzaju biblioteki powinny być łatwe do znalezienia” - hah! To tak, jakby powiedzieć „Excel 97 jest oparty na bajtach, więc tego rodzaju biblioteki powinny być łatwe do znalezienia”. XML nie oznacza prostoty, a OOXML jest dzieckiem podrzędnym, jak sprawić, by XML był nieokreślony i nieokreślony złożony. :-)
Ken

W rzeczywistości nie do końca słusznie przyjmujesz takie założenie. Dostępne są narzędzia, dzięki którym zbudowanie dobrze sformatowanego dokumentu OOXML przynajmniej dla XLSX jest bardzo łatwe w C # .NET.
Anonimowy Wpisz

3
Stworzyłem propozycję witryny, aby dać takim pytaniom oficjalny dom z dala od przepełnienia stosu. To się nazywa Kod Zalecenia Pomóż w urzeczywistnieniu, dołączając i zadając pytania już teraz!
daviewales

Co ze Spire.xls. To tylko 800 USD za wersję Pro. Otrzymasz wszystkie swoje konwersje, a także import lub eksporter programu Excel. e-iceblue.com/Introduce/…
programista DotNet

GemBox.Spreadsheet to kolejne rozwiązanie, które warto sprawdzić, super szybko i ma zarówno wersje bezpłatne, jak i pro. Ponadto wersja pro jest raczej tania i nie ma żadnych ukrytych, koszmarnych kosztów wdrożenia, jak większość z nich.
NixonUposseen

Odpowiedzi:


41

Zamierzam rzucić rękę na płaskie pliki csv, choćby dlatego, że masz największą kontrolę nad kodem. Po prostu upewnij się, że czytasz w wierszach i przetwarzasz je pojedynczo (czytanie dokumentu do końca i dzielenie pochłonie całą twoją pamięć - tak samo jak pisanie, przesyłanie strumieniowe).

Tak, użytkownik będzie musiał zapisać jako CSV w programie Excel, zanim będzie można go przetworzyć, ale być może ograniczenie to można pokonać, szkoląc się i udostępniając jasne instrukcje na stronie?

Wreszcie, gdy eksportujesz do klienta, jeśli ustawisz typ MIME na text / csv, Excel jest zwykle mapowany na ten typ, więc wydaje się, że użytkownik jest „plikiem Excel”.


4
Próbowałem też podejścia CSV, ale jest z nim kilka problemów. Na przykład, co jeśli chcesz mieć tekst wielowierszowy w komórce? Nie mogłem zmusić Excela do zaimportowania takiego pliku CSV.
Igor Brejc

23
CSV ma swoje miejsce, ale plakat zapytał o Excela, zakładam, że musi chcieć Excela, a nie CSV.
John Scipione

7
CSV spada podczas eksportowania kolumn takich jak 0345. Excel automatycznie przycina to do 345. Co wcale nie jest pomocne, gdy ta wiodąca cyfra jest ważna.
NotMe,

2
Tabela HTML z rozszerzeniem pliku Excel wydaje się działać całkiem dobrze ... przeanalizuje trochę CSS w szczególny sposób dla takich rzeczy, jak formatowanie wielu linii, kolorów itp. - bez konieczności tworzenia natywnego pliku Excel
Oskar Duveborn

3
"Zapisz jako"? Nie. Jeśli klient korzysta z programu Excel, dlaczego miałby oszczędzać drugi, znacznie bardziej ograniczony plik do interakcji z twoim produktem?
mlibby

41

Odkryłem Open XML SDK od mojej oryginalnej odpowiedzi. Zapewnia między innymi silnie typowane klasy dla obiektów arkusza kalkulacyjnego i wydaje się, że jest dość łatwa w obsłudze. Użyję go do raportów w jednym z moich projektów. Niestety, wersja 2.0 ma zostać wydana dopiero pod koniec 2009 lub 2010 roku.


Bardzo interesujące! Czy przetestowałeś to przy użyciu dużych ilości danych?
Jason Kealey

Nie wykonałem żadnego testu wydajności. Będę głównie tworzył wykresy i raporty jednostronicowe, więc przepustowość nie stanowi dla mnie problemu. Wydaje się jednak, że jest tak szybki, jak tylko może być zarządzany kod.
cdonner

1
@Jason Kealey: to naprawdę najlepsza odpowiedź na ten post - eksport z SpreadsheetML staje się nieistotny. Wszystkie dane są dostępne z poziomu pliku. Jeśli potrzebujesz danych w innym formacie, podaj transformację za pośrednictwem XSLT lub Linq.
Todd Main

1
Jednak w ogóle nie działa to w przypadku plików „.xls”.
quillbreaker

github.com/OfficeDev/Open-XML-SDK jest teraz otwarte i hostowane na githubie (lubię tam, gdzie ostatnio zmierza MS)
Alex

34

nowa wersja pakietu ExcelPackage znajduje się tutaj http://EPPlus.codeplex.com

Wciąż walczę z funkcją eksportu do programu Excel, ponieważ moja aplikacja powinna eksportować niektóre dane do programu Excel 2007

ten projekt wydaje mi się w porządku, a programista bardzo reaguje na błędy i problemy.


3
Działa dobrze, ale jest licencjonowany na licencji GPL - np. Każde oprogramowanie, które go używa, musi być również dostępne w zwykłym kodzie źródłowym .... nie zawsze dobry wybór ...
marc_s

Eksportuj w dogodnym dla Ciebie formacie natywnym, napisz prog. który korzysta z EPPlus do konwersji do Excela, uczyń to za darmo. Niech twój główny program użyje go jako domyślnego, ale zezwól na inne „wtyczki”, hej presto, twój prawdziwy kod jest wolny od GPL.

5
Wygląda na to, że jest to licencja na licencji LGPL, więc możesz używać go jako biblioteki połączonej bez ograniczeń copyleft.
Brad R

Zauważ, że jeśli potrzebujesz stworzyć plik Excela, który zawiera duże ciągi znaków, ta biblioteka ma tendencję do losowego generowania błędów „nieczytelnej zawartości” w programie Excel.
Kevin Laity

1
Uważaj, ponieważ EPPlus przecieka pamięć, nie jest tak naprawdę dobry dla dużych ilości danych.
user3285954

18

Korzystam z ClosedXML i działa świetnie!

ClosedXML ułatwia programistom tworzenie plików Excel 2007/2010. Zapewnia miły obiektowy sposób manipulowania plikami (podobny do VBA) bez radzenia sobie z kłopotami związanymi z dokumentami XML. Może być używany w dowolnym języku .NET, takim jak C # i Visual Basic (VB).


8
Uwielbiam ironię w imieniu ...
Jagd

Wykorzystałem to również i to samo doświadczenie. Działa dobrze i jest bardzo elastyczny.
AnthonyVO,

14

SpreadsheetGear for .NET odczytuje i zapisuje CSV / XLS / XLSX i robi więcej.

Możesz zobaczyć próbki ASP.NET na żywo z kodem źródłowym C # i VB tutaj i pobrać bezpłatną wersję próbną tutaj .

Oczywiście uważam, że SpreadsheetGear to najlepsza biblioteka do importowania / eksportowania skoroszytów Excela w ASP.NET - ale jestem stronniczy. Po prawej stronie tej strony możesz zobaczyć, co mówią niektórzy z naszych klientów .

Oświadczenie: Jestem właścicielem SpreadsheetGear LLC


@Joe Erickson: Czy możesz powiedzieć, w jaki sposób można przejść do czytania pliku CSV, a następnie generowania pliku XML z pliku CSV po prostu za pomocą narzędzia do arkuszy kalkulacyjnych i korzystania z tego XLS, który tworzy wynikowy plik XML zawierający tę strukturę? Czy możemy użyć Arkusza kalkulacyjnego do bezpośredniego wygenerowania pliku XML z pliku CSV?
AnkitSablok


5

W przeszłości korzystałem z Flexcel i było świetnie. Było to jednak bardziej związane z programowym tworzeniem i aktualizowaniem arkuszy Excela.


Nie widzę, że obsługuje to program Excel 2007 (xlsx). Ponieważ xls obsługuje tylko 64k wierszy, jest to dla mnie ograniczenie.
Jason Kealey

@Jason Kealey - Flexcel obsługuje teraz programy Excel 2007 i 2010.
Pauk

5

Eksport CSV jest prosty, łatwy do wdrożenia i szybki. Warto jednak zwrócić uwagę na jeden potencjalny problem. Excel (do 2007 r.) Nie zachowuje zer wiodących w plikach CSV. Spowoduje to zniekształcenie kodów pocztowych, identyfikatorów produktów i innych danych tekstowych zawierających wartości liczbowe. Jest jedna sztuczka, która sprawi, że Excel poprawnie zaimportuje wartości (używając separatorów i wartości prefiksu ze znakiem =, jeśli dobrze pamiętam, np., = "02052", ...). Jeśli masz użytkowników, którzy będą wykonywać zadania przetwarzania końcowego za pomocą CSV, muszą mieć świadomość, że muszą zmienić format na XLS i nie zapisywać pliku z powrotem w CSV. Jeśli tak, wiodące zera zostaną utracone na zawsze.


1
Aby wszystko, co powinno zostać zachowane jako tekst, po prostu wstaw „(apostrof) na początku
phuclv

Kolejny fajny fakt: nie mogę otworzyć pliku z przecinkami w wielu lokalizacjach, takich jak niemiecki. Co sprawia, że ​​csv jest kiepskim formatem do udostępniania danych kontaktom międzynarodowym
Christian Sauer

4

Przez lata korzystałem z JExcel , doskonałego projektu Java typu open source. Był również w stanie .NET dzięki kompilacji J # i odniosłem również duży sukces w tym wcieleniu. Jednak ostatnio musiałem przeprowadzić migrację kodu do natywnej platformy .NET w celu obsługi 64-bitowej aplikacji IIS, w której tworzę dane wyjściowe programu Excel. Nie można załadować 32-bitowej wersji J #.

Kod dla CSharpJExcel to LGPL i jest obecnie dostępny na tej stronie, podczas gdy my przygotowujemy się do wdrożenia go w witrynie JExcel SourceForge. Skompiluje się z VS2005 lub VS2008. Przykłady w oryginalnej dokumentacji JExcel całkiem nieźle przejdą na nienaruszoną do wersji .NET.

Mam nadzieję, że jest to pomocne dla kogoś tutaj.


Oba łącza już nie działają ... ale znalazłem kilka fragmentów i wygląda na to, że jest bardziej przyjazny dla Java, nie tyle dla programistów .NET. Jednak znalazłem inną bibliotekę, która jest odwrotna, jest to natywna biblioteka .NET ( GemBox.Spreadsheet ), która również została przeniesiona do Java ( GemBox.Spreadsheet dla Java ).
Hazel Patton


3

Poniższa witryna pokazuje, jak wyeksportować DataTable, DataSet lub List <> do „właściwego” pliku .xlsx programu Excel 2007 (zamiast eksportować plik .csv i otwierać go w programie Excel).

Korzysta z bibliotek OpenXML, więc nie musisz mieć programu Excel zainstalowanego na serwerze.

Baza wiedzy Mikes - ExportToExcel

Cały kod źródłowy jest udostępniany bezpłatnie , a także jako aplikacja demonstracyjna.

Bardzo łatwo jest dodać do własnych aplikacji, wystarczy wywołać jedną funkcję, przekazać nazwę pliku Excel i źródło danych:

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

Mam nadzieję że to pomoże.


2

Sprawdź projekt ExcelPackage , używa formatu pliku Office Open XML programu Excel 2007, jest lekki i open source ...


1
Wyglądał dobrze, ale jeden komentarz mówi, że jest źle z dużymi plikami (mój scenariusz)
Jason Kealey

1
Ciekawe - jest na licencji GPL, a nie LGPL. Dlatego należy go używać w aplikacjach GPL. (Również niefortunne wydaje się, że rozwój się zatrzymał.)
Jason Kealey

1
Próbowałem programu ExcelPackage, ale musiałem go porzucić - kończy się niepowodzeniem, gdy próbujesz wstawić pojedyncze cudzysłowy (') w komórce.
Igor Brejc,

2

Próbowałem CSharpJExcel i nie poleciłbym go, przynajmniej dopóki nie będzie dostępna dokumentacja. W przeciwieństwie do twórców komentuje to nie prosty natywnego portu.


2

Wiem, że jest już dość późno, ale czuję się zmuszony odpowiedzieć na xPorter (pisanie) i xlReader (czytanie) z xPortTools.Net . Przetestowaliśmy sporo bibliotek i nic nie zbliżyło się do wydajności (mówię o pisaniu milionów wierszy w ciągu kilku sekund). Nie mogę powiedzieć wystarczająco dobrych rzeczy o tych produktach!


2

Możesz użyć Microsoft.Jet.OLEDB.4.0


1
Jednym z moich wymagań jest nie mieć programu Excel działającego na serwerze.
Jason Kealey

2
nie sądzę, więc działa !!
Soner Gönül,

2
Pakiet MS Office nie jest wymagany dla „Microsoft.Jet.OLEDB.4.0” (dla xls) „Microsoft.ACE.OLEDB.12.0 dla xlsx”. musisz używać tylko sterowników, więc nie ma szans na uruchomienie programu Excel na serwerze @Jason Kealey
Sanjay Goswami

1
Użyłem tego dla XLS (nie oryginalnego wymagania) i dla kompletności ... Istnieje kilka ważnych problemów: (1) Jest tylko 32-bitowy, więc będziesz musiał ustawić IIS, aby na to pozwolić. (2) Jest strasznie powolny w eksporcie. (3) Ma słabo udokumentowane limity wierszy i kolumn. (4) Nalega na zaimportowane kolumny typu „wąchanie typu”, chyba że masz dostęp do rejestru, i ogólnie robi się źle.
philw

1

Właśnie zidentyfikowaliśmy podobną potrzebę. I myślę, że ważne jest, aby wziąć pod uwagę wrażenia użytkownika.

Prawie zostaliśmy omijani po tym samym:

  1. Przygotuj / pracuj w pliku arkusza kalkulacyjnego
  2. Zapisz plik
  3. Importować plik
  4. Pracuj z danymi w systemie

... przepływ pracy

Dodatek Express umożliwia utworzenie przycisku w programie Excel bez konieczności żmudnego korzystania z VSTO. Następnie przepływ pracy staje się:

  1. Przygotuj / pracuj w pliku arkusza kalkulacyjnego
  2. Importuj plik (za pomocą przycisku w programie Excel )
  3. Pracuj z danymi w systemie

Niech kod za przyciskiem użyje „natywnego” Excel API (poprzez Add-in Express) i wcisnie bezpośrednio do systemu odbiorcy. Nie można uzyskać znacznie bardziej przejrzystego dla programisty lub użytkownika. Warte rozważenia.


1

Na CodeProject autorstwa Yogesh Jagota znajduje się całkiem niezły artykuł i biblioteka:

Excel XML Import-Export Library

Użyłem go do eksportowania danych z zapytań SQL i innych źródeł danych do Excela - działa dla mnie dobrze.

Twoje zdrowie


1
Ciekawe, ale wymaga plików XML. Nie można odczytać / zapisać plików xls lub xlsx.
Jason Kealey

1

Możesz wypróbować następującą bibliotekę, jest to dość łatwe i jest tylko lekkim opakowaniem w pakiecie Microsoft Open XML SDK (możesz nawet ponownie używać formatowania, stylów, a nawet całych arkuszy z dodatkowego pliku Excel): http://officehelper.codeplex.com


Nowa wersja biblioteki została niedawno opublikowana.
aron.sinoai

0

Spreadsheetgear to najlepsza biblioteka komercyjna, jaką znaleźliśmy i używamy. Nasza firma zajmuje się importowaniem i eksportowaniem zaawansowanego programu Excel, a arkusz kalkulacyjny obsługuje wiele zaawansowanych funkcji programu Excel znacznie wykraczających poza wszystko, co można zrobić za pomocą prostego pliku CSV, i jest szybki. Nie jest darmowy ani bardzo tani, ale warto, ponieważ wsparcie jest doskonałe. Programiści faktycznie odpowiedzą, jeśli napotkasz problem.


0

A co z biblioteką apache POI Java. Nie korzystałem z niego w programie Excel, ale użyłem go w programie Word 2007.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.