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.
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
Beispiel wieder anbei.
Gruß R