使用 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 图表