
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.
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);