logo
small logo
  • Produkty
  • Zamów
  • Wsparcie techniczne
  • About
  • Customer panel Wsparcie techniczne
    • en
    • de
    • JP
    • ZH
  • Glówna strona
  • /
  • Articles
  • /
  • Jak wyeksportować raport do programu Excel XML z Delphi / Lazarus
  • Jak utworzyć plik PDF z Delphi / C ++ Builder / Lazarus

    14 maja 2020

    Dość często potrzebujesz uzyskać dokument PDF z aplikacji Pascal - albo Delphi lub Lazarus.Zazwyczaj zaleca

    read more
  • Jak utworzyć plik ZPL w Delphi / C ++ Builder / Lazarus

    22 grudnia 2020

    Co to jest plik ZPL? ZPL to skrót od Zebra Programming Language. Umożliwia on zespołowi

    read more
  • Jak utworzyć plik w Excelu 97 (2000, XP) – XLS z Delphi / C++Builder / Lazarus?

    18 maja 2020

    Och, to wieczny temat - tworzenie arkusza kalkulacyjnego Excel z arkuszy kalkulacyjnych Delphi. Excel jest

    read more
  • Jak utworzyć plik RTF z aplikacji Delphi / C++Builder / Lazarus?

    17 czerwca 2020

    Częstym pytaniem jest, jak wysłać dokument z aplikacji Delphi do RTF. Jest to popularny format,

    read more
  • Przekształcanie danych z bazy danych w dokument w Delphi / Lazarus / C++ Builder

    3 lutego 2021

    Jak z gąszczu danych zrobić czytelny raport? Oracle DB, MySQL, Microsoft SQL Server, PostgreSQL, FireBird to

    read more

Jak wyeksportować raport do programu Excel XML z Delphi / Lazarus

25 maja 2020

Programista ma ogromny wybór opcji, gdy zadaniem jest eksport do Excela z Delphi lub Lazarus – było to częściowo opisane w artykule “Jak wyeksportować raport do XLS Biff8 z Delphi” i tam też krótko wyjaśniłem, dlaczego jest to zły wybór. A co w takim razie jest dobry wybór? Cóż, lepiej zapisać plik w nowym (no dobrze, stosunkowo nowym) formacie XML XLSX.

"XML to technologia przeznaczona do zarządzania danymi strukturalnymi i wyświetlania tych danych jako pliku tekstowego czytelnego dla człowieka. XML jest zgodny ze standardami branżowymi i może być przetwarzany przez wiele baz danych i aplikacji. Za pomocą xml, wielu deweloperów mogą tworzyć własne niestandardowe tagi, struktury danych i schematy. Ogólnie rzecz biorąc XML znacznie ułatwia definiowanie, transfer, sprawdzanie poprawności i interpretację danych w różnych bazach danych, aplikacjach i organizacjach."

Ale Microsoft nie byłby sobą, gdyby nie próbował tradycyjnie tworzyć "własnego XML - z blackjackiem i komórkami!" I dlatego Excel faktycznie działa nie z jednym, ale dwoma (!) Standardy XML do przechowywania arkuszy kalkulacyjnych programu Excel: starszy, i bardziej poprawnym.

Jak już wielokrotnie wspominałem, FastReport pozwala zapisać dokumenty, raporty i dane z Delphi i Lazarus w wielu różnych formatach. Samo tworzenie raportu jest bułką z masłem, widać to w poprzednich artykułach – jedyną rzeczą, na którą chcę zwrócić uwagę, jest to, że trzeba uważać na wyrównanie obiektów, aby powstałe arkusze kalkulacyjne były atrakcyjne i jakościowe. Mamy więc dwa różne (!) filtry eksportu dla excela XML. Spójrz na to!

Wywołanie menu eksportu w XLSX XML

Widzimy okno podglądu i przycisk Zapisz.

" Hej, ale czego może użyć zwykły programista taki jak ja?" – jeśli tak zapytasz, będziesz miał absolutną rację. Krótka odpowiedź to 2007 XML, nowsza wersja, a poniżej powiem ci dlaczego.

Oczywiste jest, że programista nigdy nie robi niczego "tylko dlatego, że chce" - użytkownik to ten, który ma konkretnie określone potrzeby. Jaka jest więc różnica między tymi dwoma formatami z punktu widzenia użytkownika, gdy chce uzyskać arkusz kalkulacyjny Excela z aplikacji? Dla użytkownika ta różnica jest w przybliżeniu taka sama jak między rtf bez żadnych obrazów i pełnowartościowym dokumentem MS Word - pierwszy z nich prawie nigdy nie występuje w prawdziwym życiu. W prostym pliku XML nie ma stylów ani obrazów — tylko tabela w formacie XML. Ale w momencie gdy został wymyślony nie było zbyt wiele wyboru - był to ogromny krok naprzód dla MS Excel. Microsoft Excel 2007 XML może przechowywać obrazy, ma style itp. Jest to kontener OOML. 

Możesz zagłębić się w temat XML od 2007 roku tutaj - to cały świat!

Po prostu porównamy dwie opcje zapisywania w XML i XLSX XML i zdecydujemy, którego z nich lepiej użyć i w jakich przypadkach.

Eksportowanie do formatu XML jest prostsze: eksportowane są tylko obiekty tekstowe. Obrazy, wykresy, mapy, kody kreskowe, formatowanie TfrxRichView, znaczniki HTML i obraz tła nie trafią do wynikowego pliku XML programu Excel. Jak zwykle poniżej opiszę, jak zaimplementować zapisywanie w formacie XML programu Excel za pomocą kodu, jeśli nie chcesz lub nie musisz wyświetlać okna podglądu i dać możliwość wysłania go do drukowania. Pojawi się okno ustawień eksportu do XML. Ustawiłem te dwa okna obok siebie, aby dać możliwość porównania ustawień. To jest naprawdę łatwe do wykonania!

XLSX Excel 2007 setting XLSX XML Excel setting

Narzędzia FastReport pomagają wybrać strony naszego dokumentu do wysłania do programu Excel, niektórych stron lub zakresu.

Ustawienia eksportu: lepsza wizualna korespondencja z oryginalną wersją (WYSIWYG), podziałami stron i ciągłym dokumentem, który pomija nagłówki i stopki.

Jak będzie wyglądał wynik: nie dziel, nie używaj stron raportu, nie używaj wydruku na stronie nadrzędnej — każda strona TrfxReportPage w szablonie raportu odpowiada arkuszowi książki (pod warunkiem, że TfrxReportPage.PrintOnParent = False) lub podziel przez specjalną liczbę wierszy.

Otwórz po wyeksportowaniu: wynikowy plik zostanie otwarty przez program Microsoft Excel natychmiast po wyeksportowaniu (lub przez inne oprogramowanie skojarzone z plikami XLSX).

Zapisz XLSX XML w chmurze 

Powstały XML / XLSX można zapisać jako plik z rozszerzeniem .xml w pamięci lokalnej, wysłany do FTP, wysłany pocztą e-mail lub przesłany do jednego z dysku w chmurze (Dropbox, OneDrive, Box.com, GoogleDrive).

Porównajmy powstałe pliki XLSX i Excel XML

Table XLSX XML does not contain imagesXLSX Excel 2007 zawiera ilustracje i kody kreskowe

Pierwszy zrzut ekranu jest wynikiem zapisania w formacie XLSX i jak widać ten format nie obsługuje danych bardziej złożonych niż zwykły tekst. Ale drugi zrzut ekranu pokazuje nam wszystkie możliwości formatu XML, takie jak pełne wsparcie obrazów i kodów kreskowych. Mówiąc o wadze plików, wynik jest dość przewidywalny: XLSX - 48,0kB, XML - 40,0kB.

Tabela XLSX Excel 2007 z ilustracjami

Przyjrzyjmy się bliżej, dlaczego XLSX waży więcej niż XML. Te piękne ryby zostały wzięte za podstawę. Ten dokument zawiera dużo tekstu, dane tabelaryczne i 30 zdjęć. Aby uzyskać większą przejrzystość, porównajmy to również z niestarzejącym się  programem Excel 97, o którym rozmawialiśmy w innym artykule.

Porównanie rozmiarów XLS XLSX XML Excel 2007Porównanie rozmiarów XLS XLSX XML Excel 2007Porównanie rozmiarów XLS XLSX XML Excel 2007

Excel 97 - jest to format binarny (biff8) i nie ma żadnej kompresji, więc plik jest tak duży. W przeciwieństwie do późniejszego formatu XML, program Excel 97 obsługuje wszystkie rodzaje obrazów.

Tabela Excel (XML) - wczesna wersja XLSX, gdzie dane są przechowywane jako proste, pojedyncze, monolityczne pliki XML, co czyni je dość dużymi w porównaniu do starszych formatów binarnych OOXML i MS Office." Ale rozmiar pliku jest minimalny na zrzucie ekranu" - można powiedzieć.

Odpowiedź jest prosta: ten rozmiar jest wskazany dla dokumentu, w którym wyświetlany będzie tylko tekst. Teraz wyobraź sobie, że ten format obsługuje obrazy - dokument zajmie dużo miejsca, ponieważ nadal nie ma kompresji. Ponadto elementy wbudowane, takie jak obrazy, są przechowywane jako bloki zakodowane w formacie binarnym, które nie są dostępne do wyświetlania. Excel 2007 XLSX (XML) - Microsoft wziął najlepsze z poprzednich formatów i zaimplementował kompresję plików. Rozmiar dokumentu jest o około 50-75% mniejszy niż w poprzednich wersjach.

Ograniczone funkcje i możliwe ograniczenia formatu XLSX Excel 2007

Liczba kolumn wzrosła z 256 do 16 384, liczba wierszy w arkuszu wzrosła z 65 536 do 1048 576. Obliczenia w dużych arkuszach z wieloma formułami zostały przyspieszone dzięki obsłudze kilku procesorów i chipsetów wielowątkowych w programie Excel 2007.

A teraz jak zapisać w XLSX i XML Excel bezpośrednio z Delphi / Lazarus:

Eksportowanie do kodu XML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
procedure TForm1.Button1Click(Sender: TObject);
begin
 {Generowanie raportu. Raport musi zostać wygenerowany przed wyeksportem}
 frxReport1.PrepareReport();
 {Ustaw zakres stron do wyeksportowania. Domyślnie eksportowane są wszystkie strony wygenerowanego raportu}
 frxXMLExport1.PageNumbers := '2-3';
 {Ustaw, czy dokument ciągły ma być pomijany w nagłówkach i stopkach.
 Włączenie tej opcji powoduje wyłączenie tfrxxmlexport.ExportPageBreaks}
 frxXMLExport1.SuppressPageHeadersFooters := True;
 {Ustaw, czy podziały stron mają być eksportowane w arkuszu książki, tak aby podczas drukowania strony odpowiadały stronom wygenerowanego raportu}
 frxXMLExport1.ExportPageBreaks := True;
 {Zestaw WYSIWYG}
 frxXMLExport1.Wysiwyg := True;
 {Ustaw kolejność dzielenia dokumentu przy użyciu właściwości Split, która może przyjmować następujące wartości:
 ssNotSplit – tworzenie dokumentu ciągłego;
 ssRPages – każdy arkusz wygenerowanego raportu odpowiada arkuszowi książki;
 ssPrintOnPrev – każdy arkusz TfrxReportPage w szablonie raportu odpowiada arkuszowi książki (pod warunkiem, że TfrxReportPage.PrintOnParent = False);
 ssRowsCount - każdy arkusz będzie miał liczbę wierszy określoną we właściwości TfrxMLExport.RowsCount.}
 frxXMLExport1.Split := ssNotSplit;
 {Ustaw, czy plik wynikowy ma być otwarty po wyeksportowaniu}
 frxXMLExport1.OpenAfterExport := False;
 {Ustawianie, czy ma być wyświetlany postęp eksportu
 (pokaż, która strona jest obecnie eksportowana)}
 frxXMLExport1.ShowProgress := False;
 {Ustawianie, czy ma być wyświetlane okno dialogowe z ustawieniami filtru eksportu}
 frxXMLExport1.ShowDialog := False;
 {Ustaw nazwę wynikowego pliku.}
 {Należy pamiętać, że jeśli nazwa pliku nie zostanie ustawiona i wyłączysz okno dialogowe filtru eksportu,}
 {Okno dialogowe wyboru nazwy pliku będzie nadal wyświetlane}
 frxXMLExport1.FileName := 'C:\Output\test.xls';
 {Eksportowanie raportu}
 frxReport1.Export(frxXMLExport1);
end;


 Eksport do XLSX

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm1.Button2Click(Sender: TObject);
begin
 {Generowanie raportu. Raport musi zostać wygenerowany przed wyeksportem}
 frxReport1.PrepareReport();
 {Ustaw zakres stron do wyeksportowania. Domyślnie eksportowane są wszystkie strony wygenerowanego raportu}
 frxXLSXExport1.PageNumbers := '2-3';
 {Ustaw, czy dokument ciągły ma być pomijany w pustych wierszach, nagłówkach i stopkach (z pustymi liniami = fałsz).
 Z EmptyLines = True raport zostanie wyeksportowany, jak został wygenerowany. Bez pomijania pustych wierszy, nagłówków i stopek.
 Włączenie tej opcji powoduje wyłączenie TfrxXLSXExport.SuppressPageHeadersFooters i odwrotnie)}
 frxXLSXExport1.EmptyLines := True;
 {Ustaw, czy podziały stron mają być eksportowane w arkuszu książki, tak aby podczas drukowania strony odpowiadały stronom wygenerowanego raportu}
 frxXLSXExport1.ExportPageBreaks := True;
 {Zestaw WYSIWYG}
 frxXLSXExport1.Wysiwyg := True;
 {Ustaw, czy eksportować tylko zawartość pasm danych}
 frxXLSXExport1.DataOnly := False;
 {Ustaw kolejność dzielenia dokumentów:
 z opcją SingleSheet na, wszystkie strony dokumentu będą znajdować się na jednym arkuszu
 frxXLSXExport1.SingleSheet := Prawda;
 Jeśli ustawisz wartość ChunkSize, każdy arkusz będzie miał określoną liczbę wierszy.
 W takim przypadku arkusz SingleSheet powinien być ustawiony na
 frxXLSXExport1.ChunkSize := 50;
 Ustawimy kolejność domyślną, gdy każdy arkusz wygenerowanego raportu odpowiada arkuszowi książki}
 frxXLSXExport1.SingleSheet := False;
 frxXLSXExport1.ChunkSize := 0;
 {Ustaw, czy plik wynikowy ma być otwarty po wyeksportowaniu}
 frxXLSXExport1.OpenAfterExport := False;
 {Ustawianie, czy ma być wyświetlany postęp eksportu
 (pokaż, która strona jest obecnie eksportowana)}
 frxXLSXExport1.ShowProgress := False;
 {Ustawianie, czy ma być wyświetlane okno dialogowe z ustawieniami filtru eksportu}
 frxXLSXExport1.ShowDialog := False;
 {Ustaw nazwę wynikowego pliku.}
 {Należy pamiętać, że jeśli nazwa pliku nie zostanie ustawiona i wyłączysz okno dialogowe filtru eksportu,}
 {Okno dialogowe wyboru nazwy pliku będzie nadal wyświetlane}
 frxXLSXExport1.FileName := 'C:\Output\test.xlsx';
 {Eksportowanie raportu}
 frxReport1.Export(frxXLSXExport1);
end;

Teraz wiemy, jak zapisać w XLSX i XML Excel 2007 (i nowsze) z Delphi i Lazarus i w jakim formacie lepiej wybrać!

about product zamów
avatar
Michael Philippenko
VP
Fast Reports Team: Michae Philippenko - VP at Fast Reports
VCL Export Lazarus FastReport Excel Delphi XLSX

Add comment
logo
  • 800-985-8986 (English, US)
  • +4930568373928 (German)
  • +55 19 98147-8148 (Portuguese)
  • info@fast-report.com
  • 901 N Pitt Str #325 Alexandria VA 22314
  • Zamów
  • Pobierz
  • Dokumentacja
  • Opinie użytkowników
  • Jak odinstalować nasze produkty
  • FAQ
  • Tutorial Video
  • Forum
  • Support SLA
  • Articles
  • Our News
  • Prasa o nas
  • Partnerzy
  • Extended licensing
  • Kontakty

© 1998-2023 by Fast Reports Inc.

  • Poufność

Trustpilot