Seite 1 von 1
Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Do, 16.04.2009 16:30
von Leibundgut
Wir sind an einem kleinen Projekt mit dem Programm Calc!!
> Wir haben ca. 20 Arbeitsblätter die nur zur Berechnung der einzelnen
> Produkte da sind.
> 3 Arbeitsblätter benötigen wir für folgendes:
>
> * Eingabe Blatt
> * Zusammenfassung der Eingabe
> * Bestellformular
>
>
> Was wir möchten, ist ein Makro das das Arbeitsblatt (Zusammenfasung der
> Eingabe) ausdruckt.
> Weiter möchten wir das ein weiteres Makro, dass gleiche Arbeitsblatt
> als PDF gespeichert wird.
> Zwei zusätzliche Makros für das Bestellformular. Dito.
>
> Somit können wir 4 Knöpfe im Eingabe Blatt hinterlegen und alle
> anderen Arbeitsblätter verbergen.
> Können Sie uns mitteilen wie dies Funktioniert ?
>
> Wenn ich ein Makro erstelle Druckts nur das Aktive Sheet.
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Fr, 17.04.2009 18:12
von turtle47
Hallo Leibundgut,
zuerst einmal ein herzliches Willkommen hier im Forum.
Sicherlich fragst Du Dich warum Du noch keine Antwort erhalten hast.
Ein freundliches Hallo als Einleitung und eine Grussformel am Schluss macht sich immer gut.
Leibundgut hat geschrieben:Können Sie uns mitteilen wie dies Funktioniert ?
Mit folgendem Code wird ein Druckbereich auf der "Tabelle1" festglegt, das Sheet gedruckt und der Druckbereich wieder gelöscht. Wenn mehrere Druckbereiche festgelegt sind, dann gibt es in dem zweiten Code Probleme mit dem PDF-Export weil dort dann alle Tabellen exportiert werden die einen Druckbereich haben.
Code: Alles auswählen
Sub PrintSheet
oCalc = thisComponent
oSheet = oCalc.sheets().getByName("Tabelle1")'Tabellennamen anpassen
myView = oCalc.CurrentController
myView.setActiveSheet(oSheet)
oZellRange = oSheet.getCellRangeByName("$A$1:$B$20")'Bereich anpassen
oCursor = oSheet.createCursorByRange(oZellRange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
oSheet.setPrintAreas(aDruckbereich())
oCalc.Print(Array())'Tabelle drucken
oSheet.setprintareas(Array())'Druckbereich löschen
End Sub
Hier der Code für den PDF-Export
Code: Alles auswählen
Sub Store_to_PDF 'unter gleichem Dateinamen wie Dokument
oCalc = thisComponent
FileTitle=GetFileNameWithoutExtension(oCalc.Title,"\")'Dateiname ohne Extension auslesen
oSheet = oCalc.sheets().getByName("Tabelle1")'Tabellennamen anpassen
myView = oCalc.CurrentController
myView.setActiveSheet(oSheet)
oZellRange = oSheet.getCellRangeByName("$A$1:$B$20")'Bereich anpassen
oCursor = oSheet.createCursorByRange(oZellRange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
oSheet.setPrintAreas(aDruckbereich())
Dim myProps(0) as New com.sun.star.beans.PropertyValue
sUrl= "file:///C:/" & FileTitle & ".pdf" 'Dateiname anpassen
myProps(0).Name="FilterName"
myProps(0).Value = "calc_pdf_Export"
oCalc.storetoUrl(sUrl,myProps())
oSheet.setprintareas(Array())'Druckbereich löschen
End Sub
Die Tabellennamen und den Druckbereich musst Du noch anpassen.
Was mir noch nicht ganz klar ist wie der Dokumentenname für das PDF-Dokument vergeben wird, deshalb habe ich den Namen des aktuellen Tabellendokumentes verwendet.
Unter Menue > Extras > Optione > OOo-Calc > Drucken > [X] "Nur ausgewählte Tabellen drucken" auswählen
Hilft das weiter?
Viel Erfolg.
Jürgen
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: So, 19.04.2009 22:07
von Leibundgut
Hallo turtle47
Danke für deine Hilfe!
ich werde mich beim nächsten Mal freundlicher benehmen.

(War frustriert weils nicht funktionierte)
Soweit ich dies eingefügt habe funktioniert es auch ( Danke)
Könnte ich als Dateiname auch einen Eintrag von einer Zelle übernehmen ?
Danke
Schönen Wochenstart
Gruss Mathias
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: So, 19.04.2009 22:28
von turtle47
Hi Mathias,
Leibundgut hat geschrieben:Könnte ich als Dateiname auch einen Eintrag von einer Zelle übernehmen ?
Das ist auch kein Problem. Bei folgendem Code wir der Inhalt von Zelle "A1" in "Tabelle1" für den Dateinamen verwendet.
Das kannst Du entsprechend anpassen.
Code: Alles auswählen
Sub Store_to_PDF1
oCalc = thisComponent
oSheet = oCalc.sheets().getByName("Tabelle1")'Tabellennamen anpassen
Filename = oSheet.getCellRangeByName("A1").string 'Zellinhalt auslesen für Dateinamen
myView = oCalc.CurrentController
myView.setActiveSheet(oSheet)
oZellRange = oSheet.getCellRangeByName("$A$1:$B$20")'Bereich anpassen
oCursor = oSheet.createCursorByRange(oZellRange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
oSheet.setPrintAreas(aDruckbereich())
Dim myProps(0) as New com.sun.star.beans.PropertyValue
sUrl= "file:///C:/" & Filename & ".pdf" 'Speicherort anpassen
myProps(0).Name="FilterName"
myProps(0).Value = "calc_pdf_Export"
oCalc.storetoUrl(sUrl,myProps())
oSheet.setprintareas(Array())'Druckbereich löschen
End Sub
Leibundgut hat geschrieben:Schönen Wochenstart
Danke gleichfalls.
Jürgen
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Mo, 20.04.2009 08:02
von Leibundgut
Guten Tag
Super , es klappt fast !!
Das PDF wurd sauber erstellt !! (Danke)
Jedoch das Makro beim Drucker hat noch ein Problem!
Es wird nicht gedruckt. Der Drucker bleibt stumm.
Ist hier etwas das nicht mit meinem Drucker nicht stimmt?
Code: Alles auswählen
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
oSheet.setPrintAreas(aDruckbereich())
oCalc.Print(Array())'Tabelle drucken
Ich hab keinen Plan ?
Danke für die Hilfe!!
Schönen Tag
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Mo, 20.04.2009 09:59
von turtle47
Hallo Mathias,
die Druckausgabe wird normalerweise direkt an den Standarddrucker gesendet.
Wenn Du unter Win-XP unterwegs bist, dann schau mal unter
Start > Einstellungen > Drucker und Faxgräte
welcher Drucker dort als Standard definiert ist (kleine Haken im Drucker-Icon)
Viel Erfolg.
Jürgen
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Mo, 20.04.2009 11:38
von Leibundgut
Hallo !!!
Danke für deine Hilfe!
Jedoch der Standard Drucker ist "gehäckelt"
Wenn ich dieses alte (sorry, ich bin nicht der Makro HIRSCH) Makro ausführe, druckt's
Code: Alles auswählen
sub tesssst
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
end sub
Wir haben die ServerVersion 2003R, wenn dies hilft!
Danke und einen guten Appetit
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Mo, 20.04.2009 11:49
von Leibundgut
Leibundgut hat geschrieben:Hallo !!!
Danke für deine Hilfe!
Jedoch der Standard Drucker ist "gehäckelt"
Wenn ich dieses alte (sorry, ich bin nicht der Makro HIRSCH) Makro ausführe, druckt's
Code: Alles auswählen
sub tesssst
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
end sub
Wir haben die ServerVersion 2003R, wenn dies hilft!
Danke und einen guten Appetit
Wenn ich einen Druckbereich manuell definiere geht es !!
Aber das Makro hat doch ein Druckbereich !! ?? Wieso funktioniert der PDF-Export aber der Drucker nicht ???
Null Plan !!
Danke
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Mo, 20.04.2009 15:10
von turtle47
Hallo Mathias,
es gibt noch zwei Möglichkeiten.
1. Der Druckbereich ist leer, dann wird auch nichts gedruckt.
2. Schau mal unter Menue > Datei > Druckereinstellungen was dort für ein Drucker voreingestellt ist.
Die Test bei mir sind alle erfolgreich verlaufen.
Ansonsten habe ich auch keinen Plan mehr.

Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Di, 21.04.2009 07:25
von Leibundgut
Guten Morgen
Ganze Nacht dran und kein Erfolg !!

************************************************
Das PDF wird richtig exportiert (genial

)
Der gleiche Code für Druck aber der Drucker macht kein muggs
Der Drucker wird einfach nicht angesteuert!!
Code: Alles auswählen
Sub GotoSheet( nameRef as String )
oDocument = ThisComponent
oView = oDocument.CurrentController
oSheet = oDocument.Sheets.getByName( nameRef )
oView.setActiveSheet( oSheet )
End Sub
REM ***** BASIC *****
Sub GotoSheet2
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "aTableName"
args1(0).Value = "Tabelle3"
dispatcher.executeDispatch(document, ".uno:Show", "", 0, args1())
GotoSheet( "Tabelle3" )
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "aTableName"
args3(0).Value = "Tabelle3"
dispatcher.executeDispatch(document, ".uno:Hide", "", 0, args3())
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args4())
End Sub
Mit diesem Code geht es aber eben nicht so sauber programiert !!
Wieso geht dies ?????? mhhhhhhhhhhh
Gruss
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Di, 21.04.2009 09:21
von turtle47
Morgen Mathias,
ich habe auf Michaels
Homepage noch etwas gefunden und den Code mal dahingehend geändert.
Code: Alles auswählen
Sub PrintSheet2
oCalc = thisComponent
oSheet = oCalc.sheets().getByName("Tabelle1")'Tabellennamen anpassen
myView = oCalc.CurrentController
myView.setActiveSheet(oSheet)
oZellRange = oSheet.getCellRangeByName("$A$1:$B$20")'Bereich anpassen
oCursor = oSheet.createCursorByRange(oZellRange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
oSheet.setPrintAreas(aDruckbereich())
Dim printProp(0)as New com.sun.star.beans.PropertyValue
printProp(0).Name = "Wait"
printProp(0).Value = "true"
oCalc.Print(Array,printProp())'Tabelle drucken
oSheet.setprintareas(Array())'Druckbereich löschen
End Sub
Vielleicht funktioniert das.
Jürgen
Re: Makro verschiedene Sheets drucken oo.oVersion3.0.0
Verfasst: Do, 23.04.2009 14:07
von Leibundgut
Hallo
So jetzt haben wirs >>>>>>> FAST<<<<<<<< geschafft!!
Der Code funktioniert : (leider nicht sauber Programmiert!!)
Hier der Code
Code: Alles auswählen
Sub Druck_PDF
oCalc = thisComponent
oSheet = oCalc.sheets().getByName("Berechnung")'Tabellennamen anpassen
Filename = oSheet.getCellRangeByName("E1").string 'Zellinhalt auslesen für Dateinamen
myView = oCalc.CurrentController
myView.setActiveSheet(oSheet)
oZellRange = oSheet.getCellRangeByName("$A$1:$F$59")'Bereich anpassen
oCursor = oSheet.createCursorByRange(oZellRange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
oSheet.setPrintAreas(aDruckbereich())
Dim myProps(0) as New com.sun.star.beans.PropertyValue
sUrl= "file:///P:/Geschäft/Kalk/" & Filename & ".pdf" 'Speicherort anpassen
myProps(0).Name="FilterName"
myProps(0).Value = "calc_pdf_Export"
oCalc.storetoUrl(sUrl,myProps())
oSheet.setprintareas(Array())'Druckbereich löschen
End Sub
Sub GotoSheet( nameRef as String )
oDocument = ThisComponent
oView = oDocument.CurrentController
oSheet = oDocument.Sheets.getByName( nameRef )
oView.setActiveSheet( oSheet )
End Sub
REM ***** BASIC *****
Sub GotoSheet2
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "aTableName"
args1(0).Value = "Berechnung"
dispatcher.executeDispatch(document, ".uno:Show", "", 0, args1())
GotoSheet( "Berechnung" )
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "aTableName"
args3(0).Value = "Berechnung"
dispatcher.executeDispatch(document, ".uno:Hide", "", 0, args3())
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args4())
End Sub
Sub Druck1_PDF
oCalc = thisComponent
oSheet = oCalc.sheets().getByName("BST_FO")'Tabellennamen anpassen
Filename = oSheet.getCellRangeByName("F5").string 'Zellinhalt auslesen für Dateinamen
myView = oCalc.CurrentController
myView.setActiveSheet(oSheet)
oZellRange = oSheet.getCellRangeByName("$A$1:$AY$38")'Bereich anpassen
oCursor = oSheet.createCursorByRange(oZellRange)
oAdress = oCursor.RangeAddress
Dim aDruckbereich(0)
aDruckbereich(0) = oAdress
oSheet.setPrintAreas(aDruckbereich())
Dim myProps(0) as New com.sun.star.beans.PropertyValue
sUrl= "file:///P:/Geschäft/Best/" & Filename & ".pdf" 'Speicherort anpassen
myProps(0).Name="FilterName"
myProps(0).Value = "calc_pdf_Export"
oCalc.storetoUrl(sUrl,myProps())
oSheet.setprintareas(Array())'Druckbereich löschen
End Sub
Sub GotoSheet3( nameRef as String )
oDocument = ThisComponent
oView = oDocument.CurrentController
oSheet = oDocument.Sheets.getByName( nameRef )
oView.setActiveSheet( oSheet )
End Sub
REM ***** BASIC *****
Sub GotoSheet4
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "aTableName"
args1(0).Value = "BST_FO"
dispatcher.executeDispatch(document, ".uno:Show", "", 0, args1())
GotoSheet( "BST_FO" )
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:PrintDefault", "", 0, Array())
dim args3(0) as new com.sun.star.beans.PropertyValue
args3(0).Name = "aTableName"
args3(0).Value = "BST_FO"
dispatcher.executeDispatch(document, ".uno:Hide", "", 0, args3())
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 1
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args4())
End Sub
Tja eben nur fast !!
Wenn wir die Datei als VORLAGE (.OTS) abspeichere (schreibgeschützt) funktioniert das Pdf machen!! Jedoch der Drucker druckt nur die sichtbare Tabelle!!
WIESO??????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
Hat DDDDAAAAAA jemand einen kleinen Hinweis?
Danke für Eure Hilfe
Gruss Mathias