Start documento for ranges
This commit is contained in:
parent
ab28969dce
commit
f4b8d95444
|
@ -98,3 +98,25 @@ Select range by user
|
||||||
doc = app.active
|
doc = app.active
|
||||||
doc.start_range_selection(Controllers)
|
doc.start_range_selection(Controllers)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
Selection
|
||||||
|
---------
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
doc = app.active
|
||||||
|
selection = doc.selection
|
||||||
|
app.debug(selection.is_cell)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
Select
|
||||||
|
------
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
doc = app.active
|
||||||
|
cell = doc[0]['A1']
|
||||||
|
doc.select(cell)
|
||||||
|
|
|
@ -64,6 +64,17 @@ Count
|
||||||
|
|
||||||
|
|
|
|
||||||
|
|
||||||
|
Iter
|
||||||
|
----
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
doc = app.active
|
||||||
|
for sheet in doc:
|
||||||
|
app.debug(sheet)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
New
|
New
|
||||||
^^^
|
^^^
|
||||||
|
|
||||||
|
@ -380,3 +391,48 @@ Activate
|
||||||
|
|
||||||
# Activate by name
|
# Activate by name
|
||||||
doc.activate('Sheet3')
|
doc.activate('Sheet3')
|
||||||
|
|
||||||
|
|
|
||||||
|
|
||||||
|
Events
|
||||||
|
^^^^^^
|
||||||
|
|
||||||
|
* See all the events that can be used.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
sheet = doc.active
|
||||||
|
event_names = sheet.events.names
|
||||||
|
app.debug(event_names)
|
||||||
|
|
||||||
|
* Assing some macro to event.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
def on_select(source):
|
||||||
|
app.debug(source.AbsoluteName)
|
||||||
|
return
|
||||||
|
|
||||||
|
def main():
|
||||||
|
doc = app.active
|
||||||
|
sheet = doc.active
|
||||||
|
|
||||||
|
events = sheet.events
|
||||||
|
if 'OnSelect' in events:
|
||||||
|
macro = {'library': 'test', 'name': 'on_select'}
|
||||||
|
events['OnSelect'] = macro
|
||||||
|
|
||||||
|
return
|
||||||
|
|
||||||
|
* Remove
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
events['OnSelect'] = {}
|
||||||
|
|
||||||
|
* Or
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
events.remove('OnSelect')
|
||||||
|
|
||||||
|
|
|
@ -3188,6 +3188,9 @@ class LODocMain():
|
||||||
|
|
||||||
class LODocCalc(LODocument):
|
class LODocCalc(LODocument):
|
||||||
"""Classe for Calc module"""
|
"""Classe for Calc module"""
|
||||||
|
TYPE_RANGES = ('ScCellObj', 'ScCellRangeObj')
|
||||||
|
RANGES = 'ScCellRangesObj'
|
||||||
|
SHAPE = 'com.sun.star.drawing.SvxShapeCollection'
|
||||||
_type = 'calc'
|
_type = 'calc'
|
||||||
|
|
||||||
def __init__(self, obj):
|
def __init__(self, obj):
|
||||||
|
@ -3209,6 +3212,32 @@ class LODocCalc(LODocument):
|
||||||
def __contains__(self, item):
|
def __contains__(self, item):
|
||||||
return item in self._sheets
|
return item in self._sheets
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
self._i = 0
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
try:
|
||||||
|
sheet = LOCalcSheet(self._sheets[self._i])
|
||||||
|
except Exception as e:
|
||||||
|
raise StopIteration
|
||||||
|
self._i += 1
|
||||||
|
return sheet
|
||||||
|
|
||||||
|
@property
|
||||||
|
def selection(self):
|
||||||
|
sel = self.obj.CurrentSelection
|
||||||
|
type_obj = sel.ImplementationName
|
||||||
|
if type_obj in self.TYPE_RANGES:
|
||||||
|
sel = LOCalcRange(sel)
|
||||||
|
elif type_obj == self.RANGES:
|
||||||
|
sel = LOCalcRanges(sel)
|
||||||
|
elif type_obj == self.SHAPE:
|
||||||
|
print(len(sel))
|
||||||
|
else:
|
||||||
|
debug(type_obj)
|
||||||
|
return sel
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def headers(self):
|
def headers(self):
|
||||||
"""Get true if is visible columns/rows headers"""
|
"""Get true if is visible columns/rows headers"""
|
||||||
|
@ -3388,6 +3417,23 @@ class LODocCalc(LODocument):
|
||||||
self._cc.removeRangeSelectionListener(self._listener_range_selection)
|
self._cc.removeRangeSelectionListener(self._listener_range_selection)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def select(self, rango: Any):
|
||||||
|
obj = rango
|
||||||
|
if hasattr(rango, 'obj'):
|
||||||
|
obj = rango.obj
|
||||||
|
self._cc.select(obj)
|
||||||
|
return
|
||||||
|
|
||||||
|
@property
|
||||||
|
def ranges(self):
|
||||||
|
obj = self.create_instance('com.sun.star.sheet.SheetCellRanges')
|
||||||
|
return LOCalcRanges(obj)
|
||||||
|
|
||||||
|
def get_ranges(self, address: str):
|
||||||
|
ranges = self.ranges
|
||||||
|
ranges.add([sheet[address] for sheet in self])
|
||||||
|
return ranges
|
||||||
|
|
||||||
|
|
||||||
class LOCalcSheet(object):
|
class LOCalcSheet(object):
|
||||||
|
|
||||||
|
@ -3404,7 +3450,7 @@ class LOCalcSheet(object):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return f'easymacro.LOCalcSheet: {self.name}'
|
return f'Sheet: {self.name}'
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def obj(self):
|
def obj(self):
|
||||||
|
@ -3442,6 +3488,16 @@ class LOCalcSheet(object):
|
||||||
def color(self, value):
|
def color(self, value):
|
||||||
self._obj.TabColor = Color()(value)
|
self._obj.TabColor = Color()(value)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def events(self):
|
||||||
|
return LOEvents(self.obj.Events)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def used_area(self):
|
||||||
|
cursor = self.create_cursor()
|
||||||
|
cursor.gotoEndOfUsedArea(True)
|
||||||
|
return self[cursor.AbsoluteName]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def is_protected(self):
|
def is_protected(self):
|
||||||
return self._obj.isProtected()
|
return self._obj.isProtected()
|
||||||
|
@ -3492,6 +3548,38 @@ class LOCalcSheet(object):
|
||||||
self.doc.activate(self.obj)
|
self.doc.activate(self.obj)
|
||||||
return
|
return
|
||||||
|
|
||||||
|
def create_cursor(self, rango: Any=None):
|
||||||
|
if rango is None:
|
||||||
|
cursor = self.obj.createCursor()
|
||||||
|
else:
|
||||||
|
obj = rango
|
||||||
|
if hasattr(rango, 'obj'):
|
||||||
|
obj = rango.obj
|
||||||
|
cursor = self.obj.createCursorByRange(obj)
|
||||||
|
return cursor
|
||||||
|
|
||||||
|
|
||||||
|
class LOCalcRanges(object):
|
||||||
|
|
||||||
|
def __init__(self, obj):
|
||||||
|
self._obj = obj
|
||||||
|
|
||||||
|
@property
|
||||||
|
def obj(self):
|
||||||
|
return self._obj
|
||||||
|
|
||||||
|
@property
|
||||||
|
def names(self):
|
||||||
|
return self.obj.ElementNames
|
||||||
|
|
||||||
|
def add(self, rangos):
|
||||||
|
if isinstance(rangos, LOCalcRange):
|
||||||
|
rangos = (rangos,)
|
||||||
|
for r in rangos:
|
||||||
|
# ~ self._ranges[r.name] = r
|
||||||
|
self.obj.addRangeAddress(r.range_address, False)
|
||||||
|
return
|
||||||
|
|
||||||
|
|
||||||
class LOCalcRange(object):
|
class LOCalcRange(object):
|
||||||
CELL = 'ScCellObj'
|
CELL = 'ScCellObj'
|
||||||
|
@ -3500,10 +3588,57 @@ class LOCalcRange(object):
|
||||||
self._obj = obj
|
self._obj = obj
|
||||||
self._is_cell = obj.ImplementationName == self.CELL
|
self._is_cell = obj.ImplementationName == self.CELL
|
||||||
|
|
||||||
|
def __getitem__(self, index):
|
||||||
|
return LOCalcRange(self.obj[index])
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
self._r = 0
|
||||||
|
self._c = 0
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __next__(self):
|
||||||
|
try:
|
||||||
|
rango = self[self._r, self._c]
|
||||||
|
except Exception as e:
|
||||||
|
raise StopIteration
|
||||||
|
self._c += 1
|
||||||
|
if self._c == self.obj.Columns.Count:
|
||||||
|
self._c = 0
|
||||||
|
self._r +=1
|
||||||
|
return rango
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, exc_type, exc_value, traceback):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __str__(self):
|
||||||
|
s = f'Range: {self.name}'
|
||||||
|
if self.is_cell:
|
||||||
|
s = f'Cell: {self.name}'
|
||||||
|
return s
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def obj(self):
|
def obj(self):
|
||||||
return self._obj
|
return self._obj
|
||||||
|
|
||||||
|
@property
|
||||||
|
def is_cell(self):
|
||||||
|
return self._is_cell
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self):
|
||||||
|
return self.obj.AbsoluteName
|
||||||
|
|
||||||
|
@property
|
||||||
|
def address(self):
|
||||||
|
return self.obj.CellAddress
|
||||||
|
|
||||||
|
@property
|
||||||
|
def range_address(self):
|
||||||
|
return self.obj.RangeAddress
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def data(self):
|
def data(self):
|
||||||
return self.obj.getDataArray()
|
return self.obj.getDataArray()
|
||||||
|
|
Loading…
Reference in New Issue