Листы
В этом руководстве по Python мы используем следующее определения:
-
лист — это отдельная электронная таблица в документе
-
рабочая книга является документом ACell
Полные примеры с кодом см. "Примеры
макросов ACell-Листы"
Вывод в диалоговое окно всех имен листов в документе ACELL с помощью макроса python
def sheet_names():
list_sheet_names = []
doc = XSCRIPTCONTEXT.getDocument()
sheet_names = doc.Sheets.ElementNames
for name in sheet_names:
list_sheet_names.append(name)
msgbox(title="Названия листов в документе", msg="\n".join(map(str, list_sheet_names)))
Вывод в диалоговое окно количество листов в документе ACELL с помощью макроса python
def number_of_sheets():
doc = XSCRIPTCONTEXT.getDocument()
count = doc.Sheets.Count
msgbox(title="Колличество листов в файле", msg=f"Всего листов: {count}")
Перебрать все листы
def loop_through_all_sheets():
doc = XSCRIPTCONTEXT.getDocument()
for sheet in doc.Sheets:
msgbox(
title="Все листы",
msg=f"Лист: {sheet.Name}"
)
Получить активный лист ACELL с помощью макроса python из текущего документа
def get_active_sheet():
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.getCurrentController().getActiveSheet()
msgbox(title="Активный/открытый лист", msg=sheet.Name)
Получить активный лист ACELL с помощью макроса python по индексу из текущего документа
def get_active_sheet_by_index():
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[2] # индекс массива - номер листа в документе
msgbox(title="Активный/открытый лист по индексу в python", msg=sheet.Name)
except IndexError as p:
msgbox(title="Активный/открытый лист по индексу в python", msg="Неправильный индекс")
Получить активный лист ACELL с помощью макроса python по имени из текущего документа
def get_active_sheet_by_index():
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets["name_list"]
msgbox(title="Активный/открытый лист по имени в python", msg=sheet.Name)
except KeyError as p:
msgbox(title="Активный/открытый лист по имени в python", msg="Неправильное имя листа")
Переместиться на определенный лист в ACELL с помощью python по индексу в коде
def focus_on_sheet_by_index():
index = 4 #индекс массива - номер листа в документе
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
msgbox(title="Фокус на лист по индексу", msg=f"Вы перешли на лист с индексом: {index}")
doc.getCurrentController().setActiveSheet(sheet)
except IndexError as p:
msgbox(title="Фокус на лист по индексу", msg="Неправильный индекс!")
Изменить имя листа ACELL, с помощью python, видимое пользователю
def change_sheet_name():
index = 2
new_name_sheet = "new_name_sheet"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.Name = new_name_sheet
msgbox(title="Изменение имени листа", msg=f"Имя листа с индексом: {index} изменено на: {new_name_sheet}")
except IndexError as p:
msgbox(title="Изменение имени листа", msg="Неправильный индекс!")
Изменение имени листа ACELL с помощью python, видно только из кода
def change_sheet_name_only_code():
index = 2
new_name_sheet = "new_name_sheet"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.CodeName = new_name_sheet
msgbox(
title="Изменение имя листа отображаемое только в коде",
msg=f"Имя листа с индексом: {index} изменено на: {new_name_sheet}\nВнимание! Имя листа видно только из кода Python!"
)
except IndexError as p:
msgbox(
title="Изменение имени листа отображаемое только в коде",
msg="Неправильный индекс!"
)
Видимость листа
-
Установить видимость/не видимость листа
def sheet_visibility_true():
index = 2
title="Статус видимости листа"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.IsVisible = True
msgbox(
title=title,
msg=f"Лист с индексом: {index} отображен!"
)
except IndexError as p:
msgbox(
title=title,
msg="Неправильный индекс!"
)
def sheet_visibility_false():
index = 2
title="Статус видимости листа"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.IsVisible = False
msgbox(
title=title,
msg=f"Лист с индексом: {index} скрыт!"
)
except IndexError as p:
msgbox(
title=title,
msg="Неправильный индекс!"
)
Пароль
- Установка/удаление пароля
def set_password():
index = 2
password = "your_password"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.protect(password)
msgbox(
title="Управление паролями",
msg=f"Пароль для листа с индексом: {index} задан!"
)
except IndexError as p:
msgbox(
title="Ошибка",
msg="Неправильный индекс!"
)
def remove_password():
index = 2
password = "your_password"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.unprotect(password)
msgbox(
title="Управление паролями",
msg=f"Пароль для листа с индексом: {index} удален!"
)
except IndexError as p:
msgbox(
title="Ошибка",
msg="Неправильный индекс!"
)
Проверка, существует ли лист в книге
def does_sheet_exist_book():
find_name_sheet = "test"
title = "Результат поиска!"
doc = XSCRIPTCONTEXT.getDocument()
if find_name_sheet in doc.Sheets:
msgbox(
title=title,
msg=f"Лист: {find_name_sheet} существует!"
)
else:
msgbox(
title=title,
msg=f"Лист: {find_name_sheet} не существует!"
)
Вставьте пустой новый лист
def insert_blank_new_sheet():
index = 3
name_new_sheet = "new"
doc = XSCRIPTCONTEXT.getDocument()
doc.Sheets.insertNewByName(name_new_sheet, index)
msgbox(
title="Вставьте пустой новый лист",
msg=f"Лист: {name_new_sheet} вставлен"
)
Перемещение положение листа в книге
def move_sheet_position_in_book():
index = 3
name_sheet = "new_test"
title = "Результат"
doc = XSCRIPTCONTEXT.getDocument()
if name_sheet in doc.Sheets:
doc.Sheets.moveByName(name_sheet, index)
msgbox(
title=title,
msg=f"Лист с именем: {name_sheet} перенесен в положение с индексом: {index}"
)
else:
msgbox(
title=title,
msg=f"Лист с именем: {name_sheet} не найден"
)
Удалить лист из рабочей книги
def move_sheet_position_in_book():
name_sheet = "new_test"
title = "Информация"
doc = XSCRIPTCONTEXT.getDocument()
count = doc.Sheets.Count
if name_sheet in doc.Sheets:
if count >= 2:
doc.Sheets.removeByName(name_sheet)
msgbox(
title=title,
msg=f"Лист: {name_sheet} заменен чистым листом!"
)
else:
msgbox(
title=title,
msg=f"Листов мало, всего: {count}, добавьте еще!"
)
else:
msgbox(
title=title,
msg=f"Лист: {name_sheet} не существует!"
)
Заменить чистым листом
ВНИМАНИЕ: Будьте внимательны . Эта функция заменяет лист name_sheet чистым листом.
def replace_with_blank_sheet():
name_sheet = "new_test"
title = "Информация"
doc = XSCRIPTCONTEXT.getDocument()
count = doc.Sheets.Count
if name_sheet in doc.Sheets:
if count >= 2:
sheet = doc.createInstance("com.sun.star.sheet.Spreadsheet")
doc.Sheets.replaceByName(name_sheet, sheet)
msgbox(
title=title,
msg=f"Лист: {name_sheet} - заменен чистым листом!"
)
else:
msgbox(
title=title,
msg=f"Листов мало, всего: {count}, добавьте еще!"
)
else:
msgbox(
title=title,
msg=f"Лист: {name_sheet} не существует!"
)
Переименовать и скопировать лист
def rename_and_copy_sheet():
source_name = "test_sheet"
new_name = "new_test_sheet"
position = 2
title = "Информация"
doc = XSCRIPTCONTEXT.getDocument()
if source_name in doc.Sheets:
doc.Sheets.copyByName(source_name, new_name, position)
msgbox(
title=title,
msg=f"Лист: {source_name} копирован и переименован в: {new_name}"
)
else:
msgbox(
title=title,
msg=f"Лист: {source_name} не существует!"
)
Копирование/импорт листа с названием "test_sheet" в другой документ
def copying_sheet_another_workbook():
title = "Информация"
name_sheet = "test_sheet"
doc = XSCRIPTCONTEXT.getDocument()
if name_sheet in doc.Sheets:
path = "private:factory/scalc"
desktop = create_instance("com.sun.star.frame.Desktop", context=True)
source = desktop.loadComponentFromURL(path, "_default", 0, ())
source.Sheets.importSheet(doc, name_sheet, 0)
msgbox(
title=title,
msg=f"Лист: {name_sheet} скопирован в новый документ!"
)
else:
msgbox(
title=title,
msg=f"Лист: {name_sheet} не существует!"
)
Раскрасить лист с названием test_sheet
def сolorize_tab_sheet():
title = "Информация"
name_sheet = "test_sheet"
doc = XSCRIPTCONTEXT.getDocument()
if name_sheet in doc.Sheets:
sheet = doc.Sheets[name_sheet]
sheet.TabColor = get_color(255, 0, 0)
msgbox(
title=title,
msg=f"Лист: {name_sheet} - перекрашен!"
)
else:
msgbox(
title=title,
msg=f"Лист: {name_sheet} не существует!"
)
Вывод в диалоговое окно всех имен листов в документе ACELL с помощью макроса python
def sheet_names():
list_sheet_names = []
doc = XSCRIPTCONTEXT.getDocument()
sheet_names = doc.Sheets.ElementNames
for name in sheet_names:
list_sheet_names.append(name)
msgbox(title="Названия листов в документе", msg="\n".join(map(str, list_sheet_names)))
Вывод в диалоговое окно количество листов в документе ACELL с помощью макроса python
def number_of_sheets():
doc = XSCRIPTCONTEXT.getDocument()
count = doc.Sheets.Count
msgbox(title="Колличество листов в файле", msg=f"Всего листов: {count}")
Перебрать все листы
def loop_through_all_sheets():
doc = XSCRIPTCONTEXT.getDocument()
for sheet in doc.Sheets:
msgbox(
title="Все листы",
msg=f"Лист: {sheet.Name}"
)
Получить активный лист ACELL с помощью макроса python из текущего документа
def get_active_sheet():
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.getCurrentController().getActiveSheet()
msgbox(title="Активный/открытый лист", msg=sheet.Name)
Получить активный лист ACELL с помощью макроса python по индексу из текущего документа
def get_active_sheet_by_index():
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[2] # индекс массива - номер листа в документе
msgbox(title="Активный/открытый лист по индексу в python", msg=sheet.Name)
except IndexError as p:
msgbox(title="Активный/открытый лист по индексу в python", msg="Неправильный индекс")
Получить активный лист ACELL с помощью макроса python по имени из текущего документа
def get_active_sheet_by_index():
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets["name_list"]
msgbox(title="Активный/открытый лист по имени в python", msg=sheet.Name)
except KeyError as p:
msgbox(title="Активный/открытый лист по имени в python", msg="Неправильное имя листа")
Переместиться на определенный лист в ACELL с помощью python по индексу в коде
def focus_on_sheet_by_index():
index = 4 #индекс массива - номер листа в документе
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
msgbox(title="Фокус на лист по индексу", msg=f"Вы перешли на лист с индексом: {index}")
doc.getCurrentController().setActiveSheet(sheet)
except IndexError as p:
msgbox(title="Фокус на лист по индексу", msg="Неправильный индекс!")
Изменить имя листа ACELL, с помощью python, видимое пользователю
def change_sheet_name():
index = 2
new_name_sheet = "new_name_sheet"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.Name = new_name_sheet
msgbox(title="Изменение имени листа", msg=f"Имя листа с индексом: {index} изменено на: {new_name_sheet}")
except IndexError as p:
msgbox(title="Изменение имени листа", msg="Неправильный индекс!")
Изменение имени листа ACELL с помощью python, видно только из кода
def change_sheet_name_only_code():
index = 2
new_name_sheet = "new_name_sheet"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.CodeName = new_name_sheet
msgbox(
title="Изменение имя листа отображаемое только в коде",
msg=f"Имя листа с индексом: {index} изменено на: {new_name_sheet}\nВнимание! Имя листа видно только из кода Python!"
)
except IndexError as p:
msgbox(
title="Изменение имени листа отображаемое только в коде",
msg="Неправильный индекс!"
)
Видимость листа
- Установить видимость/не видимость листа
def sheet_visibility_true():
index = 2
title="Статус видимости листа"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.IsVisible = True
msgbox(
title=title,
msg=f"Лист с индексом: {index} отображен!"
)
except IndexError as p:
msgbox(
title=title,
msg="Неправильный индекс!"
)
def sheet_visibility_false():
index = 2
title="Статус видимости листа"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.IsVisible = False
msgbox(
title=title,
msg=f"Лист с индексом: {index} скрыт!"
)
except IndexError as p:
msgbox(
title=title,
msg="Неправильный индекс!"
)
Пароль
- Установка/удаление пароля
def set_password():
index = 2
password = "your_password"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.protect(password)
msgbox(
title="Управление паролями",
msg=f"Пароль для листа с индексом: {index} задан!"
)
except IndexError as p:
msgbox(
title="Ошибка",
msg="Неправильный индекс!"
)
def remove_password():
index = 2
password = "your_password"
doc = XSCRIPTCONTEXT.getDocument()
try:
sheet = doc.Sheets[index]
sheet.unprotect(password)
msgbox(
title="Управление паролями",
msg=f"Пароль для листа с индексом: {index} удален!"
)
except IndexError as p:
msgbox(
title="Ошибка",
msg="Неправильный индекс!"
)
Проверка, существует ли лист в книге
def does_sheet_exist_book():
find_name_sheet = "test"
title = "Результат поиска!"
doc = XSCRIPTCONTEXT.getDocument()
if find_name_sheet in doc.Sheets:
msgbox(
title=title,
msg=f"Лист: {find_name_sheet} существует!"
)
else:
msgbox(
title=title,
msg=f"Лист: {find_name_sheet} не существует!"
)
Вставьте пустой новый лист
def insert_blank_new_sheet():
index = 3
name_new_sheet = "new"
doc = XSCRIPTCONTEXT.getDocument()
doc.Sheets.insertNewByName(name_new_sheet, index)
msgbox(
title="Вставьте пустой новый лист",
msg=f"Лист: {name_new_sheet} вставлен"
)
Перемещение положение листа в книге
def move_sheet_position_in_book():
index = 3
name_sheet = "new_test"
title = "Результат"
doc = XSCRIPTCONTEXT.getDocument()
if name_sheet in doc.Sheets:
doc.Sheets.moveByName(name_sheet, index)
msgbox(
title=title,
msg=f"Лист с именем: {name_sheet} перенесен в положение с индексом: {index}"
)
else:
msgbox(
title=title,
msg=f"Лист с именем: {name_sheet} не найден"
)
Удалить лист из рабочей книги
def move_sheet_position_in_book():
name_sheet = "new_test"
title = "Информация"
doc = XSCRIPTCONTEXT.getDocument()
count = doc.Sheets.Count
if name_sheet in doc.Sheets:
if count >= 2:
doc.Sheets.removeByName(name_sheet)
msgbox(
title=title,
msg=f"Лист: {name_sheet} заменен чистым листом!"
)
else:
msgbox(
title=title,
msg=f"Листов мало, всего: {count}, добавьте еще!"
)
else:
msgbox(
title=title,
msg=f"Лист: {name_sheet} не существует!"
)
Заменить чистым листом
ВНИМАНИЕ: Будьте внимательны . Эта функция заменяет лист name_sheet чистым листом.
def replace_with_blank_sheet():
name_sheet = "new_test"
title = "Информация"
doc = XSCRIPTCONTEXT.getDocument()
count = doc.Sheets.Count
if name_sheet in doc.Sheets:
if count >= 2:
sheet = doc.createInstance("com.sun.star.sheet.Spreadsheet")
doc.Sheets.replaceByName(name_sheet, sheet)
msgbox(
title=title,
msg=f"Лист: {name_sheet} - заменен чистым листом!"
)
else:
msgbox(
title=title,
msg=f"Листов мало, всего: {count}, добавьте еще!"
)
else:
msgbox(
title=title,
msg=f"Лист: {name_sheet} не существует!"
)
Переименовать и скопировать лист
def rename_and_copy_sheet():
source_name = "test_sheet"
new_name = "new_test_sheet"
position = 2
title = "Информация"
doc = XSCRIPTCONTEXT.getDocument()
if source_name in doc.Sheets:
doc.Sheets.copyByName(source_name, new_name, position)
msgbox(
title=title,
msg=f"Лист: {source_name} копирован и переименован в: {new_name}"
)
else:
msgbox(
title=title,
msg=f"Лист: {source_name} не существует!"
)
Копирование/импорт листа с названием "test_sheet" в другой документ
def copying_sheet_another_workbook():
title = "Информация"
name_sheet = "test_sheet"
doc = XSCRIPTCONTEXT.getDocument()
if name_sheet in doc.Sheets:
path = "private:factory/scalc"
desktop = create_instance("com.sun.star.frame.Desktop", context=True)
source = desktop.loadComponentFromURL(path, "_default", 0, ())
source.Sheets.importSheet(doc, name_sheet, 0)
msgbox(
title=title,
msg=f"Лист: {name_sheet} скопирован в новый документ!"
)
else:
msgbox(
title=title,
msg=f"Лист: {name_sheet} не существует!"
)
Раскрасить лист с названием test_sheet
def сolorize_tab_sheet():
title = "Информация"
name_sheet = "test_sheet"
doc = XSCRIPTCONTEXT.getDocument()
if name_sheet in doc.Sheets:
sheet = doc.Sheets[name_sheet]
sheet.TabColor = get_color(255, 0, 0)
msgbox(
title=title,
msg=f"Лист: {name_sheet} - перекрашен!"
)
else:
msgbox(
title=title,
msg=f"Лист: {name_sheet} не существует!"
)