BITTE helfen Sie uns HEUTE mit einer SPENDE
Helfen Sie das OpenOffice Forum zu erhalten!
> KEINE WERBUNG FÜR REGISTRIERTE BENUTZER!<
Ihre Spende wird für die Deckung der laufenden Kosten sowie den Erhalt und Ausbau 🌱 des OpenOffice Forums verwendet.
🤗 Als Dankeschön werden Sie im Forum als OO-SUPPORTER gekennzeichnet. 🤗
Wortzahl automatisch auslesen und eintragen
-
- Beiträge: 4
- Registriert: Di 7. Aug 2018, 09:54
Wortzahl automatisch auslesen und eintragen
Hallo,
ich bin auf der Suche nach einer Lösung für die folgende Aufgabenstellung: Ich möchte in einer Tabelle eine bestimmte Zelle markieren und durch das Betätigen einer Schaltfläche ("Wortzahl einlesen") automatisch die Anzahl der Wörter in einem bestimmten Dokument auslesen und eintragen. Die nachfolgende Abbildung zeigt schematisch wie das Ganze funktionieren soll.
Ich wäre für jede Hilfe sehr dankbar. Leider kann ich bisher keinen eigenen Lösungsansatz hierfür liefern.
Mit freundlichen Grüßen
Cagliostro
ich bin auf der Suche nach einer Lösung für die folgende Aufgabenstellung: Ich möchte in einer Tabelle eine bestimmte Zelle markieren und durch das Betätigen einer Schaltfläche ("Wortzahl einlesen") automatisch die Anzahl der Wörter in einem bestimmten Dokument auslesen und eintragen. Die nachfolgende Abbildung zeigt schematisch wie das Ganze funktionieren soll.
Ich wäre für jede Hilfe sehr dankbar. Leider kann ich bisher keinen eigenen Lösungsansatz hierfür liefern.
Mit freundlichen Grüßen
Cagliostro
Re: Wortzahl automatisch auslesen und eintragen
Hallo,
Was für eine Art von Dokument ist das? Writer?Anzahl der Wörter in einem bestimmten Dokument
Gruß,
mikele
mikele
-
- Beiträge: 4
- Registriert: Di 7. Aug 2018, 09:54
Re: Wortzahl automatisch auslesen und eintragen
Hallo!
Ja, es handelt sich um ein Writer-Dokument mit der Endung *.odt
Gruß
Cagliostro
Ja, es handelt sich um ein Writer-Dokument mit der Endung *.odt
Gruß
Cagliostro
Re: Wortzahl automatisch auslesen und eintragen
Hallo,
dazu müsstest du ein Makro schreiben, das die gewünschte Datei öffnet und aus den Dokumenteneigenschaften die Wortanzahl ausliest.
dazu müsstest du ein Makro schreiben, das die gewünschte Datei öffnet und aus den Dokumenteneigenschaften die Wortanzahl ausliest.
Gruß,
mikele
mikele
Re: Wortzahl automatisch auslesen und eintragen
Moin,
ich hatte Lust da mal was zu basteln.
Der folgende Code öffnet ein Dateiauswahlfenster mit dem die Datei gewählt werden kann.
Dann erzeugt der Code in der gewählten Calc-Zelle einen Hyperlink zu eben dieser ausgewählten Datei.
Schlußendlich trägt er die Wortzahl in die Zelle rechts von der gewählten ein.
Beispiel anbei.
Einfach auf "Dokument analysieren" klicken.
Gruß R
ich hatte Lust da mal was zu basteln.
Der folgende Code öffnet ein Dateiauswahlfenster mit dem die Datei gewählt werden kann.
Dann erzeugt der Code in der gewählten Calc-Zelle einen Hyperlink zu eben dieser ausgewählten Datei.
Schlußendlich trägt er die Wortzahl in die Zelle rechts von der gewählten ein.
Code: Alles auswählen
Sub Worte_zaehlen
oSheet = Thiscomponent.currentController.activeSheet
oSelection = thisComponent.currentSelection
if oSelection.supportsService("com.sun.star.sheet.SheetCell") then
oCell = oSelection
else
msgbox ("Bitte eine einzelne Zielzelle auswählen",16,"Fehler")
exit sub
endif
arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE)
odialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
odialog.Initialize(arg())
odialog.appendFilter("ODT Writer (*.odt)", "*.odt")
odialog.DefaultName = "Datei wählen"
ok = odialog.execute()
if ok = 1 Then
datei = odialog.getFiles()
sURL = datei(0)
Dim FileProperties(2) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv (StarOffice Calc)"
FileProperties(1).Name = "USE_CONFIG"
FileProperties(1).Value ="3"
FileProperties(2).Name = "Hidden"
FileProperties(2).Value = True
odocument = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, FileProperties())
oCountCell = oSheet.getcellbyposition(oCell.Celladdress.column + 1,oCell.Celladdress.row)
oCell.String = sURL
oHyperField = Thiscomponent.createinstance("com.sun.star.text.TextField.URL")
oHyperField.URL = Convertfromurl(sUrl)
oHyperField.Representation = Convertfromurl(sUrl)
oTextCursor = ocell.CreateTextCursor
ocell.insertTextContent(oTextCursor,oHyperField,True)
oCountCell.value = Count_Words (odocument)
odocument.close - 1
end if
end sub
function Count_Words (odocument)as integer
oText = odocument.Text
oTextCursor = oText.createTextCursor
oTextCursor.collapseToStart
nCount = 0
while oTextCursor.gotoNextWord(false)
nCount = nCount + 1
wend
nCount = nCount + 1
Count_Words = nCount
End function
Einfach auf "Dokument analysieren" klicken.
Gruß R
- Dateianhänge
-
- Wörter_in_Writerdokumenten_zaehlen.ods
- (11.27 KiB) 127-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO
-
- Beiträge: 4
- Registriert: Di 7. Aug 2018, 09:54
Re: Wortzahl automatisch auslesen und eintragen
Hallo!
Vielen Dank für die Hilfe. Ich habe das Tool ein wenig getestet und musste feststellen, dass es ab einer gewissen Wortzahl eine Fehlermeldung gibt: "Unzulässiger Wert oder Datentyp. Überlauf." Dabei wird im Quelltext die Zeile: "Count_Words = nCount" markiert angezeigt. Das Dokument hat > 40 Seiten und > 30.000 Wörter.
Ist es möglich, dass nur eine bestimmte Anzahl an Wörter gezählt werden kann? Oder hängt es vielleicht mit Absätzen, Satz-/Sonderzeichen, Zahlen und leeren Zeilen zusammen?
Mit freundlichen Grüßen
Cagliostro
Vielen Dank für die Hilfe. Ich habe das Tool ein wenig getestet und musste feststellen, dass es ab einer gewissen Wortzahl eine Fehlermeldung gibt: "Unzulässiger Wert oder Datentyp. Überlauf." Dabei wird im Quelltext die Zeile: "Count_Words = nCount" markiert angezeigt. Das Dokument hat > 40 Seiten und > 30.000 Wörter.
Ist es möglich, dass nur eine bestimmte Anzahl an Wörter gezählt werden kann? Oder hängt es vielleicht mit Absätzen, Satz-/Sonderzeichen, Zahlen und leeren Zeilen zusammen?
Mit freundlichen Grüßen
Cagliostro
Re: Wortzahl automatisch auslesen und eintragen
Hi,
du hast Recht, das Zählen funktioniert nicht so gut. Selbst wenn ich den Hauptfehler, das eine INTEGER Variable nur maximal 32768 groß sein kann, ausmerze, zählt meine einfache Routine z.B. auch leere Absätze als Worte.
Darum habe ich mich nun eines Tricks bedient.
Die folgende Version öffnet das Writer Dokument im Hintergrund und fügt ganz am Anfang ein Wortzähl-Textfeld ein. Man kann es auch händisch eintragen:
Menü Einfügen/Feldbefehl/Andere... -> Reiter Dokument -> Feldtyp:Statistik -> Auswahl:Wörter
Dann liest die function Count_Words die Wortzahl aus dem Feld aus und das Dokument wird ohne es zu speichern wieder geschlossen.
Der ermittelte Wert wird ins Calc-Dokument übernommen.
Geht viel schneller und ist verlässlich.
Beispiel wieder anbei.
Gruß R
du hast Recht, das Zählen funktioniert nicht so gut. Selbst wenn ich den Hauptfehler, das eine INTEGER Variable nur maximal 32768 groß sein kann, ausmerze, zählt meine einfache Routine z.B. auch leere Absätze als Worte.
Darum habe ich mich nun eines Tricks bedient.
Die folgende Version öffnet das Writer Dokument im Hintergrund und fügt ganz am Anfang ein Wortzähl-Textfeld ein. Man kann es auch händisch eintragen:
Menü Einfügen/Feldbefehl/Andere... -> Reiter Dokument -> Feldtyp:Statistik -> Auswahl:Wörter
Dann liest die function Count_Words die Wortzahl aus dem Feld aus und das Dokument wird ohne es zu speichern wieder geschlossen.
Der ermittelte Wert wird ins Calc-Dokument übernommen.
Geht viel schneller und ist verlässlich.
Code: Alles auswählen
Sub Worte_zaehlen
oSheet = Thiscomponent.currentController.activeSheet
oSelection = thisComponent.currentSelection
if oSelection.supportsService("com.sun.star.sheet.SheetCell") then
oCell = oSelection
else
msgbox ("Bitte eine einzelne Zielzelle auswählen",16,"Fehler")
exit sub
endif
arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE)
odialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
odialog.Initialize(arg())
odialog.appendFilter("ODT Writer (*.odt)", "*.odt")
odialog.DefaultName = "Datei wählen"
ok = odialog.execute()
if ok = 1 Then
datei = odialog.getFiles()
sURL = datei(0)
Dim FileProperties(2) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv (StarOffice Calc)"
FileProperties(1).Name = "USE_CONFIG"
FileProperties(1).Value ="3"
FileProperties(2).Name = "Hidden"
FileProperties(2).Value = True
odocument = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, FileProperties())
oCountCell = oSheet.getcellbyposition(oCell.Celladdress.column + 1,oCell.Celladdress.row)
oCell.String = sURL
oHyperField = Thiscomponent.createinstance("com.sun.star.text.TextField.URL")
oHyperField.URL = Convertfromurl(sUrl)
oHyperField.Representation = Convertfromurl(sUrl)
oTextCursor = ocell.CreateTextCursor
ocell.insertTextContent(oTextCursor,oHyperField,True)
oCountCell.value = Count_Words (odocument)
odocument.close - 1
end if
end sub
function Count_Words (odocument) as long
oText = odocument.Text
oTextCursor = oText.createTextCursor
oTextCursor.collapseToStart
owordcountfield = odocument.createInstance("com.sun.star.text.TextField.WordCount")
otext.insertTextContent(oTextCursor, owordcountfield, false)
oTextCursor.gotostart(true)
Count_Words = oTextCursor.string
End function
Gruß R
- Dateianhänge
-
- Wörter_in_Writerdokumenten_zaehlen.ods
- (11.29 KiB) 125-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO
Re: Wortzahl automatisch auslesen und eintragen
Hallo,
was haltet ihr davon, die Dokumentenstatistik (in der ja auch dei Wörter gezählt werden) auszulesen?
Ich bin mir nur nicht sicher, ob die Wörterzahl immer die Eigenschaft Nr. 5 ist - käme auf einen Versuch an.
was haltet ihr davon, die Dokumentenstatistik (in der ja auch dei Wörter gezählt werden) auszulesen?
Code: Alles auswählen
Count_Words=odocument.getDocumentProperties().DocumentStatistics(5).value
Gruß,
mikele
mikele
Re: Wortzahl automatisch auslesen und eintragen
Hallo Mikele,
Ich habe die function jetzt mit Prüfung auf "WordCount" geändert:
Gruß Rik
Oje, logisch, das ist der richtige Weg! Danke.
Ich habe die function jetzt mit Prüfung auf "WordCount" geändert:
Code: Alles auswählen
Sub Worte_zaehlen
oSheet = Thiscomponent.currentController.activeSheet
oSelection = thisComponent.currentSelection
if oSelection.supportsService("com.sun.star.sheet.SheetCell") then
oCell = oSelection
else
msgbox ("Bitte eine einzelne Zielzelle auswählen",16,"Fehler")
exit sub
endif
arg = Array(com.sun.star.ui.dialogs.TemplateDescription.FILEOPEN_SIMPLE)
odialog = CreateUnoService("com.sun.star.ui.dialogs.FilePicker")
odialog.Initialize(arg())
odialog.appendFilter("ODT Writer (*.odt)", "*.odt")
odialog.DefaultName = "Datei wählen"
ok = odialog.execute()
if ok = 1 Then
datei = odialog.getFiles()
sURL = datei(0)
Dim FileProperties(2) As New com.sun.star.beans.PropertyValue
FileProperties(0).Name = "FilterName"
FileProperties(0).Value ="scalc: Text - txt - csv (StarOffice Calc)"
FileProperties(1).Name = "USE_CONFIG"
FileProperties(1).Value ="3"
FileProperties(2).Name = "Hidden"
FileProperties(2).Value = True
odocument = StarDesktop.loadComponentFromURL(sURL, "_blank", 0, FileProperties())
oCountCell = oSheet.getcellbyposition(oCell.Celladdress.column + 1,oCell.Celladdress.row)
oCell.String = sURL
oHyperField = Thiscomponent.createinstance("com.sun.star.text.TextField.URL")
oHyperField.URL = Convertfromurl(sUrl)
oHyperField.Representation = Convertfromurl(sUrl)
oTextCursor = ocell.CreateTextCursor
ocell.insertTextContent(oTextCursor,oHyperField,True)
oCountCell.value = Count_Words (odocument)
odocument.close - 1
end if
end sub
function Count_Words (odocument) as long
oDocumentStatistics = odocument.DocumentProperties.DocumentStatistics
bfound = false
for i = 0 to uBound (oDocumentStatistics)
oNamedValue = oDocumentStatistics(i)
if oNamedValue.Name = "WordCount" then
nCount = oNamedValue.Value
bFound = true
endif
next i
if not bFound then
msgbox ("In diesem Dokument fehlt die Eigenschaft Wortanzahl",16,"Fehler")
endif
Count_Words = nCount
End function
- Dateianhänge
-
- Wörter_in_Writerdokumenten_zaehlen.ods
- (11.35 KiB) 130-mal heruntergeladen
Windows 10: AOO, LO Linux Mint: AOO, LO