Prog.Hu

Excel munkalapok nyomtatása scriptből
20

2013-09-05T21:24+01:00
Bobolit
BobolitProg.Hu
regisztrált tag
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+01:00
Bobolit
BobolitProg.Hu
regisztrált tag
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!