Mon*_*bir 1 python pandas xlsxwriter excel-2016
import xlsxwriter
import pandas as pd
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()
expenses = (
['Rent', 1000],
['Gas', 100],
['Food', 300],
['Gym', 50],
)
row = 0
col = 0
for item, cost in (expenses):
worksheet.write(row, col, item)
worksheet.write(row, col + 1, cost)
row += 1
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')
workbook.close()
df = pd.read_excel('Expenses01.xlsx')
r_list = df.values.tolist()
for r in r_list:
print(r)
Run Code Online (Sandbox Code Playgroud)
如果我手动打开 Excel 并关闭它而不更改任何内容,它会说保存所有更改。如果我保存它并用 pandas 再次读取它,它会给出带有总和值的正确输出。我似乎不明白出了什么问题。我正在使用 Excel 2016。在 Excel 中,方程运行良好。
在深入研究了一些代码pandas和xlrd代码后,这是我的结论 - 专家们可以随意参与:
现代版本的 Excel(.xlsx文件)是 Excel 读取和写入的一系列 XML 文件。
Excel EXE 负责运行方程,例如您的SUM公式。因此,当您打开工作簿时,Excel 会计算总和并将该值存储到其基础 XML 文件中。
但是,如果不打开 Excel,则不会计算此公式。
简单来说,该pd.read_excel()函数使用该xlrd库来解析 XML 文件并将值作为DataFrame.
但是,如果没有 Excel 运行计算(即:您的SUM函数),则该值不会存储到基础 XML 文件中。所以你会得到 0 返回。
这是一些进一步的阅读,由 @jmcnamara 的评论提供。
您可能的解决方案是将数据存储到 CSV 文件中,并让 Python ( pandas) 负责您的计算和数据操作。Pandas 非常乐意读取和写入 CSV 文件。
或者,尝试subprocess从 Python 脚本内部打开/关闭 Excel。
伪代码示例:
import subprocess
# Open Excel and workbook.
subprocess.Popen('start excel.exe /path/to/myExcel.xlsx', shell=True)
# Kill all open Excel instances. (Use with care!)
subprocess.Popen('taskkill /f /im excel.exe', shell=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2397 次 |
| 最近记录: |