如何在同一工作簿中使用python将数据从一个工作表传输到另一个工作表?

我想使用python将我在'Sheet1'中的数据转移到工作表'Sheet2'中。我已经写了下面的脚本,但是面对'IndexError:列表索引超出范围' 。 我知道这不是最好的办法。 如果有人能以更高效的方式引导我,我将不胜感激。 我在下面分享excel文件的快照

我可以直接input'Sheet1'单元格值 – >'Sheet2'单元格值,而不是'Sheet1'单元格值 – > List – >'Sheet2'单元格值吗?

在这里input图像说明

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') 

您可以使用:

 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你可以用一个命令来做到这一点: 复制整个工作表与openpyxl

显然,这是我目前使用的非常简化的版本。 下面是一个代码片段,用于将sheet1中的数据复制到sheet2而不进行任何格式化。 您不需要指定max rows,max列,因为您可以使用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 

增加了额外的变数来理解。 你可以压缩在你的最后。

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

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

比1个单元短:

 for x in range(0,2450): 
 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