Start methods for sheets

This commit is contained in:
El Mau 2022-03-08 22:24:10 -06:00
parent 3582cdce16
commit 0d0cbead88
1 changed files with 112 additions and 1 deletions

View File

@ -3118,6 +3118,10 @@ class LODocCalc(LODocument):
"""Index access"""
return LOCalcSheet(self._sheets[index])
def __setitem__(self, key: str, value: Any):
"""Insert new sheet"""
self._sheets[key] = value
def __len__(self):
return self._sheets.Count
@ -3153,12 +3157,31 @@ class LODocCalc(LODocument):
"""Get active sheet"""
return LOCalcSheet(self._cc.ActiveSheet)
@property
def new_sheet(self):
sheet = self._create_instance('com.sun.star.sheet.Spreadsheet')
return sheet
def activate(self, sheet: Any):
"""Activate sheet
:param sheet: Sheet to activate
:type sheet: str, pyUno or LOCalcSheet
"""
obj = sheet
if isinstance(sheet, LOCalcSheet):
obj = sheet.obj
elif isinstance(sheet, str):
obj = self._sheets[sheet]
self._cc.setActiveSheet(obj)
return
def insert(self, name: Union[str, list, tuple]):
"""Insert new sheet
:param name: Name new sheet, or iterable with names.
:type name: str, list or tuple
:return: New instance sheet.
:return: New last instance sheet.
:rtype: LOCalcSheet
"""
names = name
@ -3168,6 +3191,94 @@ class LODocCalc(LODocument):
self._sheets[n] = self._create_instance('com.sun.star.sheet.Spreadsheet')
return LOCalcSheet(self._sheets[n])
def remove(self, name: str):
"""Remove sheet by name
:param name: Name sheet will remove
:type name: str
"""
if isinstance(name, LOCalcSheet):
name = name.name
self._sheets.removeByName(name)
return
def move(self, name:str, pos: int=-1):
"""Move sheet name to position
:param name: Name sheet to move
:type name: str
:param pos: New position, if pos=-1 move to end
:type pos: int
"""
index = pos
if pos < 0:
index = len(self)
if isinstance(name, LOCalcSheet):
name = name.name
self._sheets.moveByName(name, index)
return
def _get_new_name_sheet(self, name):
i = 1
new_name = f'{name}_{i}'
while new_name in self:
i += 1
new_name = f'{name}_{i}'
return new_name
def copy_sheet(self, name: Any, new_name: str='', pos: int=-1):
"""Copy sheet by name
"""
if isinstance(name, LOCalcSheet):
name = name.name
index = pos
if pos < 0:
index = len(self)
if not new_name:
new_name = self._get_new_name_sheet(name)
self._sheets.copyByName(name, new_name, index)
return LOCalcSheet(self._sheets[new_name])
def copy_from(self, doc: Any, source: Any=None, target: Any=None, pos: int=-1):
"""Copy sheet from document
"""
index = pos
if pos < 0:
index = len(self)
names = source
if not source:
names = doc.names
elif isinstance(source, str):
names = (source,)
elif isinstance(source, LOCalcSheet):
names = (source.name,)
new_names = target
if not target:
new_names = names
elif isinstance(target, str):
new_names = (target,)
for i, name in enumerate(names):
self._sheets.importSheet(doc.obj, name, index + i)
self[index + i].name = new_names[i]
return LOCalcSheet(self._sheets[index])
def sort(self, reverse=False):
"""Sort sheets by name
:param reverse: For order in reverse
:type reverse: bool
"""
names = sorted(self.names, reverse=reverse)
for i, n in enumerate(names):
self.move(n, i)
return
class LOCalcSheet(object):