Front-end Front-end
Probíhá výprodej HTML, JavaScript a Bootstrap. Slevy až 80 %
Vyšlehej si extra vědomosti! Až 100% bodů na prémiový obsah zdarma! Více zde
Avatar
Petr Fojt
Člen
Avatar
Petr Fojt:18.11.2018 8:34

Ahoj všichni! Píšu jednoduchou aplikaci, která slouží ke generování štítků. Nyní řeším zatím asi největší problém - potřebuji aby aplikace dokázala vytvořit soubor .doc (.docx) který bude naformátovaný podle předem nastavené šablony štítků (šablona je jednotná a nemění se) a hlavně potřebuji do této šablony následně zapisovat data.

Zkusil jsem: Zatím se mi podařilo pouze donutit program vytvořit a zapisovat do .txt. Nemohu přijít na to jak to nacat do formátovaného dokumentu Wordu.

Chci docílit: Chtěl bych dosáhnout toho, že v aplikaci zadám počty jednotlivých štítků, aplikace mi je vygeneruje a automaticky přiřadí do souboru Wordu.

Náhled šablony štítků s příkladem jak by to mělo ve finále vypadat dávám do přílohy.

Předem děkuji všem a budu rád za jakýkoliv nápad nebo radu!

Imports System.IO
Class Form1
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    End Sub

    Dim center As Integer
    Dim ap As Integer
    Dim cam As Integer
    Dim swi As Integer

    Dim api As Integer = 1
    Dim cami As Integer = 1
    Dim swii As Integer = 1

    Private Sub cb_ap_CheckedChanged(sender As Object, e As EventArgs) Handles cb_ap.CheckedChanged
        If cb_ap.Checked = True Then txt_ap.Enabled = True Else txt_ap.Enabled = False
    End Sub

    Private Sub cb_sw_CheckedChanged(sender As Object, e As EventArgs) Handles cb_sw.CheckedChanged
        If cb_sw.Checked = True Then txt_sw.Enabled = True Else txt_sw.Enabled = False
    End Sub

    Private Sub cb_cam_CheckedChanged(sender As Object, e As EventArgs) Handles cb_cam.CheckedChanged
        If cb_cam.Checked = True Then txt_cam.Enabled = True Else txt_cam.Enabled = False
    End Sub

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        center = CInt(txt_center.Text)
        If cb_ap.Checked Then ap = CInt(txt_ap.Text) Else ap = 0
        If cb_cam.Checked Then cam = CInt(txt_cam.Text) Else cam = 0
        If cb_sw.Checked Then swi = CInt(txt_sw.Text) Else swi = 0

        If SaveFileDialog1.ShowDialog() = DialogResult.OK Then
            Dim sw As StreamWriter = New StreamWriter(SaveFileDialog1.OpenFile())
            If (sw IsNot Nothing) Then
                sw.WriteLine("Center number: " & center)
                sw.WriteLine("====================")
                sw.WriteLine("AP quantity: " & ap)
                While api <= ap
                    sw.WriteLine("RDE_" & center & "_AP" & "{0}", api)
                    api += 1
                End While
                sw.WriteLine("====================")
                sw.WriteLine("SWITCH quantity: " & swi)
                While swii <= swi
                    sw.WriteLine("RDE_" & center & "_SW" & "{0}", api)
                    swii += 1
                End While
                sw.WriteLine("====================")
                sw.WriteLine("CAM quantity: " & cam)
                While cami <= cam
                    sw.WriteLine("RDE_" & center & "_CAM" & "{0}", api)
                    cami += 1
                End While
                sw.Close()

            End If

        End If
        MsgBox("Success!")
    End Sub
 
Odpovědět 18.11.2018 8:34
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Petr Fojt
Martin Petrovaj:18.11.2018 8:53

Bohužiaľ s Office dokumentmi sa nedá pracovať ako s obyčajným .txt súborom, keďže fungujú úplne inak.

Ak vieš, že budeš generovať len novšie formáty (.docx, .pptx, .xlsx), tak by som na prácu s Office dokumentmi použil OpenXML Office SDK (odkaz na stiahnutie, odkaz na dokumentáciu). Ak určite potrebuješ z nejakého dôvodu podporovať aj staršie formáty (.doc, .ppt, .xls), tak ti neostáva nič iné, než použiť pomalší a ťažkopádnejší Interop, ku ktorému je pre začiatočníka aj menej informácií (odkaz na asi jediný entry-level článok, ktorý som k nemu našiel).

Nahoru Odpovědět 18.11.2018 8:53
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Petr Fojt
Člen
Avatar
Odpovídá na Martin Petrovaj
Petr Fojt:18.11.2018 9:04

@Martin Petrovaj: Štítky se budou generovat stále do jedné a té samé šablony kterou mám ve formátu .dotx. Jediné co se bude měnit je jejich počet.

 
Nahoru Odpovědět 18.11.2018 9:04
Avatar
Martin Petrovaj
Překladatel
Avatar
Odpovídá na Petr Fojt
Martin Petrovaj:18.11.2018 9:07

V tom prípade spravíš lepšie, ak si začneš pozerať ten OpenXML Office SDK. Na začiatok ti stačí pochopiť, že tieto novšie formáty sú vlastne XML súbory zozipované k sebe, a že s nimi podľa toho aj vieš pracovať (odporúčam pozrieť si napr. tunajší tutoriál k práci s XML pomocou DOMu). Vyskúšaj si na začiatok len vyhľadávanie a editovanie nejakého textu a až to dostaneš do ruky, tak len hľadaj v dokumentácii informácie o templatoch, ktoré potrebuješ.

Nahoru Odpovědět 18.11.2018 9:07
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Odpovídá na Petr Fojt
Michal Štěpánek:18.11.2018 9:49

Tady jsem se inspiroval, když jsem něco podobného páchal
https://www.dotnetportal.cz/…ord-z-VB-NET
je to sice starší, ale "systém práce" je dost podobný...

Nahoru Odpovědět 18.11.2018 9:49
Nikdy neříkej nahlas, že to nejde. Vždycky se totiž najde blbec, který to neví a udělá to...
Avatar
plelovsky
Člen
Avatar
plelovsky:19.11.2018 17:00

K tomu můžeš využít Mail Merge ve Wordu.
Ve Wordu si nadefinuješ vzhled štítku a DataSource - např. TXT soubor. Pak naplníš texťák daty a spustíš Mail Mege.
Viz
https://docs.microsoft.com/…rd.mailmerge
https://support.office.com/…5fab317d9ef4

 
Nahoru Odpovědět 19.11.2018 17:00
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.