Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: registrovany123 20. 11. 2022, 12:05:51
-
Zdravim,
dotaz, pouzivam Excel uz nejaky ten patek, ale az ted jsem se dostal k tomu, ze potrebuju pridat programovy kod. A nejsem teda moc z Visual Basicu nadsen - jednak s tim editorem se spatne pracuje a druhak ted se divam, ze na zmeny aplikovane makry nefunguje tlacitko zpet. Nehlede na jazyk samotny:
Sub RoundToZero1()
For Counter = 1 To 20
Set curCell = Worksheets("Sheet1").Cells(Counter, 3)
If Abs(curCell.Value) < 0.01 Then curCell.Value = 0
Next Counter
End Sub
Ach jo...
Neni nejaka alternativa za Excel, a ted nemyslim OpenOffice - to bych si asi moc nepomohl. Co treba ten od Google, tam se da programovat v Javascriptu, ne? Da se to pouzivat?
-
Zůstaň u VBA. Alternativy jsou pracnější a snad i horší. Teoreticky se můžeš různě připojit pomocí .NETu
ale pro to co koukám, že potřebuješ, bude VBA nejjednodušší cesta. Alternativně ještě JS(TS), ale to bude zatím ještě asi horší alternativa.
https://learn.microsoft.com/en-us/javascript/api/office-scripts/excelscript?view=office-scripts
Já tedy bych Excel používal co nejméně a co nejvíce výpočtů mimo. Snad už vyrobit nějaké to webové klikátko je lehčí. Pro exploraci a zpracování dat je tu teď Power Query + funkcionální M language. Udržovat Excel je většinou peklo i když jako koncept komputačního grafu, je to zajímavé.
-
https://www.pyxll.com/
-
Proč myslíš, že by sis s LibreOffice Calc nepomohl a "s tím od Google" ano?
-
https://www.pyxll.com/
Licence za 600,- Kc / mesic pro individual usera? To fakt ne...
-
Co třeba vykašlat se na Excel a udělat to v R?
-
https://www.knime.com/ načítání větších dat je násobně rychlejší než v excelu, skripty v Python, R a SQL, JavaScript pro vizualizaci
-
Můžeš C# jak už kolega výše zmínil. Hledej VSTO. Ale je to docela opruz, protože to je jen wrapper nad COM objekty, takže třeba Watch window nefunguje při debugování a asi se toho nejde víc.
-
https://www.pyxll.com/
https://www.xlwings.org/
-
Můžeš C# jak už kolega výše zmínil. Hledej VSTO. Ale je to docela opruz, protože to je jen wrapper nad COM objekty, takže třeba Watch window nefunguje při debugování a asi se toho nejde víc.
Presne tak. Po C# excel kod je potreba napsad kod nejdriv v vba, odzkouset a potom ho prepsat do C# (volani COM objektu je vicemene stejne jako ve vba). Vyplati se to jen, pokud je komunikace s excelem podruzna vec a cela hlavni logika je napsana v c#. Treba na export dat do excelu. Pripadne jako jednotne klikatko spoustejici ruzna mala excel makra.
-
Jako pokud bych měl radit radikálně, jako někteří kolegové, tak to udělejte mimo Excel: R, Julia Python.
Často když někdo vidí až funkční věc mimo Excel, ukáže se, že ani ten Excel nechtěl.
Jinak všechny Python knihovny co tu jsou uvedeny, jsou jen jakási náplast pro korporát, ale nevím jak užitečně.
Pokud už můžu použít Python, pak nemám moc potřebu se vracet do Excelu ne?
-
Excel nejsou jen ta makra.
Výsledky maker v něm můžu bez velkého úsilí dál zpracovávat vestavěnými funkcemi a zobrazovat a tisknout v hezky formátovaných tabulkách a předpřipravených grafech.
-
to udělejte mimo Excel: R, Julia Python.
Souhlas.
-
S vaším dotazem je problém ten, že se ptáte na webu, kde kdyby se sekretářka zeptala, v čem napsat průvodní dopis k reklamaci mixéru, dostanete se vždy k LaTeXu. (Ostatně já v něm průvodní dopisy k reklamacím mixérů běžně píšu, ale asi to není přesně ta odpověď, co by ona chtěla slyšet.)
-
Na VBA neni nic zle, je to jednoduchy jazyk a je k tomu mnozstvo informacii a volne dostupneho kodu.
Niekde som cital, ze v LibreOffice Calcu sa da pouzivat na skriptovanie aj Python, ale ked som podla navodu hladal na mojom Linux PC, tak som tam taku moznost vobec nenasiel, ale len LibreOffice Basic.
-
Niekde som cital, ze v LibreOffice Calcu sa da pouzivat na skriptovanie aj Python, ale ked som podla navodu hladal na mojom Linux PC, tak som tam taku moznost vobec nenasiel, ale len LibreOffice Basic.
Pretoze Python v LO vyzaduje nakonfigurovat:
https://help.libreoffice.org/latest/lo/text/sbasic/python/python_ide.html
https://wiki.documentfoundation.org/Macros/Python_Design_Guide
-
Mimo téma, ale pro zajímavost: Excel má konečně Lambda funkce a pracoval na tom S. P. Jones
https://www.youtube.com/watch?v=r9kf9an-zPY&ab_channel=TheArchimedeans
-
Pretoze Python v LO vyzaduje nakonfigurovat:
+1
ano, zistil som ze si musim minimalne doinstalovat este toto:
sudo apt install libreoffice-script-provider-python
-
Nevím, jestli by to pro vás bylo řešení. Ale existuje možnost zapisovat do excelu v pythonu a ostatních jazycích. Takže, co můžete udělat je, že si naklikáte celý excel ručně s tím, že se zdrojové hodnoty tahají ze skrytého listu. Nad tím uděláte všechny ty hezký věci jako grafy, zvýraznění a tak.
Pak už jenom váš program zkopíruje zdrojový excel pod novým jménem. Naplní do listu hodnoty z výstupu. Uloží a nakopíruje do výstupní složky.
-
Vzhladom na to ze otazka je o exceli, tak predpokladam windows.
Problem windowsu je to ze by default nema nainstalovany python, R, ...
Cize ak ten excel bude pouzivat veci ktore nie su nainstalovane na PC, tak na pc u niekoho ineho (non dev osoba, napr sekretarka, manager, zakaznik) to proste chcipne. A asi nechcete niekomu posielat mail stylom:
"...v prilohe najdete excel subor. Pre jeho spravne fungovanie prosim este nainstalujte na svoj pc python podla navodu na prilozenom linku.
S pozdravom,
UrciteNieVirus"
Co si myslite ze sa s takym mailom stane?
Cize jedina pouzitelna nahrada je bud pouzit excel, alebo pouzit nieco mimo excel co je ale zarucene nainstalovane na PC -> napr nieco co bezi nad .net frameworkom, alebo sa spolahnut ze je tam nejaka java (vacsinou na pracovnych pc bezi nieco na jave, cize tam je).
Problem tichto externich rieseni je niekedy este aj vacsia krkolomnost ako (excel) nativne riesenie. Plus vykonova penalizacia za prenasanie dat medzi x separatnymi prostrediami, co vzhladom na jednoduchost ulohy (zaokruhlovanie hodnot) je zbytocnost.
-
to kanoe22
No hlavně tazatel neupřesnil, co přesně tím VB chce vlastně dosáhnout.
Například můj postup odchodu od práce v excelu byl nejprve Matlab, nedostatek licencí mě donutil to přepsat do R a vyšší komplexita plus absence jednoho api k proprietární knihovně pak vyústil v Python.
A v podstatě výsledkem je stejná sada grafů, dokonce jsem si i natípal barevné schéma, aby to mgmt nedráždilo...
-
...
Cize jedina pouzitelna nahrada je bud pouzit excel, alebo pouzit nieco mimo excel co je ale zarucene nainstalovane na PC -> napr nieco co bezi nad .net frameworkom ...
...
ano z toho dovodu pouzivam este stale VBscript, zatial je vsade (neviem sice ci aj na W11)
Skusal som aj powershell, ale na programovanie mi to pripada horsie ako VBscript a hlavne tam byvaju komplikacie so spustenim: treba bypasovat ExecutionPolicy a teda ku skriptu prikladat aj prikaz ako ho spustit.
-
Můžeš C# jak už kolega výše zmínil. Hledej VSTO. Ale je to docela opruz, protože to je jen wrapper nad COM objekty, takže třeba Watch window nefunguje při debugování a asi se toho nejde víc.
Presne tak. Po C# excel kod je potreba napsad kod nejdriv v vba, odzkouset a potom ho prepsat do C# (volani COM objektu je vicemene stejne jako ve vba). Vyplati se to jen, pokud je komunikace s excelem podruzna vec a cela hlavni logika je napsana v c#. Treba na export dat do excelu. Pripadne jako jednotne klikatko spoustejici ruzna mala excel makra.
Jak tohle muze nekdo napsat. Je nesmysl nejdriv psat vba a pak z toho delat c#. Rovnou pises c# neni na tom nic zazracneho
Pokud ti nevoni vba tak to vsechno pis v C# nebo VB. Udelej si bud konzolovku nebo rovnou jednoduchy winform a pokud chces byt dobrodruznejsi tak wpf appku.
Inspiruj se treba tim ze si makro nahrajes v excelu, tim ze si to naklikas ruco, aby si mel predstavu jake objekty pouzivas a pak si z toho postav vlastni logiku.
Jen nepouzivej v zadnem pripade to co ti nahraje makro. Dela tam spoustu veci pres selecty a to je naprosto zbytecny a super pomale. Navic se to muze chovat nepredvidatelne.
Postup je snadny
pozijes visual studio community
zalozis treba winform na frameworku 4.8
Nareferencujes si excel knihovnu
Vytvoris nebo chytnes com object excelu (ve VB je to GetObject(Class:=“Excel.Application”))
A stav svoji logiku
Pak to dej na tlacitko
Vyhody - mas kvalitni debug, naseptavani a prace s objekty excelu pokud nejsi lem… a nepouzivas late binding, hezky barevne odliseni v kodu a mnoho dalsich vyhod moderniho ide oproti vba ide.
Samozrejme si to vsechno muzes vymyslet do dll kterou volas z vba, ale na to uz potrebujes lepsi schopnosti.
Jen tak mimochodem i v tom vba ide se daji psat komplexni procesy na 20 000 radku a neni to tragedie.
Vyhody oproti manipulaci pres com je asi v deseti nasobne rychlosti operaci a to je nekdy pokud mas nekolika minutove operace vyhra oproti programu co excel ovlada pres com.
Muzes to i kombit ze c# vygeneruje vbascript a ten spustis z excelu a taky to pekne frci 🙂
Tech cest je spousty …
-
takze nakonec je nejjednodussi psat visual basic primo v excelu :-)
-
takze nakonec je nejjednodussi psat visual basic primo v excelu :-)
Jen si prosim nezamenujte vb a vba. Je to velky rozdil.
Vba co je v excelu a vsude jinde v integrovanych ide je zalozeny na verzi 7.1
Visual basic ve visual studiu je verze 16.9
V podstate se da rict ze co muzu v dnesnim c# muzu i v posledni verzi vb.
Pouzivat vba v excelu je cestovani v case do roku 2003
-
Pokud je třeba opravdu programovat (např GUI klikátka, in place modifikace atp), tak bych se tomu asi vyhnul a udělal normální program mimo excel.
Větší věci (s pár jsem se uživatelsky setkal) mají tendenci se rozbíjet přo aktualizacích.
Pokud by stačila transformace - to co je v prvním příspěvku (nahradit hodnoty ve sloupci nulou pokud absolutní hodnota je menší než 0.1) by se dalo udělat v powerquery který je součástí excelu už pár let.
Není to ale vb/vba programování, spíš je to trochu podobné sql dotazování - místo modifikace tabulky v místě, jde vlastně o dotaz který je směrován do své vlastní tabulky, kterou ale lze aktualizovat, podobně jako kontingenční tabulka.
A powerquery toho umí ještě mnohem víc (externí soubory/databáze spojování tabulek,....)