【问题标题】:Is it possible to use only the name of the files instead of writing out the entire path?是否可以仅使用文件名而不是写出整个路径?
【发布时间】: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 会给你每个进程的当前路径,但它是一个只读属性,所以你不能改变它。

标签: python path


【解决方案1】:

是的,这是可能的。只需将您的 import os 行移动到文件顶部(在 win32com 导入之前或之后,没关系),然后放在下一行

os.chdir(r"C:\Users\crist\word_automation\Summary_template")

您现在可以省略发送到 word.Documents.open()excel.Workbooks.open() 的完整路径,就像您在问题下方显示的那样。

【讨论】:

  • 我做了你提到的,我得到了同样的错误。 @MattDMo
  • 我在问题底部添加了我的新代码
  • 这是错误:com_error: (-2147352567, '发生异常。', (0, 'Microsoft Excel', "对不起,我们找不到 Table1.xlsx。有可能是移动、重命名或删除?", 'xlmain11.chm', 0, -2146827284), None)
  • os.chdir() 的问题在于它正在更改 Python 进程的目录。但是,Word 处于不同的过程中。在 Word VBA 中,有一种方法可以更改进程当前目录,但我不知道从 Word 自动化模型中可以做到这一点。 (可能是一种方法,但我不知道。)所以现在,您必须将完整路径传递给函数。如果适用,用“Excel”代替“Word”。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2022-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
相关资源
最近更新 更多