【问题标题】:How to transfer data from one worksheet into another using python in the same workbook?如何在同一个工作簿中使用 python 将数据从一个工作表传输到另一个工作表?
【发布时间】:2017-03-15 20:59:40
【问题描述】:

我想使用 python 将“Sheet1”中的数据传输到同一工作簿中的工作表“Sheet2”中。我已经编写了下面的脚本,但面临 'IndexError: list index out of range' 。我知道这不是最好的方法。如果有人能以更有效的方式指导我,我将不胜感激。我在下面分享excel文件的快照

我可以直接输入'Sheet1'单元格值--->'Sheet2'单元格值而不是做'Sheet1'单元格值--->List---->' Sheet2' 单元格值

 import openpyxl  
 wb = openpyxl.load_workbook('C:\Users\laban\Desktop\Par-emails1.xlsx') 
 type(wb)
 wb.get_sheet_names() 
 sheet = wb.get_sheet_by_name('Sheet1') 
 type(sheet)  
 anotherSheet = wb.active
 sheet1 = wb.get_sheet_by_name('Sheet2')
 type(sheet1)
 par=[sheet.cell(row= col, column=1).value for col in range(1, 2450)]
 email_no=[sheet.cell(row= col, column=2).value for col in range(1, 2450)]
 Domain=[sheet.cell(row= col, column=3).value for col in range(1, 2450)]
 email=[sheet.cell(row= col, column=4).value for col in range(1, 2450)]

 for x in range(0,2450):
      if email_no[x]<9:
          sheet1.cell(row= x+1, column=1).value=par[x]
          sheet1.cell(row= x+1, column=2).value=email_no[x]
          sheet1.cell(row= x+1, column=3).value=Domain[x]
          sheet1.cell(row= x+1, column=4).value=email[x]


 wb.save('C:\Users\laban\Desktop\Par-emails1.xlsx')

【问题讨论】:

  • 你在哪一行得到这个错误?错误信息总是伴随着代码崩溃的(最新的)行号。它会在for x in range(0,2450) 崩溃吗?我记得 openpyxl 从 1 而不是 0 开始索引。
  • 如果 email_no[x]
  • 我怀疑 x = 0 在那一行。我说的对吗?

标签: python excel


【解决方案1】:

你可以使用:

wb = openpyxl.load_workbook('C:/Users/laban/Desktop/Par-emails1.xlsx')
sheet1 = wb.get_sheet_by_name('Sheet1')
sheet2 = wb.get_sheet_by_name('Sheet2')

for i,row in enumerate(sheet1.iter_rows()):
  for j,col in enumerate(row):
    sheet2.cell(row=i+1,column=j+1).value = col.value

显然,在 2.4 中,您可以使用一个命令执行此操作:Copy whole worksheet with openpyxl

【讨论】:

    【解决方案2】:

    显然,这是我目前使用的非常简化的版本。 这是一个代码 sn-p 用于将数据从 sheet1 复制到 sheet2 而不进行任何格式化。 您不需要指定最大行数、最大列数,因为您可以使用它来获取它 sheet.max_rowsheet.max_columns 方法。

    from openpyxl.cell import Cell    
    
    max_row = sheet1.max_row       #Get max row of first sheet
    max_col = sheet1.max_column    #Get max column of first sheet
    
    for row_num in range(1,max_row + 1):    #Iterate through rows
        for col_num in range(1, max_col + 1):   #Iterate through columns
            _cell1 = sheet1.cell(row=row_num, column=col_num)    
            _cell2 = sheet2.cell(row=row_num, column=col_num)    
            _cell2.value = _cell1.value
    

    为理解添加了额外的变量。您可以在最后进行压缩。

    【讨论】:

      【解决方案3】:

      bernie 在这里可能有最好的答案(复制整个工作表),但您的索引错误可能来自:

      par=[sheet.cell(row= col, column=1).value for col in range(1, 2450)]
      

      比:短 1 个单元格:

      for x in range(0,2450):
      

      【讨论】:

      • 伯尼的答案在哪里?或者你在这里指的谁是伯尼?
      【解决方案4】:
      def excel_op():
      
         filename='D://Python//excelread.xlsx'
              sheet_name='Sheet1'
              book = xlrd.open_workbook(str(filename))
      
              sheet = book.sheet_by_name(sheet_name)
              workbook = xlsxwriter.Workbook('excelwrite.xlsx')
              worksheet = workbook.add_worksheet()
      
              row_count = int(sheet.nrows)
              col_count = int(sheet.ncols)
              for row in range(0, int(row_count)):
                  for col in range(0, int(col_count)):
                      worksheet.write(row,col,str(sheet.cell(row, col).value))
              workbook.close()
              del book
      

      【讨论】:

        【解决方案5】:
         shutil.copy("Source.xlsx", "target.xlsx")
        

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-09
        • 1970-01-01
        相关资源
        最近更新 更多