从 python 保存的 excel 文件中读取值而不是公式

Read values instead of formulas from excel file saved by python

我正在使用 openpyxl 将一些数据复制到我的 excel sheet,然后从另一个 sheet 读取一些数据。第二个 sheet 具有链接到第一个 sheet 的公式。当我尝试使用 data_only=True 选项读取第二个 sheet 时,我无法恢复这些值。我只是得到 None 而不是值。我认为这是因为我正在使用 openpyxl 来保存 excel 文件。
在excel文件的Inputsheet中写入的代码:

from openpyxl import load_workbook
matched_airfoil_cos = np.load('airfoil_cos.npy')

wb = load_workbook('blockMeshDictGenerator_v3.xlsx')
ws = wb['Input'] 
shift = 9
for index, data in enumerate(matched_airfoil_cos):
    ws.cell(row=index+shift, column=1).value = data[0]
    ws.cell(row=index+shift, column=2).value = data[1]
   
wb.save('blockMeshDictGenerator_v4.xlsx')

从excel文件blockMeshsheet中读取的代码

import openpyxl
import csv

wb = openpyxl.load_workbook('blockMeshDictGenerator_v4.xlsx',data_only=True)
sh = wb['blockMesh'] 
print(sh['C27'].internal_value)

with open('test.csv', 'w') as f:  
    c = csv.writer(f)
    for r in sh.rows:
        c.writerow([cell.value for cell in r])

我也尝试了 xlrd 库。但即使是 cord 库也没有给我这些价值。

我的最终目标是将 blockMesh sheet 中的值存储到文本文件中,为此,我可以使用 pandas read_csv 函数。
任何帮助表示赞赏。谢谢。

您需要通过某种应用程序(如无头 LibreOffice)传递新文件,让它为您计算公式的结果,然后您可以使用纯数据模式。

此外,使用 ws.iter_rows(min_row=shift+1, min_col=1, max_col=2) 避免使用您自己的计数器。