Drucken und pdf erzeugen

Das Tabellenkalkulationsprogramm

Moderator: Moderatoren

chrwel
Beiträge: 6
Registriert: Fr, 27.06.2008 22:16
Wohnort: Bornheim / Rheinland

Drucken und pdf erzeugen

Beitrag von chrwel »

Hallo zusammen,
ich suche schon stundenlag nach einer eleganten Lösung. Ich habe schon etliche Seiten durchforstet aber kaum was davon verstanden. Leider finde ich zu den print-Fragen nichts, womit ich klar komme. Leider bin ich in der Programmierung hier nicht sonderlich fit. Daher muss ich mir oft mit dem Makrorekorder behelfen.

Ich habe eine Arbeitsmappe mit mehreren Tabellen.
In jeder Tabelle ist in einer Zelle der Druckbereich und der pdf-Filename definiert.
Ich will jeweils nur aus einer Tabelle den pdf exportieren.
Der Druck soll auf den Standard-Printer erfolgen, ohne dass das Auswahlmenü erscheint.
Hier wollte ich noch eine Zelle nehmen und die Anzahl der Ausdrucke ablegen, da je nach Tabelle 1 bis 3 Drucke gebraucht werden.

1. Gibt es einen Befehl, womit ich bei Start der Arbeitsmappe alle Druckbereiche in allen Tabellen löschen kann?
2. Wie erreiche ich, dass für die pdf-Ausgabe nur "Auswahl" aktiv ist ?
(Unter Einstellungen->OpenOfficeCalc->Drucken ist der Haken drin bei "Nur ausgewählte Tabellen drucken)
3. Wie erfolgt der Ausdruck ohne das Druckfenster?
Mein bisheriger Aufbau:

Code: Alles auswählen

rem ------------------------------------------------------------------------------------------------ Function fnActiveTab 
Function fnActiveTab () as String ' ermitteln des Names der Aktuellen Tabelle
Dim oDoc As Object
    oDoc=StarDesktop.CurrentComponent
    fnActiveTab = oDoc.CurrentSelection.Spreadsheet.getName()
end function
rem ------------------------------------------------------------------------------------------------ drucken
sub drucken

dim document   as object
dim dispatcher as object

document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

call fnActiveTab

Dim TABname as String
  TABname=fnActiveTab()

Dim Druckabfrage As Integer
Druckabfrage = MsgBox("Soll gedruckt werden?",4 + 64, "Infoabfrage")

if Druckabfrage = 7 then
   exit sub
  end if

Normaldruck1 = thisComponent.Sheets.getByName(TABname).getCellRangeByName("h96")
Normaldruck2 = Normaldruck1.string

dim Normaldruck(0) as new com.sun.star.beans.PropertyValue
Normaldruck(0).Name = "ToPoint"
Normaldruck(0).Value = Normaldruck2

    PDFname1 = thisComponent.Sheets.getByName(TABname).getCellRangeByName("G95")
    PDFname = PDFname1.string

    Dim oPrintareas(0) as new com.sun.star.table.CellRangeAddress

    osheet = thiscomponent.currentController.activesheet
    oRange = oSheet.getCellRangebyName(Normaldruck2)
    oPrintareas(0)= oRange.RangeAddress

    osheet.setprintareas(oPrintareas)
    Dim myProps(0) as New com.sun.star.beans.PropertyValue
    myProps(0).Name="FilterName"
    myProps(0).Value = "calc_pdf_Export"

    ThisComponent.storetoUrl(PDFname,myProps())

dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, Normaldruck())

dispatcher.executeDispatch(document, ".uno:Print", "", 0, Normaldruck())

dispatcher.executeDispatch(document, ".uno:DeletePrintArea", "", 0, Array())

Danke für Hilfe.
Christian
Gruss aus Bergheim im Rheinland
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Drucken und pdf erzeugen

Beitrag von Stephan »

1. Gibt es einen Befehl, womit ich bei Start der Arbeitsmappe alle Druckbereiche in allen Tabellen löschen kann?
per Makro geht das z.B. so:

Code: Alles auswählen

Sub Druckbereiche_loeschen()
	tc = ThisComponent
	For i = 0 To tc.Sheets().Count - 1
		tc.Sheets(i).setPrintAreas(Array())
	Next i
End Sub
3. Wie erfolgt der Ausdruck ohne das Druckfenster?
siehe "13.15.2. Tabellendokumente drucken" in:
https://www.uni-due.de/~abi070/count.ph ... eutsch.pdf

z.B.:

Code: Alles auswählen

Sub PrintSpreadsheetAreas
  Dim oRanges(1) As New com.sun.star.table.CellRangeAddress
  oRanges(0).Sheet = 0 
  oRanges(0).StartColumn = 0 : oRanges(0).StartRow = 0 'A1
  oRanges(0).EndColumn = 3   : oRanges(0).EndRow = 4   'D5
  
  oRanges(1).Sheet = 0 
  oRanges(1).StartColumn = 0 : oRanges(1).StartRow = 8 'A9
  oRanges(1).EndColumn = 3   : oRanges(1).EndRow = 10  'D11
  
  ThisComponent.CurrentController.getActiveSheet().setPrintAreas(oRanges())
  ThisComponent.print(Array())
End Sub
Gruß
Stephan
chrwel
Beiträge: 6
Registriert: Fr, 27.06.2008 22:16
Wohnort: Bornheim / Rheinland

Re: Drucken und pdf erzeugen

Beitrag von chrwel »

Danke Stephan.
Gelesen hatte ich da schon - aber eben nicht verstanden.
Werde mich da etwas vertiefen ...
Mit dem Löschen komme ich erstmal eine ganze Ecke weiter ...
Gruss aus Bergheim im Rheinland
Antworten