使用 XLWINGS 打开工作簿而不使其可见

Posted

技术标签:

【中文标题】使用 XLWINGS 打开工作簿而不使其可见【英文标题】:Open a Workbook with XLWINGS without making it visible 【发布时间】:2016-12-24 00:45:41 【问题描述】:

我开始使用 XLWings(我根本不喜欢 Excel,但这是我必须做的事情)。问题是我找不到让 Python 打开工作簿而不显示它的方法。

似乎旧 XLWings 0.6.4 中工作簿的构造函数是 xlwings.Workbook,其中一个参数是标志“app_visible”(参见 http://docs.xlwings.org/en/v0.6.4/api.html)。

但是,在新的 v0.9.2 Workbook 中已被 Book 取代,并且 Book 没有任何此类标志 (http://docs.xlwings.org/en/stable/api.html)。 App 对象确实有它,我认为这是要走的路。所以我编码了:

import xlwings as xw

app = xw.App(visible=False)
filename = os.path.join(PATH_EXCEL_SAMPLES, r"rangosConDatos_sample01.xls")
book = xw.Book(filename)
# Do stuff with the info in the book
book.close()  # Ya puedo cerrar el libro.
app.kill()

但是,很遗憾,当

book = xw.Book(filename)

执行后app的'visible'属性突然变为True,显示书本。我不知道这是期望的功能还是意外的行为。无论如何,有什么想法我应该怎么做?

【问题讨论】:

现在我会说这是一个错误。像这样打开这本书有用吗? app.books.open(filename) @Felix 我试过了,但效果完全一样。 @Felix 我看到你修好了,谢谢! 是的,v0.9.3 已修复,感谢提及 【参考方案1】:

这是我的工作代码片段:

    import xlwings

    excel_app = xlwings.App(visible=False)
    excel_book = excel_app.books.open('PATH_TO_YOUR_XLSX_FILE')
    excel_book.save()
    excel_book.close()
    excel_app.quit()

【讨论】:

【参考方案2】:

你也可以试试:

import xlwings as xw

app = xw.App(visible=False)
book = xw.Book('PATH_TO_YOUR_XLSX_FILE')
sheet = book.sheets('sheetname')
df = sheet.range('A1:D10')
book.close()
app.quit()

#纠正错字

【讨论】:

【参考方案3】:

你可以试试'with open',例如

with open ("write.csv", "a", newline='') as file:  
    fields=['score', 'name']                       
    writer=csv.DictWriter(file, fieldnames=fields)
    writer.writerow('score' : score, 'name' : username)

with open ("write.csv", "r") as file:
    sortlist=[]
    reader=csv.reader(file)
    for i in reader:
        sortlist.append(i)

【讨论】:

【参考方案4】:

从 0.24.3 版开始,实现了with xw.App,惯用的方式是:

import xlwings as xw

with xw.App(visible=False) as app:
    book = xw.Book("test.xlsx")

    # Do some stuff e.g.
    book.sheets[0]["A1"].value = 12345

    book.save("test.xlsx")
    book.close()

这样做的好处是,如果您使用隐藏实例并且您的代码失败,则不会在后台留下任何隐藏的 Excel 进程。

【讨论】:

【参考方案5】:

这对我有用:

import xlwings as xw

app = xw.App(visible=False)
readsheet = xw.Book('FILE_PATH').sheets['Sheet1']
df = pd.DataFrame(readsheet.range('A1', 'Z99').value)

【讨论】:

以上是关于使用 XLWINGS 打开工作簿而不使其可见的主要内容,如果未能解决你的问题,请参考以下文章

在不打开图表工作簿或使其不可见的情况下更新 PowerPoint 图表

Workbook.SaveAs 使 Excel 与某些工作簿而非其他工作簿一起崩溃

插上翅膀,让Excel飞起来——xlwings

将工作表从一个工作簿(未打开)复制到打开的工作簿

VBA 一些概念与细节

Excel VBA 关闭当前工作簿错误 1004