Seite 1 von 1
infos bezueglich speichern und laden und drucken
Verfasst: Mi, 20.02.2008 21:33
von keksi1970
Hi Leute,
ich habe mal wieder ein paar Fragen bezueglich des Speicherns und des Ladens von Tabellen per Makro:
1. das Speichern einer Datei klappt inzwischen ganz gut, das Makro bricht nur ab, wenn eine Datei bereits existiert. Wie kann ich also eine Datei auf Nachfragen überschreiben ??
2. Ich habe ein Verzeichnis mit unterschiedlich vielen Dateien. Nun möchte ich per Macro alle "ausgefüllten Tabellenblätter " in einer neuen Datei zusammenfügen können, diese bei Bedarf aber auch wieder in den dazugehörigen Dateien speichern können. Irgendwelche Vorschläge ?
3. Drucken per Makro. Da immer nur ein vorher mit Druckbereich festgelegter Bereich gedruckt werden soll, aber das Drucken per symbol aus irgendeinem Grund immer das komplette Tabellenblatt druckt und auch noch der Drucker festgelegt werden soll, wüsst ich gerne etwas mehr bzgl Druckersteuerung (Drucker ansprechen, Markierung festlegen, Anzahl Kopien)
vielen DAnk für Eure Hilfe schon mal
Gruß Andreas
Re: infos bezueglich speichern und laden und drucken
Verfasst: Do, 21.02.2008 09:46
von komma4
keksi1970 hat geschrieben:1. das Speichern einer Datei klappt inzwischen ganz gut, das Makro bricht nur ab, wenn eine Datei bereits existiert. Wie kann ich also eine Datei auf Nachfragen überschreiben ??
Eine Nachfrage musst Du selbst programmieren, hier ein Beispiel für das Setzen des benötigten "Überschreiben!" Attributs
Code: Alles auswählen
Dim FileProperties(0) As New com.sun.star.beans.PropertyValue
If FileExists( sURL ) Then
FileProperties(0).Name = "Overwrite"
FileProperties(0).Value = True
End If
ThisComponent.storeToURL( sURL, FileProperties() )
keksi1970 hat geschrieben:2. Ich habe ein Verzeichnis mit unterschiedlich vielen Dateien. Nun möchte ich per Macro alle "ausgefüllten Tabellenblätter " in einer neuen Datei zusammenfügen können, diese bei Bedarf aber auch wieder in den dazugehörigen Dateien speichern können. Irgendwelche Vorschläge ?
Ist machbar....
Willst Du sie physisch verschieben - oder verlinken?
Anders gefragt: Was machst Du damit? Warum sollen sie in einer Datei zusammengefasst, dann aber wieder zurück gebracht werden?
keksi1970 hat geschrieben:3. Drucken per Makro. Da immer nur ein vorher mit Druckbereich festgelegter Bereich gedruckt werden soll, aber das Drucken per symbol aus irgendeinem Grund immer das komplette Tabellenblatt druckt und auch noch der Drucker festgelegt werden soll, wüsst ich gerne etwas mehr bzgl Druckersteuerung (Drucker ansprechen, Markierung festlegen, Anzahl Kopien)
Da solltest Du bei
Andrew mal ins Dokument schauen
HTH
Re: infos bezueglich speichern und laden und drucken
Verfasst: Do, 21.02.2008 11:12
von keksi1970
Hallo,
Zu 1 Dankeschön für die nette Routine, den Rest schaff ich
zu 2. es ist einfacher, alle Tabellen zwecks Bearbeitung und Kontrolle in einem Dokument zu haben, die ich dann mit meinem Dialog ansteuern kann. Zurück in einzelne Dateien müssen Sie, da die Rechnungserstellen auf Dateibasis erfolgt und nicht in mein Aufgabengebiet gehört (ich also keinen Einfluss auf die weiterführende Bearbeitung habe). Sollte das auch mit links funktionieren, die automatisch die dateien mitändern wäre die Lösung auch OK
zu 3. hmmm auf Englisch und ich mit meinen Rumpfkenntnissen ^^
Gruß Andreas
Re: infos bezueglich speichern und laden und drucken
Verfasst: Fr, 22.02.2008 23:28
von keksi1970
huhu winfried,
sag an, kannst du mir helfen, die Dateien am besten physisch in einer Datei zusammenzufassen, allerdings nur die ausgefüllten Tabellen, Kriterium zum suchen soll Zelle F2 sein (Leer=weglassen, Inhalt=hinzufügen)
ich weiss da ja gar nicht wie ich das beginnen soll
Gruß Andreas
Re: infos bezueglich speichern und laden und drucken
Verfasst: Sa, 23.02.2008 14:06
von komma4
Was bedeutet: "zwecks Bearbeitung und Kontrolle"?
*Brauchst* Du die Blätter in einer Datei - oder denkst Du nur, dass es damit einfacher wird zu drucken?
Was passiert bei zwischenzeitlichen Änderungen, wenn Du kopieren solltest?
Sind es alle Dateien im fraglichen Verzeichnis, die zu bearbeiten sind? (keine Writer- oder sonstige Dokumente dort?)
Was wäre mit:
Code: Alles auswählen
Für alle CalcDateien im Verzeichnis
öffne_CalcDatei ' lock, gg. Änderungen
Für alle Blätter in CalcDatei
Wenn F2 gefüllt
drucke_Druckbereich()
nächstes Blatt (bis Ende Blätter)
speichere_CalcDatei
nächste_CalcDatei (bis Ende CalcDateien)
Ende
Du möchtest auch einen "
Verzeichnis wählen"-Dialog?
Ausgabe auf welchem Drucker? (Standard, Dokumenteneinstellung, Netzwerk, ?)
Die Aktion sollte protokolliert werden?
Datei: Berlin.ods , Blatt: MRZ_Mayer bearbeitet, 2008-02-23 12:34:56
Re: infos bezueglich speichern und laden und drucken
Verfasst: Sa, 23.02.2008 18:28
von keksi1970
hi winfried,
das erste antworten hat irgendwie nicht geklappt, also halt ich mich beim 2. mal kürzer
Bearbeitung und Kontrolle bedeuten, dass ich innerhalb des Verzeichnisses, in dem sich nur von mir ausgefüllte Dokumente befinden (tabellen, innerhalb von meinen Dateien, keine systemdateien, kein .docs, keine sonstigen. nur reine ODS-dateien, die alle gleich aufgebaut sind), alle ausgefüllten Tabellen noch einmal kontrollieren muss, da sich darin kein einziger Fehler befinden darf.
Ich finde es daher einfacher, alle ausgefüllten Tabellen in einer Datei zusammenzufassen, dann einen Dialog aufzurufen, der mir nacheinander jede tabelle anzeigt, und sollte ich Änderungen (mit Hilfe des Dialogs) vornehmen, diese auch in der entsprechenden Datei speichern. Das Drucken wird ebenfalls einfacher, da ich erst nach der Kontrolle das jeweilige Tabellenblatt drucke, (netzwerkdrucker/auswahl:mMarkierung/ Kopien 1bis2)
Bisher rufe ich JEDE Datei einzeln auf, Überprüfe sie, gehe dann auf 'Datei'-'Drucken','Drucker wählen',-'Auswahl-Markierung'-'Anzahl-Kopien'
und das bei ca 150 ausgefüllten Tabellen in verschiedenen Dateien.
Gruß Andreas
EDIT : ein verzeichnis wählen dialog brauche ich nicht, da das Verzeichnis immer das aktuelle Datum + 1 Tag, bzw am Freitag + 3 Tage ist. die Änderung am Ende des Monats/Anfang nächster Monat kann ich per Hand vornehmen (statt 02, 03 und gut ^^)
Re: infos bezueglich speichern und laden und drucken
Verfasst: So, 24.02.2008 12:33
von komma4
keksi1970 hat geschrieben:gehe dann auf 'Datei'-'Drucken','Drucker wählen',-'Auswahl-Markierung'-'Anzahl-Kopien'
Das kann ein Makro erledigen, auf Tastenkombination der linken Hand, dann kannst Du mit der rechten die Maus bedienen.
Die Herausforderung bei Deiner Aufgabenstellung ist, dass der
workflow mehrere Makros verlangt (wg. Fokuswechsel zu den Blättern).
Jedenfalls ist zeitweise Kopieren viel zu aufwändig, wenn Du an den Originaldaten ändern darfst.
Code: Alles auswählen
DruckerName = "Laserdrucker"
Dim DruckerOpt(0) as New com.sun.star.beans.PropertyValue
DruckerOpt(0).Name = "Name"
DruckerOpt(0).Value = DruckerName
oDokument.setPrinter( DruckerOpt() )
Deine "Markierung" ist mir noch nicht klar: ist das ein selektierter Zellbereich?
"Alle Dateien öffnen" geht mit STRG+A im
Datei>Öffnen-Dialog.
Die Umschaltung nach Arbeitstag lässt sich leicht realisieren:
Code: Alles auswählen
' undokum. Funktion
sPfadTrenner = _
getPathSeparator()
' Basis
sBasisVerz = _
"/zentrale/firma/2008/testdata/"
' Windows
'"d:\daten\Rechnungen\"
' Wochentag bestimmen
' Freitags, Samstags, Sonntags: Montag berechnen
' sonst: nächsten Tag
Select Case WeekDay( Now() )
' Freitag
Case 6
ZielDatum = Now() + 3
' Samstag
Case 7
ZielDatum = Now() + 2
' sonst: Folgetag
Case Else
ZielDatum = Now() + 1
End Select
' Bestandteile des Zielverzeichnis
' als 2-stellige Zeichenketten, Jahr 4-st.
sTag = _
Format( Day( ZielDatum ) , "00" )
sMonat = _
Format( Month( ZielDatum ) , "00" )
sJahr = _
Year( ZielDatum )
sJahr2 = _
Right( sJahr, 2 )
' Bestandteile zusammensetzen
' Beispielformat: jjjj/mm-tt
sZielVerz = _
sBasisVerz & _
sJahr & _
sPfadTrenner & _
sMonat & _
"-" & _
sTag
Print sZielVerz
Einen Dateidialog (Beispiel in der Bibliothek "Tools") mit der gerade erstellten Zeichenkette als Startpfad aufrufen und alle Dateien öffnen, die gewählt wurden.
Kommen wir irgendwie weiter?
Re: infos bezueglich speichern und laden und drucken
Verfasst: So, 24.02.2008 17:18
von keksi1970
Danke Winfried,
und Ja, Teilweise kommen wir weiter.
zum Druckproblem, mit Markierung ist ein von mir schon festgelegter Druckbereich (Format/Druckbereiche/festlegen) gemeint, der bei allen Tabellen gleich ist.Ich weiss nur nicht, wie ich halt einen Netzwerkdrucker anspreche, und immer nur diesen (von 4) und dann die Option mit der Markierung festlege (und immer nur diese Markierung). Die Auswahl der AnzahlKopien ist nebensächlich, da maximal von jedem Tabellenblatt 2 gedruckt werden.Ich brauche zwar 6 Kopien, aber nicht zur selben Zeit. Das mit dem WEiterschalten der Ansicht auf das nächste oder aktuelle Arbeitsblatt ist nicht das Problem, das macht mein Dialog schon
nur das mit dem Öffnen der Dateien, hmmm, mir wäre es lieber, wenn ich alle ausgefüllten Tabellen in einer einzigen Datei zusammenfassen könnte, da ich so die Arbeitseinteilung selbst bestimmen kann (ich kann nicht alle Tabellen direkt nacheinander bearbeiten, sondern mal 5, mal 6 usw). Zum zurückschreiben gibt es eindeutige Merkmale, die jede Tabelle Kennzeichnen, der Dateiname setzt sich zusammen aus c1+datum
Gruss Andreas
Re: infos bezueglich speichern und laden und drucken
Verfasst: So, 24.02.2008 20:00
von komma4
Bei festgelegten Druckbereichen werden nur diese gedruckt, das musst Du nicht mehr spezifizieren.
Druckerwechsel am aktuellen Dokument?:
Code: Alles auswählen
Dim DruckerOpt(0) as New com.sun.star.beans.PropertyValue
DruckerOpt(0).Name = "Name"
DruckerOpt(0).Value = "PDF-Konverter"
ThisComponent.setPrinter( DruckerOpt() )
Der
DruckerName wird angegeben, wie er im Einstellungsdialog lautet.
Bleibt das Kopieren?
Re: infos bezueglich speichern und laden und drucken
Verfasst: So, 24.02.2008 20:35
von keksi1970
na, ich muss dem drucker irgendwie sagen, dass er nur die auswahl drucken soll
nochmals kurz: ich klicke bei jedem Tabellenblatt auf "Datei"-"Drucken"-"Auswahl". sollte ich vergessenhaben, das Feld Auswahl zu markieren, druckt mir dieses Ding 20 unerwünschte Seiten (KA wieso, ich muss das halt akzeptieren) (nur zur Erklärung

)
Zum anderen Problem mit dem Laden der DAteien, eine Alternative wäre, jede Tabelle einzeln zu laden, und nach der Kontrolle in der zugehörigen Datei abzuspeichern. Dann müsste ich allerdings einen Counter haben, der irgendwo anders abgespeichert wird, sonst kontrolliere ich Dateien mehrfach oder vergesse welche.
Re: infos bezueglich speichern und laden und drucken
Verfasst: So, 24.02.2008 21:53
von komma4
keksi1970 hat geschrieben:na, ich muss dem drucker irgendwie sagen, dass er nur die auswahl drucken soll
Das hast Du mit dem Festlegen der Druckbereiche ja bereits getan. Diese werden bei der Basic-Anweisung berücksichtigt.
Zum Counter: im
Datei>Öffnen Dialog hast Du die Uhrzeit.... Sortiere nach Änderungszeit.
Re: infos bezueglich speichern und laden und drucken
Verfasst: Mo, 25.02.2008 15:03
von keksi1970
naja, das sortieren nach änderungszeit und das einzelne Öffnen der Dateien ist mir irgendwie zu lästig, daher würde ich ja gerne per Makro das ganze in einer Datei zusammenfassen.
Würde die ganze Weiterbearbeitung sehr vereinfachen.
Gruss Andreas
btw : das mit dem Drucken klappt inzwischen, ich definiere per Makro einfach den Druckbereich neu, (komischerweise funktioniert das sonst nicht, habe immer noch 10 nicht gewünschte Seiten)
EDIT das mit dem Überschreiben funktioniert nicht wie gewünscht. ich hab das als unterroutine overwrite geschrieben, mit Abfrage wollen Sie usw. aber das Makro überschreibt einfach die Datei, ohne zu Fragen. dann hab ich die Overwrite - Routine gelöscht und das Makro überschreibt immer noch die Dateien und gibt nicht mal ne Fehlermeldung raus ?
Hier die Speichern-Routine
Code: Alles auswählen
SUB Speichern
dim dummy()
odoc = thiscomponent
datumsortieren
spedsheet = oDoc.Sheets(0)
mycell = spedsheet.getCellRangeByName("c1")
myString= mycell.string
mystring1 = (mystring+"_"+Datumsortiert)
Dateiname = InputBox ("Geben Sie bitte den Dateinamen ein:",mystring, mystring1)
Speicherort = InputBox ("Geben Sie bitte ein Verzeichnis ein:", "0", "file:///L:/tourenplanung/Ü-Schein/"+datumsortiert+"/")
mydoc = ThisComponent
myUrl= Speicherort + Dateiname+".ods"
mydoc.storeasurl(myurl, dummy)
msgbox "Ihre Datei wurde gespeichert"
End Sub
warum wir die Datei gespeichert ohne mir zu sagen : "ahhh Fehler, Datei schon da " ????
Re: infos bezueglich speichern und laden und drucken
Verfasst: Mo, 25.02.2008 16:21
von komma4
Ich kam noch nicht zu Versuchen Tabellenblätter zu hin- und her zu kopieren...
Du verwendest
storeAsURL() - da gibt es wohl "nur" bei falschem Pfad (oder falschen Exportfiltern) eine
exception...
Zwei Lösungen:
Vorher mit
FileExists( url ) abfragen, ob es die Datei gibt, und dann beim
storeAsURL() ggfs. das Überschreiben verbieten oder erlauben(das hatte ich unten schonmal gepostet) :
Code: Alles auswählen
Dim saveOpt(0) As New com.sun.star.beans.PropertyValue
saveOpt(0).Name = "Overwrite"
saveOpt(0).Value = False
ThisComponent.storeAsURL( myURL, saveOpt() )
dann bekommst Du eine unschöne Exception-Meldung

Re: infos bezueglich speichern und laden und drucken
Verfasst: Mo, 25.02.2008 17:14
von keksi1970
danke, habe die Fileexist abfrage eingebeaut, nun funktionierts wie gewünscht
gruß Andreas
Re: infos bezueglich speichern und laden und drucken
Verfasst: Di, 26.02.2008 13:38
von keksi1970
so, ich wieder.
Hallo alle Interessierten, abei die komplette Speicherroutine :
Code: Alles auswählen
SUB Speichern
dim dummy()
odoc = thiscomponent
datumsortieren
spedsheet = oDoc.Sheets(0)
mycell = spedsheet.getCellRangeByName("c1")
myString= mycell.string
mystring1 = (mystring+"_"+Datumsortiert)
Dateiname = InputBox ("Geben Sie bitte den Dateinamen ein:",mystring, mystring1)
Speicherort = InputBox ("Geben Sie bitte ein Verzeichnis ein:", "0", "file:///L:/tourenplanung/Ü-Schein/"+datumsortiert+"/")
mydoc = ThisComponent
myUrl= Speicherort + Dateiname+".ods"
If FileExists( MyURL ) Then
Speichern1 = Inputbox("Überschreiben Ja/Nein","0")
end if
If Speichern1 = "ja" then
mydoc.storeasurl(myurl, dummy)
msgbox "Ihre Datei wurde gespeichert"
else
MSGbox "Datei nicht gespeichert"
exit sub
end if
End Sub
SUB Datumsortieren
DIM Jahr as String
DIM Monat as String
DIM Tag as String
DIM DADA1 as String 'Platzhalter monat separieren
select case weekday ( now() )
case 6
Aktdatum = left(now()+3, 10)
case else
aktdatum = Left(now()+1,10)
end select
morgen = aktdatum
TAG = left (Morgen, 2)
dada1 = left (Morgen, 5)
Monat = right(dada1, 2)
Jahr = right (Morgen, 4)
Datumsortiert = Jahr+"_"+MONAT+"_"+Tag
end sub
und noch eine Frage zum Drucken, wo füge ich obiges von die ein ?? also Druckername und Drucker festlegen und so ^^
Code: Alles auswählen
sub Drucken
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(2) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Copies"
args1(0).Value = 1
args1(1).Name = "Selection"
args1(1).Value = true
args1(2).Name = "Collate"
args1(2).Value = false
dispatcher.executeDispatch(document, ".uno:Print", "", 0, args1())
end sub
Gruß Andreas