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

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
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. 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

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

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