einzelnes Tabellenblatt speichern, Dateiname generieren

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

dcssd
***
Beiträge: 50
Registriert: Mi, 10.03.2010 13:12

einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von dcssd »

Hallo OO-Gemeinde,

ich hoffe ihr könnt mir helfen.

Und zwar habe ich eine Datei mit 6 Tabellenblättern. Allerdings wird nur ein Blatt bearbeitet, die anderen 5 sind nur Hilfsdaten mit ner Menge an Daten.
Aus Platz gründen und um Ladezeiten zu vermeiden möchte ich nach fertiger Bearbeitung allerdings nur das eine Blatt speichern.
Zuvor muss ich allerdings die Formeln (welche auf die anderen Blätter zugreifen) in Werte ändern (das hab ich noch hinbekommen, mitn Makro).
Hab auch schon versucht mit einem Makro die nicht benötigten Tabellen anschließend zu löschen, allerdings speichert ers dann nicht Automatisch unter einem generierten Namen.
Danke schonmal
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: einzelnes Tabellenblatt speichern

Beitrag von komma4 »

dcssd hat geschrieben:allerdings speichert ers dann nicht Automatisch unter einem generierten Namen.
Das solltest Du mir/uns mal erklären:

wie generierst Du den Namen, wie übergibst Du ihn der Calc-Datei?

Welche OOo Version, welches Betriebssystem.... wäre vllt.auch noch interessant
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
dcssd
***
Beiträge: 50
Registriert: Mi, 10.03.2010 13:12

Re: einzelnes Tabellenblatt speichern

Beitrag von dcssd »

Betriebsystem ist Winxp 32
OO- Version 3.2

zu dem speichern, das klingt wahrscheinlich schwieriger als es eigentlich ist.

Aus den eingegebenen Daten setzt sich wie eine Fortlaufende Nummer zusammen aus verschiedensten Daten (Nummer, Abmessung, Datum)
Dem Makro hab ich zugewiesen, dass er diese Fortlaufende Nummer (welche immer anders ist) als Speichername nehmen soll. Allerdings will er die Datei unter dem aktuellen Namen speichern und bringt ne Fehlermeldung (zum glück, sonst wäre ja alles weg)

Hoffe ich konnte es halbwegs erklären.
clag
********
Beiträge: 3570
Registriert: Di, 27.01.2009 15:30

Re: einzelnes Tabellenblatt speichern

Beitrag von clag »

Hallo dcssd

wenn du das öfter vorhast und ich dein Anliegen richtig verstehe
würde ich es einmal mit 2 Calc-Dateien und externen Verknüpfungen versuchen.

Dann kannst du die "ErgebnissTabelle" (Datei_1) separat anlegen und speichern
und die Hilfsdaten (Datei_2) werden transparent im Hintergrund geladen ......

nah, wie wäre es damit !?
LG
clag

nutzt: WinXP SP3 / AOO 4.1.10 / Firefox
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: einzelnes Tabellenblatt speichern

Beitrag von komma4 »

dcssd hat geschrieben:Hoffe ich konnte es halbwegs erklären.
Ja, dass schon.

Um das nachvollziehen zu können benötigen wir aber Einsicht in den Code... bitte hier einstellen (mit CODE-tags versehen, zwecks Lesbarkeit).

Vielleicht können Dir die Kollegen hier zwischenzeitlich weiter helfen, bin nun erstmal bei einer zweistündigen Ölmassage, dann beim Abendessen (dauert auch 2 Std.), anschl. treffe ich Kollegen in der Stadt... wird dauern, bis ich wieder hier am Computer bin.



Moderation,4: Werde den Thread gleich in den BASIC-Bereich verschieben.
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
dcssd
***
Beiträge: 50
Registriert: Mi, 10.03.2010 13:12

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von dcssd »

sooo hallo,

tut mir leid das ich so lange hab warten lasse, ich wurde in dem WM-Urlaub geschickt. :D

Hier nun der bisherige Code,

Code: Alles auswählen

REM  *****  BASIC  *****


sub Main
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:Copy", "", 0, Array())


end sub




sub Speichern1
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$G$63"

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array())

rem ----------------------------------------------------------------------
rem dispatcher.executeDispatch(document, ".uno:Open", "", 0, Array())


end sub
(Hoffe das sind Code-tags)

Wenn jemand da eine Idee hat wäre es schön wenn ers auch schreiben würde.
Ist allerdings auch derzeit nur ein Nebenprojekt, hat also keine Eile.

Vielen Dank im Voraus schonmal.

Edit: @clag

Danke für die Antwort, allerdings funktioniert das leider nicht, da in den Hilfstabellen auch rein geschrieben wird (Es handelt sich u.a. um 3 große Tabllen mit gleichem Aufbei, aber anderen Inhalt, in denen mithilfe eines Sverweises (das Suchkriterium wird eingetragen) die benötigten Werte in der ersten Tabelle übernommen werden.) (oha)
dcssd
***
Beiträge: 50
Registriert: Mi, 10.03.2010 13:12

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von dcssd »

Hat keiner ne Idee wie und ob das funktionieren könnte?
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von komma4 »

Was klappt denn nun nicht - wie weit bist Du?


Werde aus dem Dispatcher-Code nicht schlau... da wird nur ein bestimmter Bereich (bis G63?) kopiert....
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
dcssd
***
Beiträge: 50
Registriert: Mi, 10.03.2010 13:12

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von dcssd »

hallo Komma4

bin nicht viel weiter, eigentlich gar nicht.

der bereich bis "g36" ist der Bereich einer A4 Seite, die ich veruscht hatte so zu kopieren und in ein neues Dokument einfügen wollte. (Damits alleine steht)

Derzeit versuche ich über einen indirekten Verknüpfung mir vll 2 Tabellen zu sparen, aber das funktioniert noch nicht. Mit dem Basic komm ich nicht klar :(

Edit: Jetzt funktioniert es, also das mit dem indirekten Verknüpfen, spart aber grademal 100 kb, also leider nutzlos. Am besten wäre es schon wenn ich irgendwie das erte Tabellenblatt einzeln speichern könnte.
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von komma4 »

dcssd hat geschrieben:möchte ich nach fertiger Bearbeitung allerdings nur das eine Blatt speichern.
Möchte gerne nochmal auf Dein Anfangsposting zurück kommen.



Wie wäre es denn den Datenbereich "bis G63" (ab A1?) als PDF zu exportieren? Sollte (bei reinen Zahlen/Texten) gegenüber einem ODF-Format auch ein Platzgewinn bringen (=> schnellere Ladezeit).

Und: wie sollte der Name zum Speichern denn "generiert" werden?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
dcssd
***
Beiträge: 50
Registriert: Mi, 10.03.2010 13:12

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von dcssd »

Die Idee mit der PDF ist nicht so schlecht, allerdings sollte die Datei nachträglich noch bearbeitbar bleiben. So müsste ich ja immer die "Grunddatei" öffnen und alles neu eingeben, nur wegen (angenommen) einer Änderung.

ja die Seite geht von A1 bis G36

generiert ist vll der falsche Begriff. Er Soll aus einer Zelle einen Text nehmen und dann automatisch speichern (das kopieren in die Zwischenablage geht)
Was nicht geht, und was ich mit generieren meinte, Ein Makro soll sich diesen Speichernamen nehmen und dann auch darunter im gleichen Ordner abspeichern (funktionier bisher nur soweit dass das Speichern-Fenster auf ist und der Name in der Zwischenablage ist). Das ist zwar so auch ganz ok, allerdings dachte ich, wenn ich einmal nachfrage, frag ich das gleich mit. (Kurz: "Speichern unter" mit aus Zelle genommenen Namen per Makro). Die Zelle wäre N4 (in der ist allerdings ne Formel)
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von komma4 »

dcssd hat geschrieben:Die Idee mit der PDF ist nicht so schlecht, allerdings sollte die Datei nachträglich noch bearbeitbar bleiben. So müsste ich ja immer die "Grunddatei" öffnen und alles neu eingeben, nur wegen (angenommen) einer Änderung.
Also - nach dem Ändern musst Du Speichern, ob Du das als Calc oder PDF machst spielt keine Rolle.


Der Einfachheit halber habe ich nun aufgezeichnet:

* das Definieren eines Druckbereichs
* das Exportieren als PDF - dabei wird der Dateiname aus N4 des aktuellen Blattes geholt.

Anzupassen im Skript sind durch Dich
* der Name des Verzeichnisses, wo die PDF abgelegt werden soll (erste Zeile; Windows-Syntax bspw. "d:/daten/verzeichnis/")

Zum Ausführen auf die auszugebende Seite (Tabellenblatt) gehen und Makro laufen lassen.

Code: Alles auswählen


' Linux: vom root-Verzeichnis aus
' Windows: bspw. d:/daten/2010/
CONST cVerzeichnis = "zentrale/firma/daten/2010/"
sub print_Calc2PDF
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 ----------------------------------------------------------------------
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$1:$G$36"

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

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DefinePrintArea", "", 0, Array())

rem ----------------------------------------------------------------------


sBlattName = document.Controller.ActiveSheet.Name
sZellwertN4 = _
 ThisComponent.Sheets().getByName( sBlattName ).getCellRangeByName( "N4" ).String



dim args3(1) as new com.sun.star.beans.PropertyValue
args3(0).Name = "URL"
args3(0).Value = "file:///" & cVerzeichnis & sZellwertN4 & ".pdf"
args3(1).Name = "FilterName"
args3(1).Value = "calc_pdf_Export"

dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args3())


end sub

Das Makro in einer STANDARD-Bibliothek Deiner OOo-Installation abgelegt und mit einer freien Tastenkombination verbunden: fertig!


Kommst Du damit zurecht?
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
dcssd
***
Beiträge: 50
Registriert: Mi, 10.03.2010 13:12

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von dcssd »

Danke erstmal
habs eingefügt und auf ne Schaltfläche gelegt,
bekomme allerdings leider nen Fehler:

BASIC-Laufzeitfehler.
Eigenschaft oder Methode nicht gefunden: CurrentController.

bei dieser Zeile:

Code: Alles auswählen

sBlattName = document.CurrentController.ActiveSheet.Name
Benutzeravatar
komma4
********
Beiträge: 5332
Registriert: Mi, 03.05.2006 23:29
Wohnort: Chon Buri Thailand Asia
Kontaktdaten:

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von komma4 »

nehme das Current aus der Anweisung raus:

Code: Alles auswählen

  sBlattName = document.Controller.ActiveSheet.Name

Werde es gleich oben korrigieren - kommt davon, wenn man mit anderen Testdaten arbeitet 8)
Cheers
Winfried
aktuell: LO 5.3.5.2 30m0(Build:2) SUSE rpm, unter Linux openSuSE Leap 42.3 x86_64/KDE5
DateTime2 Einfügen von Datum/Zeit/Zeitstempel (als OOo Extension)
dcssd
***
Beiträge: 50
Registriert: Mi, 10.03.2010 13:12

Re: einzelnes Tabellenblatt speichern, Dateiname generieren

Beitrag von dcssd »

okee das ging erstmal,
bis der nächste Fehler kam.. (langsam wirds peinlich das ich aber auch garnix über das zeug weiß :oops: )

Fehler beim Speichern des Dokumentes Vorlage Prod
Die Operation auf \\.\ wurde mit einem ungültigen Parameter gestartet.

:-?
Antworten