【问题标题】:How to read values from macro cells in excel using python 3如何使用python 3从excel中的宏单元格中读取值
【发布时间】:2018-02-10 13:02:44
【问题描述】:

我正在尝试使用 openpyxl 库从 python 中基于宏的 xls 文件(.xlsm)中读取内容。我想从单元格中读取值,但我得到的是宏公式而不是单元格中宏的填充值。 有没有办法从 python 中的单元格内容中获取值?

## 下面是示例代码

导入openpyxl

def generate_output_file(template_path, output_path):

# Load/open the existing workbook template
old_wb = openpyxl.load_workbook(template_path, keep_vba=True)
old_sheet = old_wb['sheet1']

# Sample logic for inserting data in sheet1 which will trigger macro and populate some values
# in other cells(eg. C276) of sheet1
old_sheet['B55'] = 'abcd'

# Save the modified workbook
old_wb.save(output_path)

# Now open the modified file in same instance
new_wb = openpyxl.load_workbook(output_path, data_only=True)
new_sh = new_wb.get_sheet_by_name('sheet1')

# this should show populated values of macro cell, but showing None
print(new_sh['C276'].value)

如果 name == "ma​​in":

template_path = "C:\\macro_xls\\sample_test.xlsm"
output_path = "C:\\macro_xls\\sample_test_output.xlsm"
generate_output_file(template_path, output_path)

【问题讨论】:

  • 这个问题和你的问题类似:stackoverflow.com/questions/45949630/…
  • @marni .. 感谢您的回复,但我在使用 openpyxl 加载工作簿时使用 data_only=True,但我使用它然后它给了我 None
  • 我附上了示例代码,其中单元格 B276 包含来自宏的自动填充值.... import openpyxl output_path = "C:\\Users\\DEMO\\macro_xls\\output\\ sample_test.xlsm" wb = openpyxl.load_workbook(output_path, data_only=True) new_sh = wb.get_sheet_by_name('II.8') print(new_sh['B276'].value)
  • 向我们展示您尝试过的代码如何?

标签: python vba openpyxl xlsm


【解决方案1】:

您可以设置data_only=True 以使用公式从单元格中读取值。

from openpyxl import load_workbook
wb = load_workbook("yourData.xlsm", data_only=True)
ws = wb['test']
cell = ws['A1']
value = cell.value

来自doc

data_only (bool) – 控制带有公式的单元格是否有 公式(默认)或上次 Excel 读取时存储的值 表

【讨论】:

  • 我尝试了相同的解决方案(代码在上面的评论中提到),但它给了我 None 值。实际上,我正在为 .xlsm 文件中的普通单元格赋予一些值,一旦我赋予该值,宏就会运行,并且有些单元格的值将自动填充,我正在尝试读取这些单元格中的值相同的执行。
  • 所以必须触发宏才能在单元格中插入数据,否则它是空白的,对吧?
  • 宏被触发。在同一次执行中,我正在将数据写入单元格,从那个宏被触发并且它也填充值。之后,我将保存修改后的工作簿,然后在同一执行中再次使用 data_only=True 打开该工作簿。
  • 那么,如果您尝试将文件保存为.xlsx 格式,然后使用openpyxl 读取此类文件中的数据,会发生什么情况?
  • 用 .xlsx 保存文件,然后用 openpyxl 读取它也不起作用
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 2020-02-17
相关资源
最近更新 更多