#python #excel #win32com
#python #excel #win32com
Вопрос:
Я начинаю переносить часть своего кода VBA в Python, потому что это дает мне больше ресурсов. Однако у меня возникают проблемы с аналогичной работой.
Я хотел очистить некоторые столбцы, однако я не могу работать напрямую со столбцами атрибутов рабочего листа. И я должен выполнять такие обходные действия (полный код):
import win32com.client as win32
xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Open(r'Test.xlsx')
sh = wb.ActiveSheet
xl.ScreenUpdating = True
last_col = sh.UsedRange.Columns.Count
last_row = sh.UsedRange.Rows.Count
my_range = sh.Range(sh.Cells(1, 1), sh.Cells(last_row, 4))
my_range.Select()
xl.Selection.ClearContents()
Итак, то, что я хотел бы сделать, похоже на VBA:
Columns("A:D").Clear
Есть ли какой-либо способ работать со строками и столбцами с помощью Python, а не только с диапазонами?
Ответ №1:
Просто запустите: sh.Columns("A:D").Clear
. Следует отметить, что вы не переводите код VBA на Python. Оба языка делают то же самое, создавая COM-интерфейс для библиотеки объектов Excel. Поскольку приложения Office поставляются с VBA, часто считается, что VBA — это язык для этих программ, и язык изначально встроен, но на самом деле VBA является компонентом. В разделе Инструменты / Ссылки в IDE вы увидите, что VBA является первым отмеченным элементом.
Итак, с помощью компонентной объектной модели Windows (COM) любой язык общего назначения, включая Python, PHP, R, Java, C # и т.д., может подключаться к библиотеке объектов Excel и выполнять вызовы объектов и методов рабочей книги. Вам просто нужно придерживаться синтаксиса языков. В качестве примера:
Python (модуль win32com)
sh.Columns("A:D").Clear()
PHP (COM-класс)
sh->Columns("A:D")->Clear()
sh$Columns("A:D")$Clear()
Кроме того, рассмотрите возможность запуска вашего кода в try...except...finally
блоках, чтобы перехватывать исключения и правильно неинициализировать COM-объекты, независимо от того, выдает ли ваш код ошибки или нет. В противном случае Excel.exe процесс продолжит выполняться в фоновом режиме.
import win32com.client as win32
try:
xl = win32.gencache.EnsureDispatch('Excel.Application')
xl.Visible = True
wb = xl.Workbooks.Open(r'C:PathToTest.xlsx')
sh = wb.ActiveSheet
xl.ScreenUpdating = True
sh.Columns("A:D").Clear()
except Exception as e:
print(e)
finally:
sh = None
wb = None
xl = None
Комментарии:
1. Спасибо, это помогло. Я собираюсь принять во внимание ваш совет по блокировке try … за исключением.