首页 > 解决方案 > 在函数内部调用时如何将工作表添加到excel?

问题描述

我在 python 中编写了一个代码,它从 API 调用股票市场数据,执行一些功能并将结果放在 Excel 表中。唯一的问题是,每当我调用此函数时,它都会覆盖现有工作表上的新数据,而不是创建新工作表并将数据输入其中。该函数如下所示:

     def getCSV(self, symbols):
        for i in symbols:
            getIntradayData(i, self.shorttrend, self.longtrend, self.interval)
            
        text=self.exchangeName
        x = text.split(">")
        text=x[1]
        workbook = xlsxwriter.Workbook('tradingviewdata.xlsx')
        worksheet = workbook.add_worksheet(text) 
        bold = workbook.add_format({'bold': 1})
        worksheet.set_column(1, 1, 15)

        worksheet.write('A1', 'Symbol', bold)
        worksheet.write('B1', 'Code', bold)
        worksheet.write('C1', 'Code Short', bold)
        
        row = 1
        col = 0   

        for Symbol, Code, cs in (listfinal):
            try:
                worksheet.write_string (row, col,Symbol)
                worksheet.write_string(row, col + 1, Code)
                worksheet.write_string(row, col + 2, cs)
                
                row += 1
            except:
                pass

        workbook.close()

这里,symbols是作为查询传递给的股票代码列表getIntradayData()

getIntradayData()获取所有参数,从 API 获取数据并在名为 的全局列表中更新答案listfinal,您可以看到在最后一个for循环中调用该列表以将数据写入 excel。

一个新的excel表格是这样形成的

workbook = xlsxwriter.Workbook('tradingviewdata.xlsx')
worksheet = workbook.add_worksheet(text)

哪里tradingviewdata.xlsx是 excel 文件的名称,text是工作表名称。

我希望无论何时getCSV()调用它都会检查是否text存在同名的工作表,如果是,那么它应该将新条目更新到该工作表中。否则,如果该text名称表不存在,它会创建一个新表并将值输入其中。

我正在调用这样getCSV()tkinterGUI

self.button1 = tk.Button(self, text="Submit", command=self.ok2)
def ok2(self):
        self.interval=str(self.variable_a.get())
        self.shorttrend=str(self.variable_b.get())
        self.longtrend=str(self.variable_c.get())
        self.mic=str(self.variable_d.get())
        symbols=getTickers(self.mic)
        self.getCSV(symbols)
        print("done")

至于问题,我发现这个相关问题的解决方案是这样的。

import xlsxwriter
list_name = ["first sheet", "second sheet", "third sheet"]

workbook = xlsxwriter.Workbook(<Your full path>)
for sheet_name in list_name:
    worksheet = workbook.add_worksheet(sheet_name)
    worksheet.write('A1', sheet_name)

workbook.close()

但是我想不出在我的情况下如何使用它,因为我没有现成的列表,但只要调用该函数,它就应该创建一个新工作表。

标签: pythonexcelxlsxwriter

解决方案


推荐阅读