简体   繁体   中英

Update Excel Spreadsheet with Real-Time Python Data

I'm quite new to Python and have mostly targeted learning the language exactly to automate some processes and update \/ populate excel spreadsheets with realtime data. Is there a way (eg through openpyxl) to update specific cells with data that's extracted through python packages such as pandas or web scraping through BeautifulSoup ?

import pandas as pd
import pandas_datareader.data as web
import datetime as dt

start = dt.datetime(2000,1,1)
end = dt.datetime.today()

tickers = [
    "PYPL",
    "BABA",
    "SAP"
]

    df = web.DataReader (tickers, 'yahoo', start, end)

print (df.tail(365)['Adj Close'])

Pandas has a method to export a Dataframe to Excel. https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_excel.html

filename = "output.xlsx"
df.to_excel(filename)

One option is to run your python script run on a schedule and output to .csv or another format that Excel can link to. This option allows the data to be updated whenever the python script is executed.

Setup:

  1. Output your dataframe to csv/database or other Excel readable format
  2. Setup your python file to run on a schedule (either by scheduling, or a loop with a delay)
  3. Create a data connection from Excel to your python outputted file/database
  4. Build pivot tables based on table in Excel
  5. Refresh data connection/pivot tables in Excel to get the new data

(Appreciate that this is an old question). Real time data in Excel is possible with xlOil<\/a> . xlOil allows you to very easily define an Excel RTD (real time data) function in python. Excel's RTD functions operate outside the normal calc cycle and can push data onto a sheet.

import xloil, datetime as dt, asyncio
import pandas_datareader.data as web

start = dt.datetime(2000,1,1)

@xloil.func
async def pyGetTickers(names:list, fetch_every_secs=10):
    while True:
        yield web.DataReader(
            names, 'yahoo', start, dt.datetime.now())
        await asyncio.sleep(fetch_every_secs)
 

One easy solution is using xlwings library

import xlwings as xw
..

xw.Book(file_path).sheets['Sheet_name'].range('A1').value = df 

this would print out your df to cell A1 of an excel file, via COM - which means it actually writes the values while file is open.

Hope this is helpful

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM