https://bugs.documentfoundation.org/show_bug.cgi?id=99541
Bug ID: 99541 Summary: '.uno:GoToCell' call selects an entire column IF the target cell is in column C. Product: LibreOffice Version: 5.1.2.2 release Hardware: x86-64 (AMD64) OS: Linux (All) Status: UNCONFIRMED Severity: normal Priority: medium Component: Calc Assignee: libreoffice-bugs@lists.freedesktop.org Reporter: f...@yonkitime.com Created attachment 124684 --> https://bugs.documentfoundation.org/attachment.cgi?id=124684&action=edit buggy output on top, expected output on bottom Discovered while working on a python macro inside Calc (Ubuntu and Win10). I have no idea whether it's a Calc bug or an uno bug or a... Using Dispatcher to select a cell pointed to by string newcell (i.e. newcell = 'A3' for first column, third row) and then write the newcell value to the selected cell. Snippet: # move pointer to cell 'newcell' oProp.Name = 'ToPoint' oProp.Value = newcell properties = (oProp,) dispatcher.executeDispatch( frame, '.uno:GoToCell', '', 0, properties ) # Writes the (intended) cell location to that cell oProp.Name = 'StringName' oProp.Value = newcell properties = (oProp,) dispatcher.executeDispatch( frame, '.uno:EnterString', '', 0, properties ) If 'newcell' points to a cell in any column except column C (A3, B17, D2, etc.) then that cell is selected and the code works exactly as you'd expect. But if newcell points to any location in column C, an entire column is selected, and that column is determined by newcell's *row*. So newcell = 'A3' selects cell A3. But newcell = 'C1' selects *all* of column A. newcell = 'C4' selects *all* of column D, etc. It only appears to be column C (though I haven't tested it past column F). Bug appears on LO 5.1.2.2 on both Ubuntu 16.04 and Windows 10, both 64 bit. The full python macro (to be launched from inside calc) is below and I've attached the output it produces. There's additional code below (not in the snippet above) that is supposed to change 5 cells in the selected row to $xx.xx currency format. The output shows that the call to column C caused entire rows (B-F) to change to $xx.xx format. ######################################################################## from com.sun.star.beans import PropertyValue # import uno # doesn't seem necessary # I confess I still don't really understand the structures # in the next 6 lines - I just hacked away until it all worked. desktop = XSCRIPTCONTEXT.getDesktop() ThisComponent = XSCRIPTCONTEXT.getDocument() sheet = ThisComponent.getSheets().getByIndex(0) frame = ThisComponent.getCurrentController().getFrame() ctx = XSCRIPTCONTEXT.getComponentContext() dispatcher = ctx.ServiceManager.createInstanceWithContext( 'com.sun.star.frame.DispatchHelper', ctx ) ######################################################################## def StartHere(dummy): for i in range(0,7): # generate a block of unformatted numbers for j in range (7, 10): sheet.getCellByPosition(i, j).setValue(42) FormatColumn("A") FormatColumn("B") FormatColumn("C") FormatColumn("D") FormatColumn("E") # If column C is run last, you can see the entire column is selected # FormatColumn("C") ######################################################################## ######################################################################## # Originally this routine formatted some columns to $xx.xx # I changed it so it writes desired cell location instead. def FormatColumn(column): for i in range(2,7): # create newcell, e.g. 'A3' newcell = column+str(i) # Can't find another way to do this except dispatcher. Ugh. oProp = PropertyValue() # move "cursor" to cell locaton 'newcell' # However if newcell points to column C, the row number # becomes the column number, and the entire column is # selected. For example, "C2" selects the entire B column, # C3 -> C column, C4 -> D column, etc. oProp.Name = 'ToPoint' oProp.Value = newcell properties = (oProp,) dispatcher.executeDispatch( frame, '.uno:GoToCell', '', 0, properties ) # Idea was to set $xx.xx format for selected cell, but # if cell is Ci, it changes the entire column to $xx.xx oProp.Name = 'NumberFormatValue' oProp.Value = 21 # currency properties = (oProp,) dispatcher.executeDispatch( frame, '.uno:NumberFormatValue', '', 0, properties ) # Writes the (intended) cell location to that cell oProp.Name = 'StringName' oProp.Value = newcell properties = (oProp,) dispatcher.executeDispatch( frame, '.uno:EnterString', '', 0, properties ) if __name__ == '__main__': StartHere(1) -- You are receiving this mail because: You are the assignee for the bug.
_______________________________________________ Libreoffice-bugs mailing list Libreoffice-bugs@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-bugs