einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

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: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von little fingers » Di, 23.05.2017 11:54

Danke Dir!

Habe ich direkt eingebaut, klappt aber leider nicht!
Ziel ist es, dass die Daten, die schon außerhalb des Bereichs A12:G330
angesammelt wurden, nach oben rutschen!
Das passiert leider nicht!
Hast vielleicht noch ne andere Lösung?

cya Ingo

Sorry Klappt doch!!! Vielen, Vielen Dank!!!!!

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von mikeleb » Di, 23.05.2017 11:20

Hallo,

Code: Alles auswählen

oBereich.rows.removebyindex(0,oBereich.rows.count)

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von little fingers » Di, 23.05.2017 09:00

Hallo

Code: Alles auswählen

oBereich.clearContents(1+2+4)'gelöscht werden Zahl, Datum, String
Wie müsste der Befehl lauten, wenn ich die entsprechenden Zeilen
löschen möchte, nicht nur den Content?

cya Ingo

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von little fingers » Mo, 22.05.2017 13:13

Super, vielen Dank

hat funktioniert!

Du hast mir sehr geholfen!!

cya Ingo

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von mikeleb » Mo, 22.05.2017 11:36

Hallo,
ergänze in der Schleife eine Code-Zeile:

Code: Alles auswählen

if aDaten(i)(2)<>0 then 'nur Zeilen mit Zelle C ungleich Null schreiben
			aDaten(i)(0)=cdate(aDaten(i)(0))
			oOutputStream.writestring(join(aDaten(i),";") & eol)
		end if

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von little fingers » Mo, 22.05.2017 10:03

hi mikeleb!!

Super Danke funzt echt schon spitzenmässig!!

I´m very happy !!!

Allerdings ist in Spalte A der Abgabe die Zahl als Datum eingetragen,
kann man das auch als Datum übergeben??

Vielen Dank jetzt schon, für die bisherige Umsetzung!!

cya Ingo

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von mikeleb » So, 21.05.2017 20:48

Hallo,
das Datumsproblem im Dateinamen lässt sich mit folgender Zeile lösen:

Code: Alles auswählen

sPfad="P:/statistik/" & format(now,"yyyy-mm-dd") & "_SAbgabe.csv"
Eine mehr direkte Art des Exports sollte mit folgendem Makro funktionieren:

Code: Alles auswählen

sub abgabe_direkt
	'Festlegen des Zeilenendezeichens
	eol=CHR$(10)
	'Textdatei vorbereiten
	oFileWrite = CreateUnoService("com.sun.star.ucb.SimpleFileAccess")
	oOutputStream = createUnoService("com.sun.star.io.TextOutputStream")
	oOutputStream.Encoding = "UTF-8"
	
	'Dateinamen erstellen
	sPfad="P:/statistik/" & format(now,"yyyy-mm-dd") & "_SAbgabe.csv"
	
	'Datei öffnen zum Schreiben
	oStream = oFileWrite.openFileWrite(sPfad)
	oOutputStream.setOutputStream(oStream)

	'Daten auslesen
	oDoc=thiscomponent
	oBereich=oDoc.Sheets.getbyName("Statistik-Abgabe").getCellRangeByName("A12:G330")
	aDaten=oBereich.getDataArray
	for i=0 to ubound(aDaten)
		if aDaten(i)(2)<>0 then 'nur Zeilen mit Zelle C ungleich Null schreiben
			oOutputStream.writestring(join(aDaten(i),";") & eol)
		end if 
	next
	'Datei schließen
	oOutputStream.closeOutput()
	'Bereich Inhalte löschen
	oBereich.clearContents(1+2+4)'gelöscht werden Zahl, Datum, String
end sub
Der Bereich A12:G330 wird zeilenweise in eine Textdatei geschrieben und anschließend gelöscht (ich nehme mal an, dass dort Zahlen, Daten, Strings stehen; Formeln würden z. B. nicht gelöscht).
Die Datei wird ohne Nachfrage erstellt und eine ggf. vorhandene Datei überschrieben.

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von little fingers » So, 21.05.2017 16:02

Hallo komma4,

Vielen Dank für das herzliche Willkommen!
Und Danke für die Mühe!!
Naiv, wie ich in der Materie bin, dachte ich eigentlich, dass ich mich da gut verstanden habe :roll: ,
so wie es versucht habe zu erklären! Im Nachhinein betrachtet, musste ich feststellen, dass es schon schwierig ist,
jemanden zu erklären, was man möchte, wenn man eigentlich keine Ahnung hat.

Also Details:
Ich nutze
Libreoffice 5.2.6.2
und hier ist das "gefundene" Codegeschnipsel
Du solltest uns nur beschreiben können, *wo* Du Schwierigkeiten hast - oder *was* nicht klappt.
Ich versuche es mal.

Code: Alles auswählen

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

sub Abgabe1
' Alle Zeilen löschen, do in Zeile C keine Stellplätze definiert sind!!
' nur einmal in der Woche Leerzeilen löschen!!! (Sonntag)

oDoc = ThisComponent
oSheets = oDoc.Sheets
oSheet = oSheets.getbyName("Statistik-Abgabe")
oRows = oSheet.getRows

Goto Start

Start:
for i = 330 to 12 step -1 ' zählt rückwärts , wegen INDEX

   oCell = oSheet.getCellByPosition(2,i)
   if oCell.Value = 0 Then 
      oRows.removeByIndex(i,1)
   End if

Next i
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 = "Nr"
args1(0).Value = 24

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

rem ----------------------------------------------------------------------
dim args2(0) as new com.sun.star.beans.PropertyValue
args2(0).Name = "ToPoint"
args2(0).Value = "$Statistik-Erfassung.$A$12:$G$330" ' Bereich der erfasst werden soll'

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

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

rem ----------------------------------------------------------------------
dim args4(0) as new com.sun.star.beans.PropertyValue
args4(0).Name = "Nr"
args4(0).Value = 25	

dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args4())

rem ----------------------------------------------------------------------
dim args5(0) as new com.sun.star.beans.PropertyValue
args5(0).Name = "ToPoint"
args5(0).Value = "$A$1"

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

rem ----------------------------------------------------------------------
dim args6(5) as new com.sun.star.beans.PropertyValue
args6(0).Name = "Flags"
args6(0).Value = "SVDNT"
args6(1).Name = "FormulaCommand"
args6(1).Value = 0
args6(2).Name = "SkipEmptyCells"
args6(2).Value = false
args6(3).Name = "Transpose"
args6(3).Value = false
args6(4).Name = "AsLink"
args6(4).Value = false
args6(5).Name = "MoveMode"
args6(5).Value = 4

dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args6())

rem ------------- Speichern als CSV --------------

Dim myProps(1) as New com.sun.star.beans.PropertyValue
sPath="P:/statistik/SAbgabe.csv"
 ' Automatisch mit Datum in Dateinamen wäre hilfreich z.B. 2017-05-21_SAbgabe.csv  (wobei die Datei auch *.ods sein kann!)
sUrl=ConvertToUrl (sPath)
myProps(0).Name = "FilterName"
myProps(0).Value ="Text - txt - csv (StarCalc)"
myProps(1).Name="FilterOptions"
myProps(1).Value ="59/9,34,33,1,1/1/2/1" 'string mit den Optionen
myDoc = thisComponent
myDoc.storeAsUrl(sUrl,myProps())

End Sub
Zur Zeit ist es so, dass tatsächlich die Daten in die SAbgabe.csv übertragen werden. Wo ich hier allerdings möchte, dass automatisch das Datum Bestandteil des Dateinamens werden soll.
Ferner werden die Daten aus der "$Statistik-Erfassung.$A$12:$G$330" nach erfolgter Abgabe noch nicht gelöscht.

Vielen Dank für die Hilfe!

cya Ingo

Re: einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von komma4 » Do, 18.05.2017 14:01

Willkommen im Forum!

Welchen OpenOffice Ableger (OOo/AOO/LO) und Version nutzt Du?
little fingers hat geschrieben: Mi, 17.05.2017 21:58Ich habe schon eine Weile gesucht und mich probiert
In welcher Programmiersprache?
Zeigst Du uns Deinen Code?
Wo "hapert" es?
little fingers hat geschrieben: Mi, 17.05.2017 21:58wenn man mir hier helfen könnte
Gerne...
Du solltest uns nur beschreiben können, *wo* Du Schwierigkeiten hast - oder *was* nicht klappt.

einen bestimmten Bereich aus einen Tabellenblatt mit datum speichern

von little fingers » Mi, 17.05.2017 21:58

Hallo!

Ich versuche gerade aus einer mehrseitigen Calc-Datei
einen bestimmten Bereich aus einem Tabellenblatt zu zu kopieren,
diesen in eine Datei, in einem vorgegebenen Pfad, die in dem Dateinamen
auch das Datum mit Uhrzeit beinhalten sollte, zu speichern.

Nach dem Speichern sollen die kopierten Daten im Original gelöscht werden!

Tabellenblatt = Abgabe (lfd.Nummer 24 im Dokument)
Bereich ist Variabel (in der Länge) grob aber $A$12:$G$300

Ich habe schon eine Weile gesucht und mich probiert, konnte aber bis jetzt
nicht wirklich fündig werden.

Wäre echt schön, wenn man mir hier helfen könnte.

cya Ingo

Nach oben