【问题标题】:How do I download an xlsm file and read every sheet in python?如何下载 xlsm 文件并阅读 python 中的每张纸?
【发布时间】:2019-05-20 18:05:15
【问题描述】:

现在我正在做以下事情。

import xlrd

resp = requests.get(url, auth=auth).content
output = open(r'temp.xlsx', 'wb')
output.write(resp)
output.close()
xl = xlrd.open_workbook(r'temp.xlsx')
sh = 1
try:
    for sheet in xl.sheets():
    xls.append(sheet.name)
except:
    xls = ['']

它正在提取工作表,但我不知道如何读取文件,或者将文件保存为 .xlsx 是否实际上适用于宏。我所知道的是代码现在无法正常工作,我需要能够捕获宏中生成的数据。请帮忙!谢谢。

【问题讨论】:

  • 我对你想要做什么感到困惑。另外,您是说 .xlsx 文件中有宏吗?
  • 这是一个启用宏的 .xlsm 文件,我将它保存为 xlsx,但它剥夺了从宏中获取数据的能力。我正在尝试下载文件。将其保存在存储内容的临时文件中,然后处理数据并将其逐张放入DataFrame中。
  • 下载文件后,请查看stackoverflow.com/a/61267822/6117565

标签: python excel python-2.7 xlrd


【解决方案1】:

如果您想打开、修改和保存.xlsm 文件而不损坏它们,我强烈建议您使用xlwings。我尝试了很多不同的方法(使用其他模块,如openpyxl),但宏最终总是被破坏。

import xlwings as xw
app = xw.App(visible=False) # IF YOU WANT EXCEL TO RUN IN BACKGROUND

xlwb = xw.Book('PATH\\TO\\FILE.xlsm')
xlws = {}
xlws['ws1'] = xlwb.sheets['Your Worksheet']

print(xlws['ws1'].range('B1').value)   # get value
xlws['ws1'].range('B1').value =  'New Value'   # change value

yourMacro = xlwb.macro('YourExcelMacro')
yourMacro()

xlwb.save()
xlwb.close()

编辑 - 我添加了一个选项,让 Excel 在用户请求时保持不可见

【讨论】:

  • 我需要先通过python下载文件。我该怎么做呢?
  • 你从哪里下载文件? FTP服务器?外接硬盘?等等?
  • 查看this answerthis one。应该是相当海峡前进
  • 这不是我要找的。我希望 Python 完成所有工作。我不想归档以打开自己。 Python 需要打开文件、使用宏并提取数据。在 Python 提取所有数据之前,我不会知道工作表名称或其中的数据。
  • 您需要以某种方式访问​​ Excel 才能运行宏。您可以创建一个 VBS 脚本并运行一个子进程,或者只是在 xlwings 中关闭可见性(实际上是一样的)。我在上面编辑了我的答案以包含此内容。然后在xlwings 中运行宏并提取如上所示的数据
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2015-10-18
相关资源
最近更新 更多