每次我 运行 程序时,如何让 Python 在 excel 中添加一个新行?

How to get Python to add a new row in excel every time I run the program?

我有一个函数,它从沙箱 api 收集数据,并结合使用 pandas 和 xlsxwriter 将这些数据写入 ecxel sheet。我的问题是每次我 运行 程序时如何让 Python 将新数据写入新行?现在它只是在每次我 运行 程序重新开始时覆盖旧数据。

这是我的代码:

import pandas as pd
import xlsxwriter
import requests

def collection():
api_url = f'https://sandbox.millistream.com/mws.fcgi?usr=sandbox&pwd=sandbox&cmd=quote&list=39970\
&fields=symbol,name,diff1dprc,lastprice,time&orderby=symbol&order=asc&timezone=Europe/Oslo&filetype=json'
data = requests.get(api_url).json()

my_columns = ['Time', 'Stocks price']
final_dataframe = pd.DataFrame(columns=my_columns)

final_dataframe = final_dataframe.append(
    pd.Series(
        [
            data[2]['time'],
            data[2]['lastprice']
        ],
        index=my_columns),
    ignore_index=True
)

writer = pd.ExcelWriter('Testing.xlsx', engine='xlsxwriter')
final_dataframe.to_excel(writer, 'AKER', index=False)

background_color = '#000000'
font_color = '#E8130F'

string_format = writer.book.add_format(
{
'font_color': font_color,
'bg_color': background_color,
'border': 1
}
)
dollar_format = writer.book.add_format(
{
'num_format': '[=13=].00',
'font_color': font_color,
'bg_color': background_color,
'border': 1
}
)

writer.sheets['AKER'].set_column('A1:A506', 20, string_format)
writer.sheets['AKER'].set_column('B1:B506', 10, dollar_format)
writer.save()

这是 Excel 中的 return:

这就是我希望 return 的样子:

您正在覆盖数据,因为每次您 运行 脚本都会创建一个新的空数据框并将数据附加到该数据框。您需要做的是首先加载现有文件,将数据附加到该文件,保存并重复。

因此在您的代码中替换第 11 行

final_dataframe = pd.DataFrame(columns=my_columns)

final_dataframe = pd.read_excel('Testing.xlsx')

我运行程序几次并得到了你想要的输出:

最后,您一直在格式化 A 列,直到最大行。这不是什么大问题,但有更优雅的方法来仅格式化包含数据的行。