Рубрики
Без рубрики

Python и Microsoft Office – с помощью Pywin32

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

Большинство типичных пользователей использовали Microsoft Office. В то время как офис может быть баном технической поддержки, мы все еще должны иметь дело с этим. Python может использоваться для скрипта (AKA Automate) Office и упростить для нас или наших пользователей. Это может быть не так просто, как запись макроса, но это близко. Для этой статьи вы узнаете, как использовать модуль Pywin32 для доступа к некоторым офисным программам и манипулировать их Python. Некоторые форумы говорят, что вам необходимо запустить утилиту Pythonwin Musicy на Microsoft Word (и Excel), прежде чем вы сможете получить доступ к приложениям Office. Я не думаю, что мне нужно было сделать это, чтобы сделать это работать, хотя (по крайней мере, не с версией 2007 года). Тем не менее, Pythonwin поставляется с Pywin32, поэтому, если вы бежите неприятности, вы можете попробовать его.

Python и Microsoft Excel

Если вы искали примеры использования Python и Office, вы обычно находите, что чаще всего взломанный компонент – Excel. На самом деле, существует несколько модулей без Pywin32, специально созданных для чтения и записи файлов Excel. Они называются XLRD и XLWT соответственно. Но это тема для другой статьи. Здесь мы увидим, как связываться с Excel, используя интерфейс Pywin32. Обратите внимание, что следующие сценарии работают только на Windows. Одним из преимуществ XLRD и XLWT в том, что вы можете использовать их на любой платформе.

Давайте посмотрим на простой пример, пожалуйста?

import time
import win32com.client as win32

#----------------------------------------------------------------------
def excel():
    """"""
    xl = win32.gencache.EnsureDispatch('Excel.Application')
    ss = xl.Workbooks.Add()
    sh = ss.ActiveSheet
    
    xl.Visible = True
    time.sleep(1)

    sh.Cells(1,1).Value = 'Hacking Excel with Python Demo'
    
    time.sleep(1)
    for i in range(2,8):
        sh.Cells(i,1).Value = 'Line %i' % i
        time.sleep(1)
        
    ss.Close(False)
    xl.Application.Quit()
    
if __name__ == "__main__":
    excel()

Пример выше похоже на то, что вы обычно нашли в Интернете. На самом деле он основан на примере, который я видел в отличной книге Уэсли Чуна, Core Python Программирование Отказ Давайте займем некоторое время и распакуйте код. Чтобы получить доступ к Excel, импортируем win32com.client а потом назовите его gencache.ensuredispatch , прохождение в названии приложения, которое мы хотим открыть. В этом случае строка для пропуска – «Excel.Application». Все, что делает открыто Excel на заднем плане. На данный момент пользователь даже не знает, что Excel открыт, если у них не работает диспетчер задач. Следующая строка – это добавляет новую рабочую книгу для Excel, позвонив на метод «Workbookss.adbookss.adddddddddd axtbooks axmentss.adddddd (). Это возвращает объект простыней (я думаю). Чтобы получить активист, мы называем Ss.activesheteet Отказ Наконец, мы заставляем сама программа Excel, установила, что свойство to true.

Чтобы установить определенную ценность ячейки, позвоните что-то подобное: SH.CELLS (ROW, COL). Value Отказ Обратите внимание, что наш экземпляр не основан на нуле и фактически нанесет значение в правильной комбинации строки/COL. Если мы хотим извлечь значение, мы просто удаляем знак равенства. Что, если мы хотим формулу? Чтобы понять это наше, я записал макрос в Excel и сделал специальную команду вставки, которая только вставила формулу. Используя сгенерированный код, я выяснил, что получить формулу в Python, вы просто делаете это:

formula = sh.Cells(row, col).Formula

Что, если вам нужно изменить, какой лист вы находитесь? Запись макроса также показала мне, как выполнить этот подвиг. Вот код VBA от Excel:

Sub macro1 () ‘ Macro1 Macro. ‘ Листы («лист2»). Выберите Конец

Из этого кода я собрал, что мне нужно было позвонить в метод «Листы объекта листов» и после небольшого возобновления, я получил его на работу, выполнив следующее:

sheet2 = ss.Sheets("Sheet2")

Теперь у нас есть ручка на втором листе в рабочей книге. Если вы хотите редактировать или извлекать значения, просто нажмите те же методы, которые вы использовали выше, с тем, что вы называете экземпляром листе2 (I.E. Sheet2.Cells (1,1). Value). Последние две строки из исходной программы закроют простыни, а затем выходят весь экземпляр Excel.

Вы можете думать, что до тех пор, пока все, что я показал, как создать новый документ. Что, если вы хотите открыть существующий файл? Просто сделайте что-нибудь подобное в начале кода:

xl = win32.gencache.EnsureDispatch('Excel.Application')
ss = xl.Workbooks.Open(filename)

И там у вас есть! Теперь вы знаете основы взлома Excel с Python, используя модель COM Excel. Если вам нужно узнать больше, я рекомендую попытаться записать макрос, а затем переводить результат в Python. Примечание. Я не смог найти пример, который мог бы сохранить электронную таблицу … Есть несколько примеров, которые утверждают, что они работают, но они не для меня.

Python и Microsoft Word

Доступ к Microsoft Word с Python следует за тем же синтаксисом, который мы использовали для Excel. Давайте посмотрим, как получить доступ к слову.

from time import sleep
import win32com.client as win32

RANGE = range(3, 8)

def word():
    word = win32.gencache.EnsureDispatch('Word.Application')
    doc = word.Documents.Add()
    word.Visible = True
    sleep(1)

    rng = doc.Range(0,0)
    rng.InsertAfter('Hacking Word with Python\r\n\r\n')
    sleep(1)
    for i in RANGE:
        rng.InsertAfter('Line %d\r\n' % i)
        sleep(1)
    rng.InsertAfter("\r\nPython rules!\r\n")

    doc.Close(False)
    word.Application.Quit()

if __name__ == '__main__':
    word()

Этот конкретный пример также основан на чем-то из книги Чуна. Однако в Интернете есть много других примеров, которые тоже выглядят почти точно так. Давайте распаковываем этот код сейчас. Чтобы получить ручку на приложении Microsoft Word, мы называем win32.gencache.ensuredispatch («Word.Application») ; Затем мы добавляем новый документ, вызвав слово Exstance Documents.add () Отказ Если вы хотите показать пользователю, к тому, что вы задумаетесь, вы можете установить видимость слова в True.

Если вы хотите добавить текст в документ, то вы захотите сказать слово, где вы хотите отправиться в текст. Вот где находится метод диапазона. В то время как вы не видите, есть «сетка» рода, которые рассказывает слово, как наказывать текст на экране. Поэтому, если мы хотим вставить текст на самую вершину документа, мы говорим ему, чтобы начать (0,0). Чтобы добавить новую строку в слово, нам нужно добавить «\ R \ n» до конца нашей строки. Если вы не знаете о раздражениях линейных окончаний на разных платформах, вы должны провести некоторое время с Google и узнать об этом, чтобы вы не получили странные ошибки!

Остальная часть кода довольно объяснительная и будет оставлена для читателя для интерпретации. Мы перейдем к открытию и сохранению документов сейчас:

# Based on examples from http://code.activestate.com/recipes/279003/
word.Documents.Open(doc)
word.ActiveDocument.SaveAs("c:\\a.txt", FileFormat=win32com.client.constants.wdFormatTextLineBreaks)

Здесь мы показываем, как открыть существующий документ Word и сохранить его как текст. Я не проверил этого полностью, поэтому ваш пробег может варьироваться. Если вы хотите прочитать текст в документе, вы можете сделать следующее:

docText = word.Documents[0].Content

И это заканчивает урок взлома Python на словных документах. Поскольку много информации, которую я нашел на Microsoft Word, и Python, стали старой и хрустящей, и, казалось, не работал половину времени, я не добавляю в беспорядок плохой информации. Надеюсь, это заставит вас начать в своем собственном путешествии в дикие чудеса слова манипуляций.

Дальнейшее чтение