抱歉,我之前的回答中有误。在pandas的`to_excel()`方法中,没有提供`if_sheet_exists`参数来判断Sheet是否已存在。
要解决此问题,可以使用openpyxl库对现有Excel文件进行操作。下面是一个示例代码,它会检查文件是否存在,并根据情况决定是创建新文件还是追加数据至已存在的Sheet:
import os
import openpyxl
import pandas as pd
class InsertCsv:
def __init__(self):
self.csv_path = os.path.join(os.getcwd(), "csv")
def insert(self, df):
self.file, self.min, self.max, self.sum = df
self.year = str(self.max) + ".xlsx"
self.file_path = os.path.join(self.csv_path, self.year)
self.is_file_exist()
if not os.path.isfile(self.file_path):
# 文件不存在,创建新文件并写入数据
self.file.to_excel(self.file_path, sheet_name="Sheet1", index=False, encoding="utf-8")
else:
# 文件已存在,打开文件追加数据
writer = pd.ExcelWriter(self.file_path, mode='a', engine='openpyxl')
writer.book = openpyxl.load_workbook(self.file_path)
writer.sheets = dict((ws.title, ws) for ws in writer.book.worksheets)
self.file.to_excel(writer, sheet_name="Sheet1", index=False, encoding="utf-8", startrow=self.get_last_row())
writer.save()
writer.close()
def is_file_exist(self):
if not os.path.isdir(self.csv_path):
os.makedirs(self.csv_path)
def get_last_row(self):
wb = openpyxl.load_workbook(self.file_path)
sheet = wb['Sheet1']
return sheet.max_row + 1
这段代码会首先检查文件是否存在,如果不存在,则直接通过`to_excel()`方法创建新文件并写入数据。如果文件已存在,则使用`openpyxl`库打开文件,并通过`writer.book`和`writer.sheets`属性来获取已存在的Sheet,然后将数据追加到Sheet的末尾。
希望这次的修改能够解决你的问题。如果还有其他疑问,请随时追问。
以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。 |