PhD.William 2024-02-17 13:56 采纳率: 0%
浏览 18
已结题

xlwings写入excel

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

img

测试过,如果只写入excel40000行,则是ok的,但是50000行就不行,哪位能帮助解答一下??

这个问题在windows下面不会出现

  • 写回答

24条回答 默认 最新

  • 知识就是冻梨 2024-02-17 13:57
    关注
    获得7.50元问题酬金

    姜伟 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文件中。

    解决方案:

    1. 分批写入数据:

      • 思路: 将大块数据拆分成多个较小的数据块,然后逐个写入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)
      
    2. 使用pd.ExcelWriter保存DataFrame:

      • 思路: 利用Pandas的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时数据行过多导致的问题。

    评论

报告相同问题?

问题事件

  • 系统已结题 2月25日
  • 创建了问题 2月17日