【问题标题】:Python pyexcelerate library writing multiple sheets to same workbook?Python pyexcelerate 库将多张工作表写入同一个工作簿?
【发布时间】:2017-09-14 18:27:22
【问题描述】:

我正在尝试将多张工作表写入一个工作簿,并且我正在使用 pyexcelerate 来利用它优化的写作时间。

这是我当前写入工作簿的代码:

def df_to_excel(df, path, sheet_name='Sheet 1'):
    data = [df.columns.tolist(), ] + df.values.tolist()
    wb = Workbook()
    wb.new_sheet(sheet_name, data=data)
    wb.save(path)

现在,如果我只需要一张纸,这可以很好地工作;但是,如果我在多张纸上书写,则只会保留最后一张纸(之前生成的所有纸都会被替换)。

我想保留所有工作表(使用不同的名称 ofc),我查看了他们的 github 页面,但我找不到有关此类功能的信息: https://github.com/kz26/PyExcelerate

我还查看了其他一些 stackoverflow 帖子,但它们使用不同的包:

  1. Writing resutls into 2 different sheets in the same Excel file
  2. xlwt create dynamic number of worksheets based on input
  3. creating multiple excel worksheets using data in a pandas dataframe

感谢任何帮助!

【问题讨论】:

  • 您总是使用wb = Workbook() 创建一个新的工作簿,请重新阅读链接的示例。
  • 但没有一个链接使用 pyexcelerate 库。这些方法可以跨 diff 库使用吗?
  • 在外面创建您的工作簿一次,然后将其传递给您的def df_to_excel(wb, ...

标签: python excel pyexcelerate


【解决方案1】:

如果您想在工作簿的不同工作表中保存两个不同的 DataFrame(以您的代码作为参考):

from pyexcelerate import Workbook

def df_to_excel(df1, df2, path, sheet_name1='Sheet 1', sheet_name2='Sheet 2'):
    data1 = [df1.columns] + list(df1.values)
    data2 = [df2.columns] + list(df2.values)
    wb = Workbook()
    wb.new_sheet(sheet_name1, data=data1)
    wb.new_sheet(sheet_name2, data=data2) #Just add another sheet
    wb.save(path)

【讨论】:

    【解决方案2】:

    如果您想更快地将不同变量保存在一个 excel 文件的不同工作表中,并且还希望在 excel 文件中使用 pandas.dataframe 的标题和索引。您可以执行以下操作,

        import timeit
        from pyexcelerate import Workbook
    
        def to_Excel(data, fileName):
            start_time = timeit.default_timer()
            wb = Workbook()
            for key in data.keys():
                ws = wb.new_sheet(key)
                frame = data[key]
                frame = frame.transpose()
                frame.reset_index(level=0, inplace = True)
                frame = frame.transpose()
                frame.reset_index(level=0, inplace = True)
                row_num = frame.shape[0]    
                col_num = 1
                for col_name, col_series in frame.iteritems():
                    ws.range((1,col_num), (row_num,col_num)).value = [[x] for x in col_series]
                    col_num += 1       
            wb.save(fileName)
            end_time = timeit.default_timer()
            delta = round(end_time-start_time,2)
            print("Took "+str(delta)+" secs")
    

    'data' 是一个字典变量。 “数据”的“键”作为“工作表名称”,每个键值的数据类型应在熊猫数据框中。

    【讨论】:

      【解决方案3】:

      我们假设我们有列表数据结果列表,并且我们想使用 Python pyexcelerate 将多张工作表写入一个工作簿。

      results = [[(0.0014, 0.0052, 0.827, 10, 'Andy'), (0.0012, 0.0063, 0.906, 11, 'Julia')]]
      headers = list(['PERFORMANCE', 'SPEED', 'DEGREE', 'WINS', 'NAME'])
      path = "/home/yagmurs/Downloads/" + 'Performance'
      workbook = pyexcelerate.Workbook()
      worksheet = workbook.new_sheet('Bench')
      row = 1
      for enum in range(len(headers)):
          worksheet.set_cell_value(row, enum + 1, headers[enum])
      for result in results:
          for line in result:
              row = row + 1
              for col in range(len(headers)):
                  val = line[col]
                  worksheet.set_cell_value(row, col + 1, val)
      workbook.save(path + '.xlsx')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-09
        • 1970-01-01
        • 1970-01-01
        • 2017-07-01
        • 2022-12-24
        • 2021-11-18
        • 1970-01-01
        相关资源
        最近更新 更多