Seite 1 von 1

Druckvorschau

Verfasst: Mi, 03.01.2007 15:48
von toni
Hallo,

dies ist meine erste Anfrage hier im Forum.
Ich hoffe, ich halte die Regeln ein...
Ich bin dabei, eine VBA-Anwendung in Starbasic um zu schreiben.
Ich möchte u.a. über einen selbst programmierten Button in die Druckvorschau (Seitenansicht) gelangen.
Die scheint in Starbasic nicht ohne weiteres möglich zu sein, da irgendwie die Makros "verloren" gehen.
Mit folgendem Code (aus OOoForum.org) klappt es:

Code: Alles auswählen

Sub Main
   ' Create new empty spreadsheet.
   ' Get document model, controller, and frame.
   oDoc = StarDesktop.loadComponentFromURL( "private:factory/scalc", "_blank", 0, Array() )
   oDocCtrl = oDoc.getCurrentController()
   oDocFrame = oDocCtrl.getFrame()
   
   ' Put some stuff into the spreadsheet to preview
   '  so we have something to look at.
   PutInSomeStuff( oDoc )
   
   ' Now preview the spreadsheet..
   oDispatcher = createUnoService( "com.sun.star.frame.DispatchHelper" )
   oDispatcher.executeDispatch( oDocFrame, ".uno:PrintPreview", "", 0, Array() )
End Sub


Sub PutInSomeStuff( oDoc )
   ' Get first sheet.
   oSheet = oDoc.getSheets().getByIndex( 0 )
   ' Load it with something interesting to look at.
   oSheet.getCellRangeByName( "A1" ).setString( "Month" )
   oSheet.getCellRangeByName( "B1" ).setString( "Sales" )
   oSheet.getCellRangeByName( "A2" ).setString( "Jan" )
   oSheet.getCellRangeByName( "A3" ).setString( "Feb" )
   oSheet.getCellRangeByName( "A4" ).setString( "Mar" )
   oSheet.getCellRangeByName( "A5" ).setString( "Apr" )
   oSheet.getCellRangeByName( "A6" ).setString( "May" )
   oSheet.getCellRangeByName( "A7" ).setString( "Jun" )
   oSheet.getCellRangeByName( "B2" ).setValue( 4509.23 )
   oSheet.getCellRangeByName( "B3" ).setValue( 3705.45 )
   oSheet.getCellRangeByName( "B4" ).setValue( 2941.20 )
   oSheet.getCellRangeByName( "B5" ).setValue( 2132.11 )
   oSheet.getCellRangeByName( "B6" ).setValue( 1445.34 )
   oSheet.getCellRangeByName( "B7" ).setValue( 937.31 )
   
   ' Format some cells as currency.
   ' For a date formatting example, or other calc examples in general
   '  see this....
   '    http://www.oooforum.org/forum/viewtopic.php?t=4996
   oFormats = oDoc.getNumberFormats()
   oLocale = createUnoStruct( "com.sun.star.lang.Locale" )
   nNumKey = oFormats.getStandardFormat( com.sun.star.util.NumberFormat.CURRENCY, oLocale )
   oCell = oSheet.getCellRangeByName( "B2:B7" )
   oCell.NumberFormat = nNumKey
End Sub
Allerdings wird hier zunächst eine neue Datei erzeugt, dies ist nicht in meinem Sinne.
Wenn ich die Zeile:

Code: Alles auswählen

   oDoc = StarDesktop.loadComponentFromURL( "private:factory/scalc", "_blank", 0, Array() )
durch

Code: Alles auswählen

oDoc = ThisComponent
ersetze, komme ich zwar auch in die Seitenansicht, aber irgendetwas geht nebenbei den Bach runter. In der IDE bin ich plötzlich in "Meine Makros" und der ursprüngliche Quellcode ist verschwunden.

In VBA mache ich das übrigens mit .PrintPreview .

Würde mich freuen, wenn mir jemand weiter helfen könnte.

Ciao

Thomas

Verfasst: Mi, 03.01.2007 18:39
von Toxitom
Hey Thomas,

hmm, eigentlich ganz einfach: Lass den Makrorekorder laufen, der nimmt den folgenden Code auf (verkürzt):

Code: Alles auswählen

sub AnsichtWechseln
  document   = ThisComponent.CurrentController.Frame
  dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
  dispatcher.executeDispatch(document, ".uno:PrintPreview", "", 0, Array())
end sub
Tia, und der funktioniert - zumindest bei mir (OOo 2.1)
Das Makro weist du nun dem Button zu - fertig.

OK, der Rekorder ist sich unsicher und kommentiert die letzte Zeile aus - nimmst du das REM weg, ist alles OK.

Im Grunde hast du den Code ja auch selbst. Aber etwas habe ich nicht verstanden: Was machst du in der IDE? Wo hattest du den Code vorher gespeichert? Und wieso "weg"? Den Teil versteh ich nicht.

Gruss
Thomas

Verfasst: Do, 04.01.2007 09:35
von toni
Hallo Toxitom,

der Code funktioniert bei mir auch einmal.
Ich gehe folgendermaßen vor:

Ich öffne ein neues Calc-Dokument (Version 2.0).
Ich erstelle in der Entwicklungsumgebung ein neues Modul in der zum Dokument gehörigen Standard-Bibliothek und speicher den Code dort ab. Dann erstelle ich einen Button und weise die Sub zu.
Betätige ich dann den Button, gelange ich dann auch in die Seitenansicht. Soweit so gut.
Betätige ich den Button aber ein zweites mal, kommt die Fehlermeldung:

Ein Scripting Framework Fehler trat während der Ausführung von Basic script vnd.sun.star.script:Standard.Module1.AnsichtWechseln?.... auf
Meldung: BasicProviderImpl::getScript: no script!

Wenn ich die Sub aus der Entwicklungsumgebung heraus starte sieht man, dass im Fenster 'aktuelle Bibliothek' die Bibliothek wechselt:

Also, wenn ich den grünen Pfeil anklicke und die Sub ausführe, wechselt die aktuelle Bibliothek:
Vorher war ich in der Bibliothek [test.ods].Standard, danach lande ich in [Meine Makros&Dialoge].Standard.

Wenn ich den Code gleich in [Meine Makros&Dialoge].Standard ab speicher gibt es keine Probleme, aber das kann ja nicht Sinn der Sache sein, oder?

Gruss

Toni

Verfasst: Do, 04.01.2007 14:03
von Toxitom
Hey Toni,

hmm, das ist lustig....

Nein, so sollte es nicht sein und (bie mir) ist es auch nicht so. Da ist wohl etwas anderes "korrupt"
Welches BS und welche OOo Version nutzt du exakt? Wirklich die 2.0.0? Dann solltest du dringend "updaten", es gab schon die 2.0.1, 2.0.2, 2.0.3., 2.0.4 und aktuell die 2.1. Die ursprüngliche 2.0.0 hatte noch so einige Bugs, unter anderem im ScriptingBereich.
Kannst du überhaupt ein Makro in der Standard-Bibliothek eines Calc-dokumentes abspeicheren (in einem Modul) , dieses dann schliessen, OOo schliessen, OOo wieder öffnen und das Dokument auch, und ist das Makro (Bibliothek und Modul) dann noch da?

GRuss
Thomas

Druckvorschau

Verfasst: Fr, 05.01.2007 10:53
von toni
Hallo Thomas,

vielen Dank.

Mit der 2.1er Version klappt es tatsächlich.

Wäre trotzdem schön, wenn du dich mal melden könntest (siehe Email).

Gruss

Toni