在mac系统下用xlwings写入excel的时候,如果数据行数太多,则写入不了,数据都显示在了终端里面,具体如下

测试过,如果只写入excel40000行,则是ok的,但是50000行就不行,哪位能帮助解答一下??
这个问题在windows下面不会出现
在mac系统下用xlwings写入excel的时候,如果数据行数太多,则写入不了,数据都显示在了终端里面,具体如下

测试过,如果只写入excel40000行,则是ok的,但是50000行就不行,哪位能帮助解答一下??
这个问题在windows下面不会出现
姜伟 William 下午好🌅🌅🌅
本答案参考通义千问
问题描述:
在Mac系统下使用Python库xlwings尝试将DataFrame对象写入Excel文件时,当数据行数超过一定阈值(例如50000行)时,无法正常写入到Excel中,而是数据输出到了调试控制台(终端),而不是Excel工作表。
测试情况与代码片段:
# ... (之前的代码省略)
df = ... # DataFrame对象生成或读取
df2 = [2, 3, 4] # 示例数据
# 写入pkl文件
df.to_pickle(os.path.join(path_d, fname_sf))
# 尝试写入Excel
def AddExcel_PT(scheck, df, newsheet=fname_s):
app = xlwings.App(visible=False, add_book=True) # 创建Excel应用实例
wb = app.books.active # 获取活动的工作簿
ws = wb.sheets.add(newsheet) # 在当前工作簿添加新的工作表
# 试图写入大量数据,但可能有问题
ws.range('A1').options(index=False).value = df.head(50000).values.tolist() # 将前50000行数据写入工作表
# 调用函数
AddExcel_PT(scheck, df2)
# 关闭Excel应用
app.quit()
问题分析与解决方案:
问题原因: 可能是因为Mac系统下的Excel限制了单个工作表可以处理的数据量或者内存消耗,导致一次性写入大量数据时超出限制而没有成功写入到Excel文件中。
解决方案:
分批写入数据:
def AddExcel_PT(scheck, df, newsheet=fname_s, chunk_size=10000): # 修改chunk_size参数以调整分批大小
for i in range(0, len(df), chunk_size):
start_row = i + 1 # 开始行位置
end_row = min(start_row + chunk_size, len(df)) # 结束行位置(包括)
ws.range(f'A{start_row}:Z{end_row}').options(index=False).value = df.iloc[i:end_row].values.tolist()
# 调用函数时,传递完整的df对象
AddExcel_PT(scheck, df)
使用pd.ExcelWriter保存DataFrame:
to_excel方法结合ExcelWriter对象分批次写入数据,可避免一次性加载大量数据到内存。from pandas import ExcelWriter
def AddExcel_PT(scheck, df, newsheet=fname_s):
with ExcelWriter(os.path.join(path_d, f'{fname_s}.xlsx'), engine='openpyxl') as writer: # 使用openpyxl引擎
writer.book = xlwings.Book() # 创建一个xlwings Book对象
df.to_excel(writer, sheet_name=newsheet, index=False, engine='openpyxl', chunksize=50000) # 分批写入数据
writer.save()
# 调用函数
AddExcel_PT(scheck, df)
通过上述两种方案之一,你应该能够解决在Mac系统下xlwings写入Excel时数据行过多导致的问题。