I think this can do what you strive for.
# Continuously updating word count import unohelper, uno, os, time from com.sun.star.i18n.WordType import WORD_COUNT from com.sun.star.i18n import Boundary from com.sun.star.lang import Locale from com.sun.star.awt import XTopWindowListener #socket = True socket = False localContext = uno.getComponentContext() if socket: resolver = localContext.ServiceManager.createInstanceWithContext('com.sun.star.bridge.UnoUrlResolver', localContext) ctx = resolver.resolve('uno:socket,host=localhost,port=2002;urp;StarOffice.ComponentContext') else: ctx = localContext smgr = ctx.ServiceManager desktop = smgr.createInstanceWithContext('com.sun.star.frame.Desktop', ctx) waittime = 1 # seconds def getWordCountGoal(): doc = XSCRIPTCONTEXT.getDocument() retval = 0 # Only if the field exists if doc.getTextFieldMasters().hasByName('com.sun.star.text.FieldMaster.User.WordCountGoal'): # Get the field wordcountgoal = doc.getTextFieldMasters().getByName('com.sun.star.text.FieldMaster.User.WordCountGoal') retval = wordcountgoal.Content return retval goal = getWordCountGoal() def setWordCountGoal(goal): doc = XSCRIPTCONTEXT.getDocument() if doc.getTextFieldMasters().hasByName('com.sun.star.text.FieldMaster.User.WordCountGoal'): wordcountgoal = doc.getTextFieldMasters().getByName('com.sun.star.text.FieldMaster.User.WordCountGoal') wordcountgoal.Content = goal # Refresh the field if inserted in the document from Insert > Fields > # Other... > Variables > Userdefined fields doc.TextFields.refresh() def printOut(txt): if socket: print txt else: model = desktop.getCurrentComponent() text = model.Text cursor = text.createTextCursorByRange(text.getEnd()) text.insertString(cursor, txt + '\r', 0) def hotCount(st): '''Counts the number of words in a string. ARGUMENTS: str st: count the number of words in this string RETURNS: int: the number of words in st''' startpos = long() nextwd = Boundary() lc = Locale() lc.Language = 'en' numwords = 1 mystartpos = 1 brk = smgr.createInstanceWithContext('com.sun.star.i18n.BreakIterator', ctx) nextwd = brk.nextWord(st, startpos, lc, WORD_COUNT) while nextwd.startPos != nextwd.endPos: numwords += 1 nw = nextwd.startPos nextwd = brk.nextWord(st, nw, lc, WORD_COUNT) return numwords def updateCount(wordCountModel, percentModel): '''Updates the GUI. Updates the word count and the percentage completed in the GUI. If some text of more than one word is selected (including in multiple selections by holding down the Ctrl/Cmd key), it updates the GUI based on the selection; if not, on the whole document.''' model = desktop.getCurrentComponent() try: if not model.supportsService('com.sun.star.text.TextDocument'): return except AttributeError: return sel = model.getCurrentSelection() try: selcount = sel.getCount() except AttributeError: return if selcount == 1 and sel.getByIndex(0).getString == '': selcount = 0 selwords = 0 for nsel in range(selcount): thisrange = sel.getByIndex(nsel) atext = thisrange.getString() selwords += hotCount(atext) if selwords > 1: wc = selwords else: try: wc = model.WordCount except AttributeError: return wordCountModel.Label = str(wc) if goal != 0: pc_text = 100 * (wc / float(goal)) #pc_text = '(%.2f percent)' % (100 * (wc / float(goal))) percentModel.ProgressValue = pc_text else: percentModel.ProgressValue = 0 # This is the user interface bit. It looks more or less like this: ############################### # Word Count _ ox # ############################### # _____ # # 451 / |500| # # ----- # # ___________________________ # # |############## | # # --------------------------- # ############################### # The boxed `500' is the text entry box. class WindowClosingListener(unohelper.Base, XTopWindowListener): def __init__(self): global keepGoing keepGoing = True def windowClosing(self, e): global keepGoing keepGoing = False setWordCountGoal(goal) e.Source.setVisible(False) def addControl(controlType, dlgModel, x, y, width, height, label, name = None): control = dlgModel.createInstance(controlType) control.PositionX = x control.PositionY = y control.Width = width control.Height = height if controlType == 'com.sun.star.awt.UnoControlFixedTextModel': control.Label = label elif controlType == 'com.sun.star.awt.UnoControlEditModel': control.Text = label elif controlType == 'com.sun.star.awt.UnoControlProgressBarModel': control.ProgressValue = label if name: control.Name = name dlgModel.insertByName(name, control) else: control.Name = 'unnamed' dlgModel.insertByName('unnamed', control) return control def loopTheLoop(goalModel, wordCountModel, percentModel): global goal while keepGoing: try: goal = int(goalModel.Text) except: goal = 0 updateCount(wordCountModel, percentModel) time.sleep(waittime) if not socket: import threading class UpdaterThread(threading.Thread): def __init__(self, goalModel, wordCountModel, percentModel): threading.Thread.__init__(self) self.goalModel = goalModel self.wordCountModel = wordCountModel self.percentModel = percentModel def run(self): loopTheLoop(self.goalModel, self.wordCountModel, self.percentModel) def wordCount(arg = None): '''Displays a continuously updating word count.''' dialogModel = smgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialogModel', ctx) dialogModel.PositionX = XSCRIPTCONTEXT.getDocument().CurrentController.Frame.ContainerWindow.PosSize.Width / 2.2 - 105 dialogModel.Width = 100 dialogModel.Height = 30 dialogModel.Title = 'Word Count' lblWc = addControl('com.sun.star.awt.UnoControlFixedTextModel', dialogModel, 6, 2, 25, 14, '', 'lblWc') lblWc.Align = 2 # Align right addControl('com.sun.star.awt.UnoControlFixedTextModel', dialogModel, 33, 2, 10, 14, ' / ') txtGoal = addControl('com.sun.star.awt.UnoControlEditModel', dialogModel, 45, 1, 25, 12, '', 'txtGoal') txtGoal.Text = goal #addControl('com.sun.star.awt.UnoControlFixedTextModel', dialogModel, 6, 25, 50, 14, '(percent)', 'lblPercent') ProgressBar = addControl('com.sun.star.awt.UnoControlProgressBarModel', dialogModel, 6, 15, 88, 10,'' , 'lblPercent') ProgressBar.ProgressValueMin = 0 ProgressBar.ProgressValueMax =100 #ProgressBar.Border = 2 #ProgressBar.BorderColor = 255 #ProgressBar.FillColor = 255 #ProgressBar.BackgroundColor = 255 addControl('com.sun.star.awt.UnoControlFixedTextModel', dialogModel, 124, 2, 12, 14, '', 'lblMinus') controlContainer = smgr.createInstanceWithContext('com.sun.star.awt.UnoControlDialog', ctx) controlContainer.setModel(dialogModel) controlContainer.addTopWindowListener(WindowClosingListener()) controlContainer.setVisible(True) goalModel = controlContainer.getControl('txtGoal').getModel() wordCountModel = controlContainer.getControl('lblWc').getModel() percentModel = controlContainer.getControl('lblPercent').getModel() ProgressBar.ProgressValue = percentModel.ProgressValue if socket: loopTheLoop(goalModel, wordCountModel, percentModel) else: uthread = UpdaterThread(goalModel, wordCountModel, percentModel) uthread.start() keepGoing = True if socket: wordCount() else: g_exportedScripts = wordCount,
Link for more information
https://superuser.com/questions/529446/running-word-count-in-openoffice-writer
Hope this helps review volume
EDIT: Then I found this
http://forum.openoffice.org/en/forum/viewtopic.php?f=7&t=22555