
Delphi - zapis do excelu xlsx
Zdravím.
Neporadíl by někdo jak něco zapsat do excel tabulky v počitači, kde excel není nainstalovan?
Jsem našel toto https://delphi.cz/post/Native-Export-XLS-bez-excel-Delphi.aspx
Je to 8 roku stare a asi to xlsx umět nebude.
Dik.
Tak jsem zkusil ten adresař DX10 a vypadalo to že se povedlo.
Mam to v C:\Users\Public\Delphi\AlphaControls-12.14-Stable
Do Library Path C:\Users\Public\Delphi\AlphaControls-12.14-Stable
Options -> Library v Selected platform mam 32 bit windows, tak jsem tedy zvolil adresř DX10.
Compile ok.
install ok.
Nový projekt - 32 bit windows - a je to tam.
Hups na Form sSkinManager1.
sSkinManager1 - Object Inspektor - SkinDirectory - C:\Users\Public\Delphi\AlphaControls-12.14-Stable\Skins
sSkinManager1 - Object Inspektor - SkinName - vyberu skin
Run
C:\Users\Public\Delphi\AlphaControls-12.14-Stable -V -VN -NBC:\Users\Public\Documents\Embarcadero\Studio\17.0\Dcp
-NHC:\Users\Public\Documents\Embarcadero\Studio\17.0\hpp\Win32 -NO.\Win32\Debug Project1.dpr
[dcc32 Fatal Error] Unit1.pas(7): F2613 Unit 'sSkinManager' not found.
Failed
Musis do Library Path dat vsechny slozky se zdroji. Pokud je unita sSkinManager nekde jinde, tak tam tu slozku pridej
Tak se pobedlo. U te komponenty je i instal text a vubec tam nepišou že se musí ještě skompilovat AlphaDB
Ale dnes jsem u kamoše a zjistil jsem že s OExport asi udělal někde kopanec.
Ono to funguje ale při spuštění programu vždy vyskoči toto.
http://img24.cz/images/77453253871827434785.png
Na kluug.net v sekcí download je postu.
1.) Add OExport path to your library - please mind your Delphi version!
For Delphi XE4 32bit, the path is:
{INSTALLATION DIRECTORY}\OExport\DelphiXE4\Win32\
d:\OExport\OExport\Delphi10\Win32\
2.) Add OXml path to your library.
The path is: {INSTALLATION DIRECTORY}\OXml\utils\
d:\OExport\OXml-trial\units\
Co je špatně?
Nevím, já mám plnou verzi.
Nezkoušel jsi se zeptat přímo autora? Ońdřej je Čech.
Stahnul jsem si OExport. Podle mne jsou tam vsechny unity, ktere potrebujes i z OXML. Takze odeber z library path vse, co jsi daval do samostatne stazene OXML. Cestu do OXML\Utils taky nepotrebujes, protože všechny unity jsou zkompilovane ve složce Win32
Ano, ono to jde spustit, ale ta placka co vyskočí o tom demu je dost nepřijemna
Kamoš mu psal e-mail.
nikde jste chybu neudělali. Je to součástí demoverze.
A? Když ti to vadí, tak si kup plnou verzi nebo naprogramuj svoji vlastní komponentu.
Zkoušel jste někdy timto zpusobem něco upravit?
Přejmenují na zip a rozbalim do složky, vubec do toho nevlezu.
Zabalim to zpatky do zip a přejmenují na puvodní Sešit1.xlsx
Excel to pozna a neotevře
Zkoušel.
Tímto způsobem jsem odemykal zamknuté (ne zašifrované) Excely pro úpravy - podstrčil jsem do ZIP jiný soubor.
Zkoušel jsem to teď. Pokud soubor vytáhnu, nahradím a vrátím zpět (necham zip, jak je), tak to projde.
Pokud ZIP rozbalim a pak znovu zabalim, pak to neprojde - neznám parametry. To znamená, že musíš ZIP zabalit se stejnými parametry (typ komprese atd.) jako původní
P.S.
Tak se mi podařilo zavalit i rozbaleny XLSX
Použil jsem 7Zip, jako metoda ZIP, fastest, deflate
Jen nesmíš do archivu zabalit i nadřízenou složku
Pokud si s tím chceš hrát, tak řetězce najdeš v souboru:
\xl\sharedStrings.xml
a data pak v souboru (zalezi, na jménu listu):
\xl\worksheets\sheets1.xml
Jsem zkusil dat na bunky A1,A2,A3,A4 format čas 13:30 a do každe vložil 13:32
xl\worksheets\sheet1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac xr xr2 xr3" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac" xmlns:xr="http://schemas.microsoft.com/office/spreadsheetml/2014/revision" xmlns:xr2="http://schemas.microsoft.com/office/spreadsheetml/2015/revision2" xmlns:xr3="http://schemas.microsoft.com/office/spreadsheetml/2016/revision3" xr:uid="{A4B63BA3-17F1-49FE-BE14-4E0312EA7073}"><dimension ref="A1:B2"/><sheetViews><sheetView tabSelected="1" workbookViewId="0"><selection activeCell="B2" sqref="B2"/></sheetView></sheetViews><sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/><sheetData><row r="1" spans="1:2" x14ac:dyDescent="0.25"><c r="A1" s="1"><v>0.56388888888888888</v></c><c r="B1" s="1"><v>0.56388888888888888</v></c></row><row r="2" spans="1:2" x14ac:dyDescent="0.25"><c r="A2" s="1"><v>0.56388888888888888</v></c><c r="B2" s="1"><v>0.56388888888888888</v></c></row></sheetData><pageMargins left="0.7" right="0.7" top="0.78740157499999996" bottom="0.78740157499999996" header="0.3" footer="0.3"/></worksheet>
Nějake čudne to je, nikde těch 13:32 nevidím
Ale vidíš, jenže v jiné podobě: 0.56388888888888888.
Formát data a času (hh:mm) je pouze vnější reprezentace. Schválně - zkopíruj si to číslo do buňky a změň její formát na hh:mm - už chápeš? Prostuduj si třeba tohle.
Chce to číst odpovědi a pokud je i čteš, tak si je pamatovat.
Psal jsem, že datum a čas je v Excelu zapsán číslem, ne jako řetězec.
No a když mám v delphi čas jeko řetšzec, jak ho převedu na to číslo?
13:32:00 = 0.56388888888888888
Nemáš chuť sa trošinku zdokonaliť vo svojich vedomostiach aj sám?
http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Date_and_Time_Support
Datum je ulozen jako číslo před desetinnou čárkou a začíná datem 0.1.1900. Takže 1.1.1900 = 1
Čas je uložen jako desetinná část čísla a znamená část dne (24h). Takže 6:00 = 0.25
Protože Delphi používá stejný systém, neměl bys mít problém to jednoduše převést. V Delphi je TDateTime typu double, takže stačí zapsat číslo, jak máš:
ExcelCislo := Double(DelphiDatum);