如何强制 pandas 计算 xlsx 的公式而不是将它们读作 NaN?

How to force pandas to evaluate formulas of xlsx and not read them as NaN?

这是我正在尝试做的事情

  1. 将包含公式的 Excel 文件读入 pandas 数据框
  2. 更改某些单元格中的值
  3. 根据公式计算单元格值
  4. 最后,将该文件另存为 html

这是我的代码

import pandas as pd
import numpy as np
from openpyxl import load_workbook

wb = load_workbook(filename = 'initial.xlsx')
sheet_names = wb.get_sheet_names()
name = sheet_names[0]
sheet_ranges = wb[name]
df = pd.DataFrame(sheet_ranges.values)
df['x']['C'] = 10
df.to_excel("processing.xlsx", header=False, index=False)

df1 = pd.read_excel("processing.xlsx", sheetname=0, header=0)
df1.to_html('output.html')

使用这段代码,我能够完全发挥作用 processing.xlsx 但如果我尝试将其转换为 html,则数据框会将所有公式读取为 NaN

问题:如何强制pandas计算xlsx的公式而不是将它们读作NaN?

PS:如果我尝试将 initial.xlsx 转换为 html 它工作正常,所以 to_excel[=36= 中一定有问题]输出。

我发现了问题和混乱的解决方法。 Problem:openpyxl 保存时不会保持类型完整。 processing.xlsx 的大小减少了 10kb。因此,pandas读作NaN。因此,我不得不使用 xlwings 来正确破译细胞类型。 PS: 这不是最好的解决方案,因此,欢迎其他答案

def df_from_excel(path):
    app = xw.App(visible=False)
    book = app.books.open(path)
    book.save()
    app.kill()
    return pd.read_excel(path,header=0)

df1 = df_from_excel("1.xlsx")
print(df1.head())
df1.to_html('public\output.html')