diff --git a/source/easymacro.py b/source/easymacro.py index c58bdd7..0d8ff87 100644 --- a/source/easymacro.py +++ b/source/easymacro.py @@ -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):