【发布时间】:2021-10-15 05:09:12
【问题描述】:
是否可以只使用文件名而不是在第 4 行和第 5 行写出整个路径?
[1] from win32com import client
[2] excel = client.Dispatch("Excel.Application")
[3] word = client.Dispatch("Word.Application")
[4] doc = word.Documents.Open(r"C:\Users\crist\word_automation\Summary_template\Table1.docx")
[5] book=excel.Workbooks.Open(r"C:\Users\crist\word_automation\Summary_template\Table1.xlsx")
sheet = book.Worksheets(1)
sheet.Range("A1:D5").Copy()
wdRange = doc.Content
wdRange.Collapse(0)
wdRange.PasteExcelTable(False, True, False)
import os
os.remove('Table2.xlsx')
book.SaveAs('Table2.xlsx')
book.Close()
excel.Quit()
doc.SaveAs('TableOne.docx')
doc.Close()
word.Quit()
我试过这样做,但它给了我一个错误:
doc = word.Documents.Open('Table1.docx')
book = excel.Workbooks.Open('Table1.xlsx')
com_error: (-2147352567, 'Exception occurred.', (0, 'Microsoft Excel', "抱歉,我们找不到 Table1.xlsx。它可能被移动、重命名或删除了吗?", 'xlmain11 .chm', 0, -2146827284), 无)
更新代码:
from win32com import client
import os
os.chdir(r"C:\Users\crist\word_automation\Summary_template")
excel = client.Dispatch("Excel.Application")
word = client.Dispatch("Word.Application")
doc = word.Documents.Open('Table1.docx')
book = excel.Workbooks.Open('Table1.xlsx')
sheet = book.Worksheets(1)
sheet.Range("A1:D5").Copy()
wdRange = doc.Content
wdRange.Collapse(0)
wdRange.PasteExcelTable(False, True, False)
os.remove('Table2.xlsx')
book.SaveAs('Table2.xlsx')
book.Close()
excel.Quit()
doc.SaveAs('TableOne.docx')
doc.Close()
word.Quit()
【问题讨论】:
-
os.chdir() 更改 Python 进程的当前目录。它不会更改 Word 或 Excel 的当前目录。因此,您必须将完整路径传递给 Word 或 Excel,或者乐于从其当前目录中读取/写入。 excel.Path 或 word.Path 会给你每个进程的当前路径,但它是一个只读属性,所以你不能改变它。