Prog.Hu

Excel munkalapok nyomtatása scriptből
20

2013-09-05T21:24+02:00
Bobolit
BobolitProg.Hu
regisztrált tag
2013-09-05T21:24+02:00
Sziasztok!

Adott egy excel file, ami minden lehetséges adatot tartalmaz valamiről, ezt egy külső programmal szeretném kinyomtatni, de mindig csak bizonyos munkalapokat, tehát nem az egészet. Script-tel lehet ezt valahogy szabályozni, tehát hogy pl. egyszer a Munka1 - Munka5-öt szeretném nyomtatni, egyszer pedig a Munka1 - Munka3 és Munka8 - Munka12?
Ezt használom közvetlen nyomtatásra:

Const xlDoNotSaveChanges = 2

Dim fso, oXL, oWkbk

Set fso = CreateObject("Scripting.FileSystemObject")
Set oXL = CreateObject("Excel.Application")

oXL.Visible = False

If WScript.Arguments.Count = 0 Then
WScript.Quit
Else
For A = 0 To (WScript.Arguments.Count - 1)
If (Right(WScript.Arguments.Item(A), 4) = "xlsx") _
AND fso.FileExists(WScript.Arguments.Item(A)) Then
Set oWkbk = oXL.Workbooks.Open(WScript.Arguments.Item(A))
oWkbk.PrintOut
oWkbk.Close xlDoNotSaveChanges
End If
Next
End If

oXL.Quit
Set fso = Nothing
Set oXL = Nothing

Köszönöm!
Bobolit
Mutasd a teljes hozzászólást!
Excel munkalapok nyomtatása scriptből
2013-09-05T21:24+02:00
Bobolit
BobolitProg.Hu
regisztrált tag
2013-09-05T21:24+02:00
2013-04-02T09:36+02:00
2013-04-02T09:36+02:00
pl:


Const xlDoNotSaveChanges = 2

Dim fso, oXL, oWkbk, oWksh

Set fso = CreateObject("Scripting.FileSystemObject")
Set oXL = CreateObject("Excel.Application")

oXL.Visible = False

If WScript.Arguments.Count = 0 Then
        WScript.Quit
Else
        If (Right(WScript.Arguments.Item(0), 4) = "xlsx") _
        And fso.FileExists(WScript.Arguments.Item(0)) Then
                Set oWkbk = oXL.Workbooks.Open(WScript.Arguments.Item(0))
                Set oWksh = oWkbk.Worksheets(WScript.Arguments.Item(1))
                oWksh.PrintOut
                oWkbk.Close xlDoNotSaveChanges
        End If
End If

oXL.Quit
Set fso = Nothing
Set oXL = Nothing

Itt2 paramétert vár.
Az első a munkafüzet neve , a második a munkalap neve, amit nyomtatni kell
pl:
e:\teszt.xlsx Munka2

Persze ebben nincs még hibakezelés hibás munkalapnév paraméterre....

De lehetne olyat is, hogy egy számot adsz át paraméternek és az nem a munkalap nevére, hanem sorszámára vonatkozik.
Esetleg 2 számot adsz meg, és lesz tól - ig 2 paraméter, amivel egyszerre több munkalapot is tudsz nyomtatni.... persze le kell kezelni a felmerülhető hibákat....
Mutasd a teljes hozzászólást!

  • Igen, lehet szabályozni.
    Felveszel a munkalapnak is egy objektumot, beállítod, hogy melyik munkalapra mutasson és azt nyomtatod nem a munkafüzetet.

    A vbs fáj futtatásakor paraméterben át tudod adni a nyomtatandó munkalap nevét is vagy valami jellemzőt, ami meghatározza, hogy mit is kell nyomtatni.

    (mondjuk evvel a kóddal több munkafüzetet is tudsz nyomtatni egyszerre, viszont ha beépíted a munkalapokat is a paraméterbe, akkor lehet bukod ezt a lehetőséget és egyszerre csak egy munkafüzetnek a munkalapjait tudod nyomtatni....)
    Mutasd a teljes hozzászólást!
  • Az teljesen jó, ha csak egyet nyomtatok egyszerre, sőt, tulajdonképpen követelmény is, kiveszem majd a ciklust a kódból.
    Viszont ha nem gond, kifejtenéd, hogy mit takar az, hogy munkalaphoz objektumot felvenni? Eléggé vakláma vagyok ehhez a témához...
    Mutasd a teljes hozzászólást!
  • pl:


    Const xlDoNotSaveChanges = 2

    Dim fso, oXL, oWkbk, oWksh

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set oXL = CreateObject("Excel.Application")

    oXL.Visible = False

    If WScript.Arguments.Count = 0 Then
            WScript.Quit
    Else
            If (Right(WScript.Arguments.Item(0), 4) = "xlsx") _
            And fso.FileExists(WScript.Arguments.Item(0)) Then
                    Set oWkbk = oXL.Workbooks.Open(WScript.Arguments.Item(0))
                    Set oWksh = oWkbk.Worksheets(WScript.Arguments.Item(1))
                    oWksh.PrintOut
                    oWkbk.Close xlDoNotSaveChanges
            End If
    End If

    oXL.Quit
    Set fso = Nothing
    Set oXL = Nothing

    Itt2 paramétert vár.
    Az első a munkafüzet neve , a második a munkalap neve, amit nyomtatni kell
    pl:
    e:\teszt.xlsx Munka2

    Persze ebben nincs még hibakezelés hibás munkalapnév paraméterre....

    De lehetne olyat is, hogy egy számot adsz át paraméternek és az nem a munkalap nevére, hanem sorszámára vonatkozik.
    Esetleg 2 számot adsz meg, és lesz tól - ig 2 paraméter, amivel egyszerre több munkalapot is tudsz nyomtatni.... persze le kell kezelni a felmerülhető hibákat....
    Mutasd a teljes hozzászólást!
  • Köszönöm, amint tudom kipróbálom és ha működik, imába foglalom a neved!
    Vajon azt lehetne-e, hogy az első paraméter a megnyitandó fájl neve, a második viszont egy tömb, amiben fel vannak sorolva a megnyitandó munkalapok? Létezik itt olyan, hogy tömbbejárás, mint mondjuk a foreach php-ban?
    Mutasd a teljes hozzászólást!
  • Hogy tudnék több munkalapot kijelölni, ill. nyomtatni?
    Mutasd a teljes hozzászólást!
  • Úgy tudod esetleg, hogy pl. 2 paraméter helyett 3-at adsz meg a script futtatásához.
    Az első a munkafüzet neve (mint most is).
    A második annak a munkalapnak a sorszáma, amelyiket nyomtatja először.
    A harmadik pedig annak a munkalapnak a sorszáma, amelyet utoljára nyomtat.
    Egyfajta -tól -ig határt adsz meg a két paraméter által.

    A programon belül pedig ciklust használsz, ahol végiglépkesz a munkalap neveken és nyomtatod.


    Vagy lehet olyat is, hogy 2 paraméter.
    Az első a munkafüzet neve (mint most is).
    A második pedig egy szám.
    pl 1: ez a Munka1-től Munka3-at jelenti
    2: Munka4-től Munka8-ig
    stb.

    Ezt a számot pedig vizsgálod Select Case szerkezettel vagy IF-fel, a feltételnek megfelelően feltöltesz egy tömböt az adott munkalapok nevével.

    Majd szintén ciklus használatával végiglépkedsz a tömb elemein és az annak megfelelő munkalapot nyomtatod.


    Ha egyik sem tetszik, még mindig meghívhatod a mostani scriptet, mindig másik munkalappal.
    Lehet bonyolítani, esetleg erre lehet egy másik script, ami ezt a scriptet többször meghívja mindig más paraméterrel...

    Mutasd a teljes hozzászólást!
  • Ebben a pillanatban akartam írni, hogy tömbbel sikerült
    Az ötleteid jók, köszönöm, csak kicsit szokatlan nekem ez a vbs, de igyekszem!
    Mutasd a teljes hozzászólást!