Прочтите листы Excel в книге и напишите слово - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь использовать python для чтения каждого листа в excelworkbook и записи в существующий текстовый документ.

Фрагмент кода, как показано ниже:

from win32com import client
excel = client.Dispatch("Excel.Application")
word = client.Dispatch("Word.Application")
doc = word.Documents.Open("D:/xx.docx")
xl = excel.Workbooks.Open("D:/yy.xlsx")


for i in xl.sheet_names:

    xl_sheet = xl_workbook.sheet_by_name(sheet_names[i])
    xl.Range("A1:D20").Copy()      

Однако возникает ошибка:

for i in xl.sheet_names:
  Local\Programs\Python\Python38-32\lib\site-packages\win32com\client\dynamic.py", line 527, in __getattr__
    raise AttributeError("%s.%s" % (self._username_, attr))
AttributeError: Open.sheet_names

Пожалуйста, помогите мне в решении этой проблемы

1 Ответ

0 голосов
/ 07 мая 2020

Вы можете попробовать следующее.

from win32com import client

# If you want to use client.constants, you should use client.gencache.EnsureDispatch instead of client.Dispatch
word = client.gencache.EnsureDispatch("Word.Application")
excel = client.gencache.EnsureDispatch("Excel.Application")
doc = word.Documents.Open("D:/xx.docx")
wb = excel.Workbooks.Open("D:/yy.xlsx")

# If you set Visible = True, it is easier to check if things are going right.
word.Visible = True
excel.Visible = True

# Doc for Word.Document interface: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.document
range = doc.Content  # Or, range = doc.Range()

# Doc for Excel.Workbook Interface: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.workbook
# Sheets property here: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel.workbook#microsoft-office-interop-excel--workbook-sheets
for ws in wb.Sheets:
    # Doc for Word.Range.Collapse method: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.range.collapse
    range.Collapse(client.constants.wdCollapseEnd)
    ws.Range("A1:D20").Copy()
    range.Paste()  # There is also PasteExcelTable method. Check the doc: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word.range.pasteexceltable

Вы можете найти документы по следующим ссылкам.

Word: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.word

Excel: https://docs.microsoft.com/en-us/dotnet/api/microsoft.office.interop.excel

...