BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das LibreOffice Forum zu erhalten!

❤️ DANKE >><< DANKE ❤️

> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des LibreOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet. 🤗

gelöst; variable Zellenzahl ermitteln

Alles zur Programmierung im LibreOffice.
Wanderer
Beiträge: 895
Registriert: Di 11. Feb 2014, 20:03
Wohnort: Berlin

Re: variable Zellenzahl ermitteln

Beitrag von Wanderer » Di 12. Jan 2021, 09:27

craig hat geschrieben:
Mo 11. Jan 2021, 18:10
URL=
file:///home/servus/Schreibtisch/Ha

Dass Makro durchleuchtet nun diese URL und sucht nach einer CSV-Datei, welche mit Hans beginnt und mit .csv endet.

Demnach wäre alle Dateien gültig welche beispielweise einen solchen Dateinamen hätten:
Hans_Banane_Datum_Uhrzeit.csv
Hans_Meier_Baum_Strasse.csv
Hans_Wien_2021-01-11_irgendwas.csv

Würden sich nun alle genannten Dateien oder mehr unter der URL-Adressierung
file:///home/servus/Schreibtisch/Ha
befinden, dann kommt es zu einem Konflikt und das Makro würde im jetzigen Zustand einen Fehler melden, weil sich mehr als eine gültige Datei unter der angegeben URL befindet.

Das muss vermieden werden!
...
Ich benenne bearbeitete Dateien in solchen Fällen um, z.B. von .csv auf .csv.imp für Importiert.
Damit verschwindet die Datei aus der Liste verfügbarer .csv-Dateien bleibt aber schnell zugänglich.

Mfg, Jörn
LO 6.0.7 (32Bit) Win8.1 Pro 32 Bit/ LO 6.3.2 Win10 64Bit / LO 6.0.7 Win7 Pro 64 Bit

nitja
Beiträge: 123
Registriert: Di 20. Okt 2020, 15:55

Re: variable Zellenzahl ermitteln

Beitrag von nitja » Di 12. Jan 2021, 11:15

Hier erst mal ein nächster Ansatz für die "Polar"-Vorlage und das Makro.
Hat noch reichlich "Luft nach oben", aber schau Dir mal das Konzept an.
Wie Du mit der zip-Datei umgehst kennst ja von der letzten Version. *

Diese Häufigkeitsverteilung lässt sich natürlich auch per Makro machen, dann schrumpft die Vorlage noch mal erheblich. Außerdem schreit sowas eigentlich nach einem Diagramm ("chart"). Was meinst dazu?

*) Die hier seinerzeit angehängte zip-Datei ist mittlerweile obsolet, da mir die Anregungen von craig & wanderer zu gut gefallen haben, um nicht noch einmal mit dem Makro zu spielen.

viewtopic.php?p=86957#p86957
Zuletzt geändert von nitja am Do 14. Jan 2021, 17:32, insgesamt 2-mal geändert.
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: variable Zellenzahl ermitteln

Beitrag von craig » Di 12. Jan 2021, 17:18

Hallo Jörn,
Jörn hat geschrieben:Ich benenne bearbeitete Dateien in solchen Fällen um, z.B. von .csv auf .csv.imp für Importiert.
Damit verschwindet die Datei aus der Liste verfügbarer .csv-Dateien bleibt aber schnell zugänglich.
Danke für Deinen Hinweis.

Ja, es gibt verschiedene Möglichkeiten eine Eindeutigkeit herzustellen.

Die Frage ist: Wie weit soll die Automatisierung gehen?
An dieser Stelle sind eben Grenzen vorhanden und u.U. ein manuelles Eingreifen nötig.

Deshalb habe ich den Filepicker vorgeschlagen:
Die URL für das CSV-Verzeichnis kann im Filepicker vorgeben werden,
dann braucht man nur die gewünschte Datei auswählen.
2 Klicks: Datei markieren und mit OK übernehmen.
Der Rest läuft automatisch.

Ich warte eigentlich nur auf eine aussagekräftige Rückmeldung
von Natal, wie er schlußendlich verfahren möchte.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

natal
Beiträge: 119
Registriert: So 8. Mär 2020, 20:03

Re: variable Zellenzahl ermitteln

Beitrag von natal » Do 14. Jan 2021, 14:06

Hallo craig
Ich antworte erst eimal Dir und später nitja.
Weil ich mich gleichzeitig mit mehrere Antworten von Euch beschäftigt habe, habe ich immer nur mehr Ungereimtheiten produziert.
Ich habe versucht sie zu lösen und seitdem funktioniert gar nichts mehr, weder bei Dir noch bei nitja.
Unverständlich für Euch, bei Euren genauen Beschreibungen, aber ich habe das geschafft.

Bei Dir gelingt es mir nicht mehr, die Extension CSV_Import.oxt in den Extension Manager einzufügen.
Ich öffne unter deinem Modul Hans_Meerkatz (Bild1) den Extension Manager, dann Klick auf Hinzufügen, dann wähle ich die Extension CSV_Import.oxt und öffne sie, aber der Extension Manager bleibt leer.

Wie in den Objektkatalog die LO-Textdatei Extension installiere.odt gekommen ist, weis ich nicht.
Ich bekomme auch immer wieder eine Fehlermeldung beim Öffnen einer LO-Datei (Bild2).

Vielleicht kommst Du mit diesen wenigen Infos schon zurecht.

Gerade denke ich mir, ich sollte vielleicht am Anfang die Anzahl der Module auf einen Deinen Modul Hans_Meerkatz begrenzen um die Anzahl der möglichen Fehlerquellen zu reduzieren.

Gruß
natal
Dateianhänge
Bild1.png
Bild1.png (62.9 KiB) 1331 mal betrachtet
Bild2.png
Bild2.png (25.83 KiB) 1331 mal betrachtet

nitja
Beiträge: 123
Registriert: Di 20. Okt 2020, 15:55

Re: variable Zellenzahl ermitteln

Beitrag von nitja » Do 14. Jan 2021, 17:31

Hier also die neue "Polar-neu".
Die Dateiauswahl ist nach den Anregungen von craig & wanderer jetzt weiter automatisiert:
Wenn im Arbeitsverzeichnis* nur eine passende csv-Datei ist, wird die verwendet ohne dass der Filepicker erscheint.
Wenn hier ↑ mehrere passende csv-Dateien existieren, werden die im Filepicker zur Auswahl gelistet.
Nach der Verarbeitung wird die csv-Datei abgehakt (….csv✔) und so nicht mehr zur Verarbeitung verwendet. (Es sei denn, dass - etwa zum Testen - das Häkchen manuell wieder entfernt wird.

*) … ist dasjenige, von wo die Vorlage aufgerufen (angeklickt) wird.
Ich benutze dafür ein Link auf die eigentliche Vorlage, die in einem für LibreOffice eingetragenen Vorlagenverzeichnis gespeichert ist. Der Speicherort sorgt dafür, dass man die Vorlage selbst bei Bedarf auch ohne weitere Verrenkungen editieren kann.

Die Vorlage hat ein wenig Kosmetik bekommen.

Hier noch das aktuelle Makro (in der zip-Datei als Polar-neu.bas):

Code: Alles auswählen

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

Option Explicit

const sSign as string = "Hans Meerkatz"
const sPrfx as string = "Hans_Meerkatz_"

dim sPath as variant, iPickedCSV as integer, sCSVname as string, taStart(1) as date, n(2,0) as long, vaData(86400) as variant, test

Sub Main
	dim sNewName as string, pvNoArgs()
	With ThisComponent
		If .hasLocation Then Exit Sub
		If Not .SupportsService("com.sun.star.sheet.SpreadsheetDocument") Then Exit Sub
		If Not(.sheets(0).name=sSign) Then Exit Sub
		Do
			PickCSV
			If iPickedCSV>2 Then Exit Sub
		Loop While iPickedCSV<2
		ReadCSV(sCSVname)
		WriteToTable
		sNewName = sSign & " - " & Replace(vaData(0)(0),"-",".") & ", " & Replace(vaData(0)(1),":","։")
		.sheets(0).name = sNewName
		sNewName = sPath & "/" & sNewName & ".ods"
		.StoreAsUrl(sNewName, pvNoArgs())
		name sCSVname as sCSVname & "✔"
	End With
End Sub

Sub PickCSV
	dim oDateiauswahl as object
	If isEmpty(sPath) Then
		sPath = split(ThisComponent.StringValue, "/")
		redim preserve sPath(ubound(sPath)-2)
		sPath = join(sPath, "/")
	End If
	If iPickedCSV=1 Then
		oDateiauswahl = createunoservice("com.sun.star.ui.dialogs.FilePicker")
		With oDateiauswahl
			.appendFilter("'" & sPrfx & "….csv'-Dateien", sPrfx & "*.csv")
			.SetDisplayDirectory(sPath)
			.execute
			sCSVname = .Files(0)
		End With
	Else
		sCSVname = dir(sPath & "/" & sPrfx & "*.csv",0)
		If dir="" Then : sCSVname = sPath & "/" & sCSVname
		Else : sCSVname = "" : iPickedCSV = 1 : exit Sub
		End If
	End If
	If Not (Left(Right(sCSVname,37),14)=sPrfx And LCase(Right(sCSVname,4))=".csv") Then
		If MsgBox(Chr(13) & Chr(13) & "keine '" & sPrfx & "….csv'-Datei",5+16,"ungültige Dateiauswahl")=4 Then : iPickedCSV = 1
		Else : iPickedCSV = 3
		End If
		exit Sub
	End If
	iPickedCSV = 2
End Sub

Sub ReadCSV(sCSVname as string)
	dim oSFA, oTIS, oCSV, vaLine as variant
	oSFA = createUnoService("com.sun.star.ucb.SimpleFileAccess")
	oTIS = createUnoService("com.sun.star.io.TextInputStream")
	oCSV = oSFA.OpenFileReadWrite(sCSVname)
	oTIS.SetInputStream(oCSV.getInputStream)
	oTIS.readLine						' die erste Zeile mit den Kopf-Überschriften - brauchen wir nicht
	vaLine = split(oTIS.readLine,",")	' die zweite Zeile mit den Kopf-Daten: Datum, Startzeit, Dauer usw.
	taStart(0) = DateSerial(Right(vaLine(2),4),Mid(vaLine(2),4,2),Left(vaLine(2),4))
	taStart(1) = TimeValue(vaLine(3))
	oTIS.readLine						' die dritte Zeile mit den Überschriften der Messdaten - brauchen wir nicht
	do until oTIS.isEOF
		vaLine = split(oTIS.readLine,",")
		vaData(n(0,0)) = Array(CDate(Frac(taStart(1)+TimeValue(vaLine(1)))), vaLine(1), iif(vaLine(2),vaLine(2)," "))
		n(0,0) = n(0,0)+1
	loop
	redim preserve vaData(n(0,0)-1)
End Sub

Sub WriteToTable
	dim vaHR(3) as variant
	With ThisComponent.Sheets(0)
		.getCellRangeByPosition(1,1,2,n(0,0)+2).NumberFormat=41
		.getCellRangeByPosition(1,3,3,n(0,0)+2).setFormulaArray(vaData())
		With .getCellRangeByPosition(3,3,3,n(0,0)+2)
			vaHR(0) = Format(.computeFunction(com.sun.star.sheet.GeneralFunction.AVERAGE),"0.00")
			vaHR(1) = Format(.computeFunction(com.sun.star.sheet.GeneralFunction.STDEV),"0.00")
			vaHR(2) = .computeFunction(com.sun.star.sheet.GeneralFunction.MAX)
			vaHR(3) = .computeFunction(com.sun.star.sheet.GeneralFunction.MIN)
		End With
		vaData(0) = Array(Format(taStart(0),"DD.MM.YYYY"), taStart(1), Format(vaData(n(0,0)-1)(1),"H:MM:SS"), _
					vaHR(0) & " ± " & vaHR(1), vaHR(0), vaHR(2), vaHR(3))
		ReDim Preserve vaData(0) as variant
		.getCellRangeByPosition(0,1,6,1).setFormulaArray(vaData())
		n(1,0) = n(0,0) - .getCellRangeByPosition(3,3,3,n(0,0)+2).computeFunction(com.sun.star.sheet.GeneralFunction.COUNTNUMS)
		n(2,0) = n(0,0) - n(1,0)
		.getCellRangeByPosition(0,3,0,5).setDataArray(n())
	End With
End Sub
… und ja - das kann auch noch ein wenig Optimierung & Kosmetik vertragen. Zeigt aber das Konzept gut und funktioniert auch.
Dateianhänge
Polar-neu.7z
(35.09 KiB) 84-mal heruntergeladen
LO 24.2.0.3 (X86_64) auf Linux 6.6.19-1-MANJARO, gnome 45.4, (gtk 4) gtk3 für LO

natal
Beiträge: 119
Registriert: So 8. Mär 2020, 20:03

Re: variable Zellenzahl ermitteln

Beitrag von natal » Do 14. Jan 2021, 18:23

Hallo nitja
Ich werde mich mit Deiner Nachricht nicht sofort beschäftigen.
Den Fehler, mit meinen Kenntnissen auf mehreren Hochzeiten zu tanzen, möchte ich nicht wiederholen.
Es hat nur dazu geführt, dass am Ende nichts mehr funktioniert hat.

hallo craig
Ich habe den Objektkatalog bis auf einen Modul Hans_Meerkatz geleert (Bild1).
Jetzt bleibt doch nur, wie Du geschrieben hast, die folgenden Schritte zu erledigen:
* Menü Extras → Extension Manager
* Button "Hinzufügen"
* CSV_Import.oxt auswählen und öffnen (die Extension habe ich in einem Ordner am Schreibtisch gespeichert)
* Office Neustart

Aber es funktioniert nicht, das Extension-Manager-Fenster bleibt leer und es kommt auch keine Aufforderung zum Office Neustart.
Wo kann das hacken, es sieht doch so einfach aus?

Gruß
natal
Dateianhänge
Bild1.png
Bild1.png (60.01 KiB) 1314 mal betrachtet

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: variable Zellenzahl ermitteln

Beitrag von craig » Do 14. Jan 2021, 18:38

Hallo Natal,
Natal hat geschrieben:Wo kann das hacken, es sieht doch so einfach aus?
Ggf. an LO 6.4.6.2.

Ich habe gelesen, dass es unter Linux besser ist, die in der Distribution mitgelieferte Office-Version zu behalten.

Viele Wege führen nach Wien und Umgebung... ;)
Wenn Dein Office mit den neueren Extension nicht klarkommt, dann gibt es noch einen anderen, manuellen Weg.

Ist in Arbeit.

Bis gleich...
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

natal
Beiträge: 119
Registriert: So 8. Mär 2020, 20:03

Re: variable Zellenzahl ermitteln

Beitrag von natal » Do 14. Jan 2021, 20:11

Hallo craig
Das Eigenartige dabei ist, dass es schon einmal funktioniert hat.
viewtopic.php?f=12&t=33154&start=50#p86905

craig
Beiträge: 1137
Registriert: Do 21. Apr 2016, 11:42

Re: variable Zellenzahl ermitteln

Beitrag von craig » Do 14. Jan 2021, 22:05

Hallo Natal,
Natal hat geschrieben:Das Eigenartige dabei ist, dass es schon einmal funktioniert hat.
Hier stellt sich mir die Frage:
Mit welcher Methode hast Du meine Extension gelöscht?
Hinweis:
Extensions sollten immer nur mit dem Extension-Manager hinzugefügt oder entfernt werden, denn
dahinter verbirgt sich ein komplexer Vorgang, welcher Dein Benutzerprofil (user-Verzeichnis) beeinflußt.
https://wiki.documentfoundation.org/UserProfile/de hat geschrieben: GNU/Linux
/home/<Benutzername>/.config/libreoffice/4/user (LibreOffice 4 bis 7)
Hinweis:
Dies gilt für die LibreOffice-Pakete, die von The Document Foundation vertrieben werden. Von Ihrer Linux-Distribution bereitgestellte Versionen verwenden möglicherweise einen etwas anderen Pfad.
Es ist enorm wichtig, dass Du Dir von Deinem Benutzprofil von Zeit zu Zeit Backup's anlegst!
Es kommt leider immernoch relativ häufig vor, dass dieses z.B. bei Programmabstürzen, sonstiges zerschossen werden.

Es ist möglich das Benutzerprofil zu rekonsturieren, in dem man dass alte Profil umbenennt z.B. in User-old, dann
wird beim nächsten Neustart von Office automatisch ein blitzblankes Profil erstellt. Leider hat dies den Nachteil,
dass alle benutzerdefinierten Einstellungen, Vorlage, Symbolleisten, Tastenkombinationen, Extensions, Makros,
Filehistory, usw. verloren sind.
Ich sichere deshalb relativ häufig Backup's und verwende z.B. solche Verrzeichnisnamen:

user - Version_Datum_Uhrzeit
user - v7-0-4-2_20210110_163300

Letzte Sicherung 10.01.2021 um 16:33Uhr

An dieser Stelle Frage ich mich, wieviele benutzerdefinierte Einstellungen hast Du bereist vorgenommen?
Wenn es nicht all zuviele, würde ich Dir raten zuerst ein Backup zu erstellen, in dem Du den
bestehenden Ordner einfach umbenennst. Aber auf keinen Fall löschen!
Nach einem Neustart von Office wird ein neues Profil angelegt.
Jetzt versuche meinee Extension nochmals per Extension-Manager zu installieren.
Funktioniert es :?:

------------------------------------
Extensions die Zweite:
Ich habe versucht einige meiner selbsterstellten Extensions unter LibreOffice 6.2.5.2 Portable zu installieren, dies schlug in einigen Fällen fehl.
Einige wurden im Extension-Manager angezeigt aber in der Basic-IDE (Objektkatalog) nicht.
Offensichtlich gibt es hier einen Bug, welcher erst in den neueren Versionen behoben wurde.

Ich habe ein kleine Doku in Impress erstellt, welche die Zufuß-Methode zur Erstellung eigener Makro-Bibliotheken aufzeigt.
Bitte folge erst der Impress-Anleitung, wenn Du die EQxtension zuvor nicht installieren konntest:
Dies ist die Impress-Datei:
Impress Makroverwaltung neue Bibliothek.odp
(339.31 KiB) 91-mal heruntergeladen
und hier die Textdatei mit dem Code für das Modul „modCSVImport“:
modCSVImport.bas.zip
(7.2 KiB) 114-mal heruntergeladen
Bitte umbenennen in modCSVImport.bas
Es ist nur der Code in Plaintext enthalten, welcher in das Modulblatt zu kopieren ist.
Meine Makros & Dialoge → libPolar → modCSVImport

Öffne nun das Makro Sub [CSV_DATEN importieren] und passe die URL und den Datenfeldseparator an:
  • URL
    Zeile 67

    Code: Alles auswählen

    sUrl="file:///home/servus/Schreibtisch/Ha"
  • Datenfeld-Separator (Komma oder Semikolon)
    Zeile 123

    Code: Alles auswählen

    		' der erste Token (59) der Filteroptionen gibt den Datenfeld-Separator an:
    		' Kommata	= 44
    		' Semikola	= 59
            mFileProps(1).Name = "FilterOptions" : mFileProps(1).Value = "59,34,76,1,,0,false,true,true,false"
  • Schließe alle Office-Applikationen und starte neu, damit diese Änderungen gespeichert werden.
    Das Schließen ist erforderlich, damit die Änderungen in Deinem Benutzerprofil (user-Verzeichnis) gepseichert werden.
  1. Die „Hans*.csv“-Datei sollte sich nun als einzige in dem von Dir angegebenen Verzeichnis befinden:
    sUrl="file:///home/servus/Schreibtisch/Ha"
  2. Jetzt kannst Du meine zuvor gesendete Doku-Vorlage öffnen.
    Lasse Dir hiervon ein neues Dokument erzeugen, der Rest läuft automatisch.
Perfekt ist das Makro noch nicht, es geht mir hier ausschließlich darum, ob die Richtung stimmt.
Danach klären wir, welche Funktionen Du brauchst.

Bin gespannt auf Deine Rückmeldung, besonders in Bezug auf die Extension.
Gruß

Craig

Nie die Sicherungskopie vergessen!

════════════════════════════════════════════════
WIN 10 Pro 64-Bit • LO 7.4.5.1 (x64) • AOO 4.1.8

natal
Beiträge: 119
Registriert: So 8. Mär 2020, 20:03

Re: variable Zellenzahl ermitteln

Beitrag von natal » Fr 15. Jan 2021, 21:08

Hi craig
Die Installation des modCSVImport Moduls hat funktioniert, aber nicht mit der Extensionvariante.
Da ich 2 Festplatten benutze und die augenblicklichen Versuche auf der 2ten Platte (meine Versuchsplatte) durchführe, habe ich, um sicher zu gehen, dass keine störenden Reste herumliegen, LinuxMint20.1 komplett neu installiert.
Eigentlich bedeutet das, dass LO Probleme mit der Makro-Extension-Variante hat.
Hätte es nicht schon einmal funktioniert.
Aber auch Du hast schon festgestellt, dass es manchmal funktioniert und manchmal nicht.

Hier gibts noch ein Problem.
* ich habe die ZIP-Datei Dokuvorlage_20210105_v02 Ext.ots.zip entpackt
* und unter Vorlagen abgelegt (Bild1)
* nach dem Start von modCSVImport (bild2)
* kam eine Fehlermeldung (Bild3)

SOS

Gruß natal
Dateianhänge
Bild1.png
Bild1.png (39.28 KiB) 1284 mal betrachtet
Bild2.png
Bild2.png (100.74 KiB) 1284 mal betrachtet
Bild3.png
Bild3.png (15.66 KiB) 1284 mal betrachtet

An alle, die das LibreOffice-Forum nutzen:


Bitte beteiligen Sie sich mit 7 Euro pro Monat und helfen uns bei unserem Budget für das Jahr 2024.
Einfach per Kreditkarte oder PayPal.
Als Dankeschön werden Sie im Forum als LO-SUPPORTER gekennzeichnet.

❤️ Vielen lieben Dank für Ihre Unterstützung ❤️

Antworten