Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Otevření různého *txt ve Wordu, následné (stejné) úpravy makry

Mám *txt soubor s "nechtěnými znaky" (příklad v příloze). Jedná se o temp. výstup účetního programu při tisku na tiskárnu. Soubor se vždy jmenuje #LPT1.txt.
Soubor chci upravit do bezchybně čitelné podoby a uložit do docx/pdf

Teď to dělám tak, že #LPT1.txt otevřu ve Wordu 2007, přitom po otevření vybírám kódování:

[85021-prevod-png]

Následně provádím úpravy:
- nastavím okraje stránky
- nastavím velikost písma (7)
- odstraním "nechtěné" řetězce "(500X" a "(502X" (funkcí Najít a nahradit)
a uložím.

Jak tohle zautomatizovat či si to alespoň usnadnit? Mám jakési povědomí (tedy vím jen to, že to existuje) o šabloně normal.dot, to je asi ta jediná, kterou - bez změny - používám. Moje představa je, že bych určité *txt (tedy ne automaticky každé!) nějak načetl a ve Wordu bych měl k dispozici makro, které by veškeré úpravy - případně i další - provedlo. Napsat si to makro asi nebude problém, předpokládám, že je to obdobné jako v Excelu. Buď tlačítko, nebo ještě jednodušeji auto_open makro.

Jak to výběrové otevření určitého *txt, tedy konkrétně #LPT1.txt, ve Wordu zabezpečit?
Díky za tipy a nakopnutí správným směrem.

Ulázka takového #LPT1.txt souboru: https://pc.poradna.net/files/85020-lpt1-txt

Předmět Autor Datum
Ale áno. Zapni nahrávanie makra, sprav potrebné kroky, a potom už len doladiť vysledok. Ak to poznáš…
pozorovateľ 19.02.2019 19:32
pozorovateľ
Ale áno. Zapni nahrávanie makra, sprav potrebné kroky, a potom už len doladiť vysledok. Ak to poznáš…
L-Core 19.02.2019 19:49
L-Core
makro predsa môžeš mať v normal.dot alebo prípadne aj v akomkoľvek inom doc súbore
deadhead 19.02.2019 19:55
deadhead
Já nevím, zda si mám ten normal.dot upravovat, abych si to nějak nerozdrbal.. Když v tom souboru vy…
L-Core 19.02.2019 20:09
L-Core
Vytvor si nový súbor docm, do ktorého si nahráš a upravíš makro. Týmto súborom potom budeš otvárať t…
robert13 20.02.2019 14:08
robert13
Nerozumím akorát tomuto: Týmto súborom potom budeš otvárať tvoje súbory txt Teď to dělám tak, že n…
L-Core 20.02.2019 14:45
L-Core
Vo Worde si riadne zvoľ Súbor - Otvoriť a v dialógovom okne si zvoľ typ súboru "všetky súbory (*.*)"…
robert13 20.02.2019 18:34
robert13
Očividne si s tým ešte nerobil, keď sa pýtaš také otázky. Vytvoríš si čistý docx, v ňom zaznamenáš m…
pozorovateľ 19.02.2019 20:23
pozorovateľ
A následne budeš pomocou volania onoho docx a príslušného makra narábať s tvojim TXT podľa ľubovôle.…
L-Core 19.02.2019 21:11
L-Core
musí to jít: soubory docx/odt,pdf mají známou strukturu: pdf: existuje něco jako latex, případně to…
penoncy 19.02.2019 21:33
penoncy
Nevím, s Wordem nedělám, ale proč neupravit nejdřív ten txt a teprve pak ho eventuálně importovat do…
gilhad 19.02.2019 21:41
gilhad
hm.. proč to řešíš ve Wordu, když to můžeš skriptově prohnat sed-em? Sed existuje i pro windows...…
touchwood 20.02.2019 15:57
touchwood
Protože je to pak pohodlné pro zálohování (doc) či tisk. Když si ten můj vzorový soubor otevřeš v te…
L-Core 20.02.2019 16:19
L-Core
Tak aby som si to ešte raz upresnil, chceš toto: 1. otvoriť vo Worde texťák, 2. pustiť naňho makro,…
deadhead 20.02.2019 17:04
deadhead
Já bych to načítal jako text, nedával bych to do převodu. Prostě normálně OPEN 'soubor.txt' AS #1 FO…
ml1 20.02.2019 17:55
ml1
Ahoj chlape, tak jak si na tom? Něco sem Ti splácal, převážná část je nahraná záznamníkem, tak se to…
Siki83 22.02.2019 20:34
Siki83
Ahoj, díky, mrknu na to pořádně po neděli (DPH..), určitě kvůli rozšíření obzorů. Nicméně mezitím,…
L-Core 23.02.2019 09:02
L-Core
Ahoj, díky, mrknu na to pořádně po neděli (DPH..), určitě kvůli rozšíření obzorů. Tak to tě bohužel…
Siki83 23.02.2019 20:15
Siki83
Ahoj. Kdybys chtěl, udělal jsem jednoduchou konzolovou apku pro Win, pomocí které to můžeš jednoduše… poslední
Flash_Gordon 23.02.2019 21:26
Flash_Gordon
Tak vyřešeno k mé maximální spokojenosti. Udělal jsem si baťák na otevření konkrétního souboru ve Wo…
L-Core 23.02.2019 20:48
L-Core

Ale áno. Zapni nahrávanie makra, sprav potrebné kroky, a potom už len doladiť vysledok. Ak to poznáš v Exceli, tak nebude problém.

A ešte teda dodatok, makro môžeš volať priamo z wordu, môžeš ho ale volať aj parametrom priamo z cmd, alebo si spraviť jednoduchý .vbs skript, atď.. microsoft v tomto smere ponúka veľa možností.

https://social.msdn.microsoft.com/Forums/en-US/a391eccc-b08f-442f-9724-2e3313fedf87/invoking-word-macro-with-arguments-from-command-line

Ale áno. Zapni nahrávanie makra, sprav potrebné kroky, a potom už len doladiť vysledok. Ak to poznáš v Exceli, tak nebude problém.

Jak jsem psal, s tím makrem problém nemám. Problém mám s tím, že žádný doc/docx soubor, kde bych to makro měl uložené, nemám. Mám jen txt soubor, ten otevírám ve Wordu, předtím musím potvrdit kódování v unicode. Jak tedy z takto otevřeného txt ve Wordu zavolat makro?

Vytvor si nový súbor docm, do ktorého si nahráš a upravíš makro.
Týmto súborom potom budeš otvárať tvoje súbory txt a vykonávať na nich zmeny makrom.

Pri zapnutí záznamu makra si:
- vyber nejakú klávesovú skratku, ktorou budeš makro spúšťať
- prikážeš, že makro bude uložené v tomto súbore a nie v šablone
(viď obrázok postupu v prílohe)

Po tom, čo si nahráš a upravíš makro (môžeš v ňom zároveň zapracovať export upraveného txt do pdf a následne i vymazanie obsahu ako prípravu pre otvorenie ďalšieho txt súboru) si súbor uložíš a budeš ho používať na načítavanie txt súborov, stlačením priradenej kombinácie kláves vykonáš úpravy, exportuješ do pdf, vymažeš obsah...

Nerozumím akorát tomuto:

Týmto súborom potom budeš otvárať tvoje súbory txt

Teď to dělám tak, že na *txt soubor kliknu pravou myší a vyberu "Otevřít v MS Word" (následně vyberu kódování, viz výše). Já prostě v tom Wordu nic jako "importovat txt" nevidím; netuším tedy, jak ten *txt dostat do připraveného *docm.

Nebo to tam musím nakopírovat přes schránku? To by nebylo nic moc, ten *txt může mít i několik tisíc stránek...

Očividne si s tým ešte nerobil, keď sa pýtaš také otázky.
Vytvoríš si čistý docx, v ňom zaznamenáš makro s ktorým nemáš problém. Toto makro zostane uložené v tvojom docx. A následne budeš pomocou volania onoho docx a príslušného makra narábať s tvojim TXT podľa ľubovôle. Spracuješ text, vyrobíš si z neho doc, pdf, vytlačíš, čo len chceš.. všetko podľa tvojho algoritmu.
Póňal?

A následne budeš pomocou volania onoho docx a príslušného makra narábať s tvojim TXT podľa ľubovôle.

Nerozumím, nevím jak "volat docx a makra", když chci otevřít prostý txt. Možná si stojím na vedení, přešlápnutí nepomohlo :-/

Na tom obrázku výše: nedokážu donutit Word, aby ve "Všechny aktivní dokumenty a šablony" zobrazil ten otevřený docm s makrem, které by pak mohlo být použitelné pro dlaší soubory. A nefunguje to ani v případě, že makra ve Wordu povolím úplně všude.

Nakonec abych drbal do normal.dot, čemu se chci vyhnout... :-(

A ano, nikdy jsem makra ve Wordu nepoužíval. Ani to s Wordem moc neumím, využiju jen zlomek jeho funkcí, bohatě by mi stačil WordPad. Tohle je můj první worďácký makropokus.

musí to jít: soubory docx/odt,pdf mají známou strukturu:
pdf:
existuje něco jako latex, případně to je kanon na vrabce, ale text2pdf něco existuje.
odt/doc, určitě musí existovat podobná utilitka, kromě toho obojí je zip archiv, kde podlě mě je objekt zájmu něco jako content.xml

Protože je to pak pohodlné pro zálohování (doc) či tisk. Když si ten můj vzorový soubor otevřeš v texťáku, ani po odstranění těch "(502X" apod. to nevytiskneš rozumně, stránku po stránce, musím ještě změnit velikost písma a nastavit okraje, o to se také makro postará. Já navíc pak využívám toho, že kvůli úspoře papíru tisknu ty sáhodlouhé uzávěrky z upravených doc/pdf tisknu naležato, dvě stránky vedle sebe. Přímo z toho starého DOSovského účta nemám šanci.

Vše mám vymyšlené, jen potřebuju dořešit, jak ten *txt načíst/otevřít v *docm s makry, jak píše kolega výše :-)

Pokud vše selže, tak prostě ta makra nasypu - ač nerad - do normal.dotm. Ten postup, kdy potřebuji zkonvertovat takto txt, sice momentálně nepoužívám tak často, ale pokud to budu mít zmáklé, klidně to použiju 50x měsíčně.

Tak aby som si to ešte raz upresnil, chceš toto: 1. otvoriť vo Worde texťák, 2. pustiť naňho makro, 3. to makro nechceš mať v Normal.dotm (nechápem celkom prečo, ale budiž)

takže ulož si niekam súbor s makrom, napr. G:\makra\mojeskvelemakro.dotm (ulož ako dotm, docm mi nefungovalo),
vo worde nastav cestu k tomu súboru nech si natiahne makrá pri štarte - viď obrázok
Reštartni word a mal by si vedieť to makro spustiť

Já bych to načítal jako text, nedával bych to do převodu.
Prostě normálně
OPEN 'soubor.txt' AS #1 FOR READ
potom nějak číst
pak nezapomenout
CLOSE #1

Už jsem to dlouho nedělal (když to potřebuju, vyjdu ze staršího makra), tak tu syntaxi přesně nevím, ale to je v nápovědě, kromě toho je stejná jako v Basicu. Používám to hlavně pro výstup na tiskárnu (stačí zadat název souboru LPT2:).

A znaky načtené ze souboru bych ko případné konverzi dával do dokumentu.
Vůbec bych na to nepouštěl konvertor wordu.

to CLOSE #1 je potřeba udělat i když makro havaruje (při ladění) na řádku immediate, jinak zůstane soubor otevřený a nelze ho znova otevřít

Ahoj chlape, tak jak si na tom?
Něco sem Ti splácal, převážná část je nahraná záznamníkem, tak se toho nelekni. Tohle je můj druhej pokus co se týče VBA ve Wordu. A musím se přiznat, že s Excelem se to nedá srovnávat (Hlavně k excelu je informací plnej net a knížek 3 (_!_), ale Word to je jiná). Makro se spouští přes kartu "Vývojár" -> Makra ...klasika.

Poté budeš vyzvanej aby si vybral soubor k importu (defaultní cesta je nastavená na plochu, to si případně uprav). Po importu se odstraní Tebou uvedené řetězce (můžeš si doplnit další, je to pole procházené v cyklu), okraje stránky se nastaví na úzké
a font je Courier New o velikosti 7. Nic jiného sem nedělal. Pravděpodobně bude ještě nutné (nejspíše ručně) upravit stránky a uložit.

Ahoj, díky, mrknu na to pořádně po neděli (DPH..), určitě kvůli rozšíření obzorů.

Nicméně mezitím, po různých neúspěšných pokusech, aby to dělalo přesně co chci (vzhled stránky, velikost fontu, náhrady/výmazy řetězců), a jednoduše, jsem makro narval do normal.dotm (je tedy dostupné úplně pro všechny soubory - což sice nepotřebuji, ale nakonec to asi ničemu nevadí). Přiřadil jsem makru klávesovou zkratku, jinde nepoužívanou, Alt+K.

Teď postupuji tak, že kliknu v TC pravým na onen *txt, otevřít v MS Word, Alt+K, uložit jako, hotovo.
Jak píšeš, oproti Excelu je Word pole neorané.. tohle je za více než 20 let, co Word používám (od verze 95) moje první makrování.

Sub Makro1()
'
' Makro, ktere zpracuje txt vystup z KHK tak, aby jej bylo mozno tisknout
' klavesova zkratka Alt+K
'
' Makro zformatuje velikost stranky a nastavi okraje
' Makro odstrani prebytecne texty, pozustatky z transferu z KHK
'
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = "(500X"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "(502X"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "&l64F&a?L"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = True
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.Find
        .Text = "Tisk  : ??.??.??   Čas  : ??:??"
        .Replacement.Text = ""
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = False
        .MatchWholeWord = False
        .MatchAllWordForms = False
        .MatchSoundsLike = False
        .MatchWildcards = True
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
    With Selection.PageSetup
        .LineNumbering.Active = False
        .Orientation = wdOrientPortrait
        .TopMargin = CentimetersToPoints(1)
        .BottomMargin = CentimetersToPoints(1.27)
        .LeftMargin = CentimetersToPoints(0.6)
        .RightMargin = CentimetersToPoints(0.6)
        .Gutter = CentimetersToPoints(0)
        .HeaderDistance = CentimetersToPoints(1.25)
        .FooterDistance = CentimetersToPoints(1.25)
        .PageWidth = CentimetersToPoints(21)
        .PageHeight = CentimetersToPoints(29.7)
        .FirstPageTray = wdPrinterDefaultBin
        .OtherPagesTray = wdPrinterDefaultBin
        .SectionStart = wdSectionNewPage
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .VerticalAlignment = wdAlignVerticalTop
        .SuppressEndnotes = False
        .MirrorMargins = False
        .TwoPagesOnOne = False
        .BookFoldPrinting = False
        .BookFoldRevPrinting = False
        .BookFoldPrintingSheets = 1
        .GutterPos = wdGutterPosLeft
    End With
    Selection.WholeStory
    Selection.Font.Size = 7
End Sub

Dalo by se to napsat určitě efektněji, kašlu na to, tohle je zase pro mě přehledné.. minimálně bych mohl spojit odstranění (500X a (502X wildcardovým (50?X.

Ahoj, díky, mrknu na to pořádně po neděli (DPH..), určitě kvůli rozšíření obzorů.

Tak to tě bohužel musím zklamat :-). V tomhle případě, se žádné rozšiřování obzorů nekoná. Jak už sem psal, dělal sem to za pomocí záznamníku, tudíž až na dialog k výběru souboru a cyklus je kód shodný.

PS: Když by si někdy narazil na publikaci (nejlépe v CZ) týkající se Wordu a VBA dej vědět. Díky

Ahoj.
Kdybys chtěl, udělal jsem jednoduchou konzolovou apku pro Win, pomocí které to můžeš jednoduše zautomatizovat.

Syntaxe je tato:

txtToWord2.exe lpt1.txt nazevWord.docx

using Word = Microsoft.Office.Interop.Word;
    class Program
    {
        static void Main(string[] args)
        {
 
            if (args.Length == 0)
            {
                System.Console.WriteLine("Please enter an argument.");
                
                return;
            }
            if (args.Length != 2)
            {
                System.Console.WriteLine("Spatny pocet parametru.");
            }

            Word.Application wordApp = new Word.Application();
            Word.Document wordDoc = wordApp.Documents.Add();

            System.Console.WriteLine(args[0].ToString());
            System.Console.WriteLine(args[1].ToString());


           
            System.Console.WriteLine("Starting...");
            StringBuilder stringBuilder = new StringBuilder();
            using (FileStream fs = File.Open(args[0].ToString(), FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
            using (BufferedStream bs = new BufferedStream(fs))
            using (StreamReader sr = new StreamReader(bs))
            {
                wordDoc.Content.Text = sr.ReadToEnd();
                wordDoc.Sections[wordDoc.Sections.Count].PageSetup.Orientation = Word.WdOrientation.wdOrientLandscape;
                wordDoc.SaveAs(AppDomain.CurrentDomain.BaseDirectory + "//" + args[1].ToString());
            }

            System.Console.WriteLine("Complete");

            wordDoc.Close();
            
        }
    }

Přeložený program pro konzoli je rovnou v příloze.

Tak vyřešeno k mé maximální spokojenosti. Udělal jsem si baťák na otevření konkrétního souboru ve Wordu (protože jako "výstup" má *txt pořád stejné umístění a název) a jeho zástupce na ploše. Kdykoliv potřebuji konvertovat textový výstup, klik na zástupce, enter, Alt+K (vyvolání makra z normal.dotm, pak tisk nebo uložit do *pdf.

Značím vyřešeno.

Pro mě je tohle důležité hlavně proto, že ze starého DOSovského programu v vDosPlus nejsem přímo schopen tisknout ani do *pdf, ani na inkoustové epsonce, jen na "plnohodnotné" laserovce (neexistují drivery, na Epsonku nedostanu *pjl "nastavení"). Teď mám tiskové výstupy nezávislé na dalším, "využívám

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