loading...
Předmět Autor Datum
Je rozdíl, jestli chceš sešit při zápisu vytvořit nebo jej otevřít a něco modifikovat. Druhý způsob…
Jan Fiala 27.01.2019 20:23
Jan Fiala
Mam xlsx soubor a v něm barevnou tabulku - jen 6 sloupcu a 5 řadku a do těch bych jen potřeboval pos…
Tony7 27.01.2019 20:30
Tony7
Je úplně jedno, jak je tabulka velká. Pokud potřebuješ otevírat existující excel a do něj zapisovat,…
Jan Fiala 27.01.2019 20:37
Jan Fiala
A co toto? http://www.kluug.net/xlsx-ods-delphi.php
Tony7 27.01.2019 21:18
Tony7
Ak nemáš problém s licenciou a vo free verzii Ti stačí: Only the first worksheet will be exported o…
pme 27.01.2019 21:26
pme
To mi uplně stačí. Jsem zkusil prozbalit ten xlsx a je to nějake čudne. V souboru sharedStrings.xml…
Tony7 28.01.2019 00:22
Tony7
Časy a datum je ukládaný ve formě čísla. Musíš si v tom XML najít podle adresy příslušné buňky. Nebo…
Jan Fiala 28.01.2019 06:31
Jan Fiala
A co toto? http://www.kluug.net/xlsx-ods-delphi.php To je odkaz z mé první odpovědi. Tohle používám…
Jan Fiala 28.01.2019 06:34
Jan Fiala
Tak jsem zkusil ten OExport a s mou angličtinou nepochopil jak na to. http://www.kluug.net/xlsx-ods-…
Tony7 28.01.2019 09:13
Tony7
Ano, pokud něco funguje přes Ole Automation, pak to používá OLE objekt Excelu. Co se týká OExport,…
Jan Fiala 28.01.2019 10:01
Jan Fiala
Příklad použití OExport var MyFileName:OleVariant; XLSBook: TOExport; XLSSheet: TExportWorkSheet; b…
Jan Fiala 28.01.2019 10:11
Jan Fiala
Co se týká OExport, potřebuješ obě knihovny - OXML a OExport. Stáhni si obě a zkus to znovu. Děkují…
Tony7 28.01.2019 12:13
Tony7
Stáhni si i OXML. K exportu potřebuješ OXML i OExport
Jan Fiala 28.01.2019 13:51
Jan Fiala
Děkují mooooc, funguje :-D Moh bych ještě jeden dotaz mimo téma? Pomaham s tým kamošoví, mi by asi…
Tony7 29.01.2019 11:30
Tony7
Verze šly postupně: Seattle (10), Berlin (10.1), Tokyo (10.2), RIO (10.3) Delphi 10 v zakladu gener…
Jan Fiala 29.01.2019 13:46
Jan Fiala
Co konkrétně ti nejde nainstalovat? Co to hlásí? Děkují moc, zitra rano se ozvu. Pracují - odpoledn…
Tony7 29.01.2019 14:18
Tony7
Tak jsem zkusil ten adresař DX10 a vypadalo to že se povedlo. Mam to v C:\Users\Public\Delphi\AlphaC…
Tony7 30.01.2019 07:59
Tony7
Musis do Library Path dat vsechny slozky se zdroji. Pokud je unita sSkinManager nekde jinde, tak tam…
Jan Fiala 30.01.2019 14:01
Jan Fiala
Tak se pobedlo. U te komponenty je i instal text a vubec tam nepišou že se musí ještě skompilovat Al…
Tony7 31.01.2019 11:15
Tony7
Nevím, já mám plnou verzi. Nezkoušel jsi se zeptat přímo autora? Ońdřej je Čech. Stahnul jsem si OE…
Jan Fiala 31.01.2019 11:17
Jan Fiala
Ano, ono to jde spustit, ale ta placka co vyskočí o tom demu je dost nepřijemna :.( Kamoš mu psal e-…
Tony7 31.01.2019 18:53
Tony7
nikde jste chybu neudělali. Je to součástí demoverze. 3-[
Tony7 01.02.2019 09:35
Tony7
A? Když ti to vadí, tak si kup plnou verzi nebo naprogramuj svoji vlastní komponentu.
host 01.02.2019 09:59
host
Jan Fiala Zkus si u XLSX změnit příponu na ZIP a kouknout se dovnitř. Zkoušel jste někdy timto zpus…
Tony7 01.02.2019 10:28
Tony7
Zkoušel. Tímto způsobem jsem odemykal zamknuté (ne zašifrované) Excely pro úpravy - podstrčil jsem d…
Jan Fiala 01.02.2019 11:19
Jan Fiala
Pokud si s tím chceš hrát, tak řetězce najdeš v souboru: \xl\sharedStrings.xml a data pak v souboru…
Jan Fiala 01.02.2019 11:57
Jan Fiala
Jsem zkusil dat na bunky A1,A2,A3,A4 format čas 13:30 a do každe vložil 13:32 xl\worksheets\sheet1.x…
Tony7 03.02.2019 09:34
Tony7
Ale vidíš, jenže v jiné podobě: 0.56388888888888888. Formát data a času (hh:mm) je pouze vnější repr…
Zdenál 03.02.2019 10:42
Zdenál
Chce to číst odpovědi a pokud je i čteš, tak si je pamatovat. Psal jsem, že datum a čas je v Excelu…
Jan Fiala 03.02.2019 10:53
Jan Fiala
No a když mám v delphi čas jeko řetšzec, jak ho převedu na to číslo? 13:32:00 = 0.56388888888888888
Tony7 03.02.2019 14:10
Tony7
Nemáš chuť sa trošinku zdokonaliť vo svojich vedomostiach aj sám? http://docwiki.embarcadero.com/RA…
pme 03.02.2019 14:34
pme
Datum je ulozen jako číslo před desetinnou čárkou a začíná datem 0.1.1900. Takže 1.1.1900 = 1 Čas je… poslední
Jan Fiala 03.02.2019 15:30
Jan Fiala

Je rozdíl, jestli chceš sešit při zápisu vytvořit nebo jej otevřít a něco modifikovat. Druhý způsob je mnohem náročnější.
Na zápis můžeš klidně použít formát CSV - je to texťák a Excel jej bez problémů otevře.

Jinak pokud chceš vytvářet přímo XLSX, pak máš víc možností. Můžeš použít databázový přístup a ADO, pokud jsou data ve formě tabulky (hlavička a data).
Pokud jde o čtení a zapisování do obecných sešitů, pak bych doporučil komerční OExport - tohle používáme v práci a funguje to dobře a rychle.
tady jsem ti našel i free knihovnu, která by to mohla zvládnout:
http://avemey.com/zexmlss/index.php

Je úplně jedno, jak je tabulka velká. Pokud potřebuješ otevírat existující excel a do něj zapisovat, potřebuješ už něco robustnějšího. Těch formátů a věcí, které v rámci XLSX mohou nastat je spousta. není to jeden soubor, je to zazipovaný balík různých souborů, kde jeden obsahuje formátování, druhý data v XML atd...
Zkus si u XLSX změnit příponu na ZIP a kouknout se dovnitř.

Teoreticky, pokud potřebuješ jen zapsat data do buňek, můžeš rozzipovat soubor, zvít si z něj XML s daty, tam zapsat čísla, která potřebuješ a zase to zabalit.

To mi uplně stačí.
Jsem zkusil prozbalit ten xlsx a je to nějake čudne.
V souboru sharedStrings.xml jsou všechný řetězce.
Když však mam vedle řetězcu vložene časy třeba 13:20:11 tak to nikde neni.
Kdyby to bylo vložene jako řetězec, ta by to tam bylo ale ono to je jako format bunky - čas:-(

Zkusím kouknout na ten OExport

Tak jsem zkusil ten OExport a s mou angličtinou nepochopil jak na to.
http://www.kluug.net/xlsx-ods-delphi.php
Installation.
1 je jasna Options... -> Library -> Library Path
2 Add OXml path to your library. The path is: {INSTALLATION DIRECTORY}\OXml\utils\
Žadný adresař \OXml\utils\ jsem ve staženem baliku nenašel.

I tak mi ale ty dema fungují, ale vždý při spuštění mi vyskočí hlaška - okno s infem, že to je demo.
Jak na to aby to bylo bez te hlašky?

Ale našel jsem toto http://www.scip.be/index.php?Page=ComponentsExcelExport&Lang=EN
freeware for non-commercial use
Ale
his ExcelExport component uses the Office server components from the Borland/CodeGear/Embarcadero COM type library to implement OLE automation.
Pochopil jsem to spravně, že v počitači musí být nainstalovaný excel?

Příklad použití OExport

var
  MyFileName:OleVariant;
  XLSBook: TOExport;
  XLSSheet: TExportWorkSheet;
begin
  XLSBook := TOExport.Create;
  try
    MyFileName:='tady si vyber soubor. Format se voli automaticky podle pripony';
    XLSBook.LoadFromFile(MyFileName);
    // vyberu první list
    XLSSheet := XLSBook.WorkSheets[0];
    // zapisu neco do bunky. Tahle adresace ti umozni lip pristupovat v cyklu
    XLSSheet.Rows[3].Cells[5].SqlText := DateTimeToStr(Now());
    // a vysledek ulozim
    XLSBook.SaveToFile(MyFileName);
  finally
    XLSBook.Free;
  end;
end;

Co se týká OExport, potřebuješ obě knihovny - OXML a OExport. Stáhni si obě a zkus to znovu.

Děkují moc za ochotu, ale jsem nějak natvrdlej ;-)
Stahují soubor oexport-free-2-29--2019-01-07.zip

Kde stahnu ty 2 knihovny?
Uplně dole je Compiled applications without source code a soubor inspectxmlzip--2012-03-16.zip
V něm však je exe nspectXMLZIP.exe

Děkují mooooc, funguje :-D

Moh bych ještě jeden dotaz mimo téma?
Pomaham s tým kamošoví, mi by asi na mem notasu delphi nestihalo, jsem rad že to zvlada lazarus.
Když ma v delphi info Embarcadero® Delphi 10 Seattle Version, to je DX10 ?

Ono se možna nejedna o warez.
Kamošuv tatik ma firmu a tam měli programatora, který nedavno odešel.
V počitači jsme našli par komponet.
Nikdo netuší, kde je sehnal a jestli nejsou kupovane na tatikovou firmu, když je tam nechal, nebo je někde nelegalně sehnal.
Je tam i AlphaControls 12.14 Stable a nějak se mu to nedaří nainstalovat.
http://img24.cz/images/32493360928033838836.png

Podle mně by to mělo být DX10_x64, jelikož ma delphi naintalovane na win 10 64 bit?

Verze šly postupně:
Seattle (10), Berlin (10.1), Tokyo (10.2), RIO (10.3)

Delphi 10 v zakladu generuje 32b aplikace, 64b compiler je volitelný při instalaci. Stejně tak jako MAC, Adnroid atd.
A dokonce ani 64b verzi nemusíš kompilovat na 64b verzi Windows, ale můžeš i na 32b. Jen to pak nespustíš.

Ty složky jsou tam proto, protože uvádíš cestu ke zdrojům (library path) pro 32b a 64b verzi zvlášť, pokud se liší - typicky, pokud máš komponenty bez plných zdrojů a některé věci jsou předkompilované

Pro Seatle bych bral složky DX10 a DX10_64

Co konkrétně ti nejde nainstalovat? Co to hlásí?
Obvykle je třeba přidat cestu ke zdrojům do LibraryPath pro příslušný kompiler
Pak se otevře projekt a zkompilují se balíčky. Cesta k balíčkům (BPL) pak musí být v Path proměnné počítače. Balíčky jsou runtine a designtime (ty obsahují vizuální komponenty)

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

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

Jan Fiala
Zkus si u XLSX změnit příponu na ZIP a kouknout se dovnitř.

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 :-D

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

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 :-(

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

Zpět do poradny Odpovědět na původní otázku Nahoru

loading...