Ausgabe von Datensätzen per Makro in Writer-Dokument

Antwort erstellen


BBCode ist eingeschaltet
[img] ist ausgeschaltet
[url] ist eingeschaltet
Smileys sind ausgeschaltet

Die letzten Beiträge des Themas
   

Ansicht erweitern Die letzten Beiträge des Themas: Ausgabe von Datensätzen per Makro in Writer-Dokument

von recenseo » Di, 08.05.2007 17:08

http://www.dannenhoefer.de/forum/drucke ... 91e631bde4

- hier steht es, und auch ich kann mir da was zusammenstoppeln.

dadurch verändert sich der Code folgendermaßen:

Code: Alles auswählen

ocursor=otext.createtextcursor()
	
oText = oCursor.getText()
oText.insertControlCharacter( oCursor, com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK, False )
oCursor.BreakType = com.sun.star.style.BreakType.PAGE_BEFORE

otext.insertString(ocursor, "ID",false)
Mit dieser Änderung kann ich z.B. einen Bericht anlegen, der aus einem Dokument besteht, alle datensätze auf je einer Seite und untereinander darstellt, und der sich zudem noch in ein schönes PDF exportieren läßt. Toll.

Jetzt muß ich nur noch an der Ausgabeformatierung arbeiten.

Herzlichen Gruß an alle

Werner

Nee, ich muß mich wohl doch erst besser einarbeiten ...

von recenseo » Di, 08.05.2007 16:41

... weil ich merke, daß ich noch nicht gut genug verstehe.

Soweit ich verstanden habe, wird die Konstante in dem BTL-Dokument zur Beschreibung einer Absatzvorlage verwendet.

Vielleicht stehe ich ja auf dem Schlauch, aber: wie läßt sich die Konstante "com.sun.star.style.BreakType.PAGE_BEFORE" in das obige Skript möglichst einfach einbinden, ohne überhaupt eine Absatzvorlage zu definieren, was mir am liebsten wäre, da dies der generellere Ansatz wäre? Geht das überhaupt?

Gruß Werner

von komma4 » Di, 08.05.2007 15:56

ja, auch das kannst Du....


Beispiele für die Zuweisung/das Verwenden einer (bestimmten Paragraph-)Vorlage und das Einfügen eines Seitenumbruchs [Konstante heisst bei OOo bspw.: com.sun.star.style.BreakType.PAGE_BEFORE] findest Du hier: BTL - BasicTextListe

Hilft das weiter?

Lösung selbst gefunden, oder?

von recenseo » Di, 08.05.2007 15:34

Hallo,

nachdem ich die Frage so voreilig gestellt hatte, nun die Lösung: Könnte ich nicht im Makro der ersten ausgegeben Zeile eine Formatvorlage zuweisen, deren Textumfluss einen Seitenumbruch vor dem Absatz beinhaltet?

Ausgabe von Datensätzen per Makro in Writer-Dokument

von recenseo » Di, 08.05.2007 15:26

Hallo,

ich bin neu hier, habe aber nach längerem Suchen keine Auskunft darüber gefunden, wie man Datensätze aus einer OOBase-Datenbank untereinander in ein OOWriter-Dokument ausgeben kann, ohne dabei auf eine Tabelle zurückgreifen zu müssen (das wäre z.B. in einem Bericht aus der Datnbank der Fall).

Also: ich habe eine OO-Datenbank. Aus der jeweiligen Tabelle lese ich per Makro und HSQL die Daten aus. Sie werden in ein OOWriter-Dokument ausgegeben. Hinter jedem Datensatz kommt ein Absatzwechsel.

Nun möchte ich aber, daß jeder Datensatz auf eine Extraseite kommt. Dazu müßte ich nach dem jeweiligen ausgelesenen Datensatz einen Seitenumbruch einfügen, und zwar in die Schleife, die alle datensätze ausliest.

Ich kann den Befehl nicht finden. Alles was ich finde, ist, wie man einen Seitenwechsel in einer OOCalc-Tabelle einfügt.

BTW: Eine Lösung dieses Problems stellt einen ähnlichen Ansatz das wie die Berichtfunktion in MSAccess bzw. MSWord: dort können die einzelnen Datensätze ebenfalls in einzelne Seiten desselben Dokumentes ausgegeben werden.

Herzlichen Gruß an alle

Werner


----------------------------------------------------------
meine bisherigen, zusammengestoppelten Erfolge
----------------------------------------------------------

Code: Alles auswählen

Sub Main

DIM DatabaseContext AS OBJECT
DIM Datenquelle AS OBJECT
DIM Verbindung AS OBJECT
DIM Authentifizierung AS OBJECT
DIM SQL_Anweisung AS OBJECT
DIM Abfrageergebnis AS OBJECT

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")

' Datenbankkontext erzeugen
DatabaseContext = createUnoService("com.sun.star.sdb.DatabaseContext")

' Datenquelle wählen
Datenquelle = DatabaseContext.getByName("db-001")

' bei Bedarf Dialog für Passwortschutz aufrufen
IF NOT Datenquelle.IsPasswordRequired THEN
  Verbindung = Datenquelle.GetConnection("","")' ("Benutzername","Passwort")
ELSE
  Authentifizierung = createUnoService("com.sun.star.sdb.InteractionHandler")
  Verbindung = Datenquelle.ConnectWithCompletion(Authentifizierung)
END IF

' SQL-Kommunikationskanal aufbauen
SQL_Anweisung = Verbindung.createStatement()

' SQL-Abfrage ausführen
DIM Sql AS STRING
Sql = "SELECT ""id"", ""titel"" FROM ""verzeichnis"" WHERE ""gruppe"" = 'Abfragekriterium' ORDER BY ""id"" DESC"
Abfrageergebnis = SQL_Anweisung.executeQuery(Sql)

' SQL-Abfrageergebnis auswerten
IF NOT ISNULL(Abfrageergebnis) THEN

  WHILE Abfrageergebnis.next
  	odoc=thiscomponent 'bleibt immer gleich
	otext=odoc.text 'bleibt immer gleich
	ocursor=otext.createtextcursor() 'bleibt immer gleich
		
	otext.insertString(ocursor, "ID",false)
	otext.insertString(ocursor, chr(9),false)
	otext.insertString(ocursor, Abfrageergebnis.getString(1),false)
	otext.insertControlCharacter(ocursor, "PARAGRAPH_BREAK",false)
	otext.insertString(ocursor, "Titel",false)
	otext.insertString(ocursor, chr(9),false)
	otext.insertString(ocursor, Abfrageergebnis.getString(2),false)
	otext.insertControlCharacter(ocursor, "PARAGRAPH_BREAK",false)
	otext.insertControlCharacter(ocursor, "PARAGRAPH_BREAK",false)

  WEND ' nächster Datensatz
END IF

End Sub[b]
[/b]

Nach oben