Mam zamiar dodać sekcję do aplikacji ASP.NET (za kodem VB.NET), która pozwoli użytkownikowi uzyskać dane zwrócone do niego w postaci pliku Excel, który wygeneruję na podstawie danych z bazy danych. Chociaż można to zrobić na kilka sposobów, każdy ma swoje wady. Jak by pan zwrócić dane? Szukam czegoś tak przejrzystego i prostego, jak to tylko możliwe.
asp.net
vb.net
export-to-excel
Dan Coates
źródło
źródło
Odpowiedzi:
CSV
Plusy:
Cons:
HTML
Plusy:
Cons:
OpenXML (Office 2007 .XLSX)
Plusy:
Cons:
SpreadSheetML (otwarty format XML)
Plusy:
Cons:
XLS (wygenerowany przez komponent innej firmy)
Plusy:
Cons:
COM Interop
Plusy:
Cons:
źródło
Możesz wyprowadzić dane jako komórki tabeli html, przykleić do nich rozszerzenie
.xls
lub.xlsx
, a program Excel otworzy je tak, jakby był dokumentem natywnym. W ten sposób możesz nawet wykonać pewne ograniczone formatowanie i obliczenia formuł, więc jest znacznie bardziej wydajne niż CSV. Ponadto utworzenie tabeli html powinno być całkiem łatwe z platformy internetowej, takiej jak ASP.Net;)Jeśli potrzebujesz wielu arkuszy lub nazwanych arkuszy roboczych w skoroszycie programu Excel, możesz zrobić coś podobnego za pomocą schematu XML o nazwie
SpreadSheetML
. To nie jest nowy format dostarczany z pakietem Office 2007, ale coś zupełnie innego, co działa już w programie Excel 2000. Najłatwiej wyjaśnić, jak to działa, na przykładzie:źródło
Jeśli pochodzi z DataTable :
Z widoku siatki :
źródło
To darmowe opakowanie wokół SpreadML - działa świetnie.
http://www.carlosag.net/Tools/ExcelXmlWriter/
źródło
Na podstawie udzielonych odpowiedzi i konsultacji ze współpracownikami wydaje się, że najlepszym rozwiązaniem jest wygenerowanie pliku XML lub tabel HTML i przesłanie ich jako załącznika. Jedyną zmianą zalecaną przez moich współpracowników jest to, że dane (czyli tabele HTML) można zapisać bezpośrednio do obiektu Response, eliminując w ten sposób konieczność zapisywania pliku, co może być kłopotliwe ze względu na problemy z uprawnieniami, I / O rywalizacja i zapewnienie zaplanowanego czyszczenia.
Oto fragment kodu ... Jeszcze tego nie sprawdziłem i nie dostarczyłem całego wywoływanego kodu, ale myślę, że dobrze oddaje ideę.
źródło
ponieważ Excel rozumie HTML, możesz po prostu zapisać dane jako tabelę HTML do pliku tymczasowego z rozszerzeniem .xls, pobrać FileInfo dla pliku i odrzucić go za pomocą
jeśli chcesz uniknąć pliku tymczasowego, możesz zapisać do strumienia w pamięci i zapisać bajty z powrotem zamiast używać WriteFile
jeśli pominięto nagłówek content-length, możesz po prostu napisać bezpośrednio kod HTML, ale może to nie działać poprawnie przez cały czas we wszystkich przeglądarkach
źródło
Osobiście wolę metodę XML. Zwrócę dane z bazy danych w zestawie danych, zapiszę je w XMl, a następnie utworzę plik xslt, który zawiera regułę transformacji, która sformatuje odpowiedni dokument, a prosta transformacja XML zakończy pracę. Najlepszą częścią tego jest formatowanie komórek, formatowanie warunkowe, konfigurowanie nagłówków i stopek, a nawet ustawianie zakresów drukowania.
źródło
Zrobiłem to kilka razy i za każdym razem najłatwiej było po prostu zwrócić plik CSV (Comma Separated Value). Excel importuje go doskonale i jest to stosunkowo szybkie.
źródło
eksportujemy dane z datagridu, aby cały czas doskonalić się. Konwertowanie go do formatu HTML, a następnie zapisywanie w pliku programu Excel
Jedynym problemem związanym z tą metodą było to, że wiele naszych siatek miało w sobie przyciski lub linki, więc również tego potrzebujesz:
Znalazłem to gdzieś, działa dobrze.
źródło
Polecam darmową bibliotekę Excel do generowania plików Excel, która jest oparta na OpenXML
Pomogło mi to kilka miesięcy temu.
źródło
Oto raport, który pobiera z procedury składowanej. Wyniki są eksportowane do programu Excel. Używa ADO zamiast ADO.NET i powód, dla którego jest to linia
Wykonuje większość pracy i nie jest dostępny w ado.net.
źródło
Jeśli wypełnisz widok GridView danymi, możesz użyć tej funkcji, aby uzyskać dane w formacie HTML, ale wskazując, że przeglądarka jest plikiem programu Excel.
źródło
Po prostu unikaj COM Interop za pośrednictwem przestrzeni nazw Microsoft.Office.Interop. Jest tak cholernie powolny, zawodny i nieskalowalny. Nie dotyczy masochistów.
źródło
Możesz łatwo tworzyć ładnie sformatowane pliki Excela za pomocą tej biblioteki: http://officehelper.codeplex.com/documentation .
Microsoft Office nie musi być instalowany na serwerze internetowym!
źródło
CSV to najłatwiejszy sposób. W większości przypadków jest połączony z programem Excel. W przeciwnym razie musisz użyć interfejsów API automatyzacji lub formatu XML. Interfejsy API i XML nie są trudne w użyciu.
Informacje o generowaniu XML dla programu Excel
źródło
Albo wybieram trasę CSV (jak opisano powyżej), albo częściej używam Infragistics NetAdvantage do generowania pliku. (W bardzo zdecydowanej większości przypadków, gdy w grze działa Infragistics, po prostu eksportujemy istniejący UltraWebGrid, który jest zasadniczo rozwiązaniem typu one-LOC, chyba że potrzebne są dodatkowe poprawki formatowania. Moglibyśmy również ręcznie wygenerować plik Excel / BIFF, ale rzadko jest taka potrzeba).
źródło
stary, w .net myślę, że mógłbyś mieć komponent, który by to potrafił, ale w klasycznym asp, zrobiłem to już tworząc tabelę html i zmieniając tipe strony na vnd / msexcel. Myślę, że jeśli używasz widoku siatki i zmieniasz typ MIME, może to powinno działać, ponieważ widok siatki jest tabelą html.
źródło
Jedynym niezawodnym sposobem uniknięcia zielonych trójkątów „Wygląda na to, że te liczby są przechowywane jako tekst” jest użycie formatu Open XML. Warto z niego skorzystać, byle tylko uniknąć nieuniknionych zielonych trójkątów.
źródło
Najlepszą metodą, jaką widziałem w przypadku raportów programu Excel, jest zapisywanie danych w formacie XML z rozszerzeniem XML i przesyłanie ich strumieniowo do klientów z odpowiednim typem zawartości. (aplikacja / xls)
Działa to w przypadku każdego raportu wymagającego podstawowego formatowania i umożliwia porównanie z istniejącymi arkuszami kalkulacyjnymi przy użyciu narzędzi do porównywania tekstu.
źródło
Zakładając, że dotyczy to intranetu, w którym można ustawić uprawnienia i nadać uprawnienia IE, można wygenerować stronę klienta skoroszytu za pomocą języka JScript / VBScript sterującego programem Excel . Zapewnia to natywne formatowanie programu Excel, bez kłopotów związanych z automatyzacją programu Excel na serwerze.
Nie jestem pewien, czy naprawdę poleciłbym to podejście, z wyjątkiem dość niszowych scenariuszy, ale było to dość powszechne w czasach świetności klasycznej ASP.
źródło
Oczywiście zawsze możesz wybrać komponenty innej firmy. Osobiście mam dobre doświadczenia ze Spire.XLS http://www.e-iceblue.com/xls/xlsintro.htm
Komponent jest dość łatwy w użyciu w twojej aplikacji:
źródło
Jeden z problemów, na które natknąłem się, używając jednego z sugerowanych powyżej rozwiązań, które są podobne do tej odpowiedzi jest to, że jeśli wypchniesz zawartość jako załącznik (to, co uważam za najczystsze rozwiązanie dla przeglądarek innych niż ms) , a następnie otwórz go w programie Excel 2000-2003, jego typ to „Strona internetowa programu Excel”, a nie natywny dokument programu Excel.
Następnie musisz wyjaśnić użytkownikom, jak używać funkcji „Zapisz jako typ” w programie Excel, aby przekonwertować ją na dokument Excel. Jest to uciążliwe, jeśli użytkownicy muszą edytować ten dokument, a następnie ponownie przesłać go do Twojej witryny.
Moją rekomendacją jest użycie CSV. Jest to proste i jeśli użytkownicy otwierają go z poziomu programu Excel, program Excel przynajmniej monituje ich o zapisanie go w jego natywnym formacie.
źródło
Po prostu utworzyłbym plik CSV na podstawie danych, ponieważ uważam go za najczystszy, a Excel ma do tego dobrą obsługę. Ale jeśli potrzebujesz bardziej elastycznego formatu, jestem pewien, że istnieją narzędzia innych firm do generowania prawdziwych plików Excela.
źródło
Oto rozwiązanie, które przesyła dane jako plik CSV. Szybki, czysty i łatwy oraz obsługuje przecinki w danych wejściowych.
źródło
właśnie stworzyłem funkcję eksportu z formularza internetowego C #, aby mieć nadzieję, że pomoże to innym
źródło
Jeśli musisz użyć programu Excel zamiast pliku CSV, będziesz musiał użyć automatyzacji OLE na instancji programu Excel na serwerze. Najłatwiejszym sposobem jest posiadanie pliku szablonu i programowe wypełnienie go danymi. Zapisujesz go w innym pliku.
Porady:
Niektóre metody „używaj typów MIME, aby oszukać program Excel przy otwieraniu tabeli HTML” będą działać, jeśli nie masz nic przeciwko temu, że format pliku jest nieco prosty. Podejścia te powodują również przeniesienie ciężkiej pracy procesora na klienta. Jeśli chcesz mieć dokładną kontrolę nad formatem arkusza kalkulacyjnego, prawdopodobnie będziesz musiał użyć samego programu Excel do wygenerowania pliku, jak opisano powyżej.
źródło