2017-03-15 45 views
0

我想使用python將'Sheet1'中的數據轉移到工作表'Sheet2'中。使用python.I編寫了下面的腳本,但面臨着'IndexError:列表索引超出範圍'。我知道這不是最好的辦法。如果有人能以更有效的方式引導我,我會很感激。我共享Excel中的快照文件如下如何將數據從一個工作表傳輸到另一個在同一工作簿中使用python?

我可以直接進入「工作表Sheet1」單元格的值--->「Sheet2的」單元格的值,而不是做「工作表Sheet1」單元格的值--->列表--- - >'Sheet2'單元格值

enter image description here

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

在哪一行你有這個錯誤嗎?錯誤信息總是伴隨代碼崩潰的(最新的)行號。它可以在'範圍內的x(0,2450)'碰撞嗎?記得openpyxl開始於1,而不是0。 – Elmex80s

+0

及其索引在 文件 「C:/Users/laban/Excelpython.py」 崩潰,管線24,在 如果email_no [X] <9: IndexError:列表索引超出範圍 –

+0

我懷疑那條線上有'x = 0'。我對嗎? – Elmex80s

回答

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

1

顯然,這是非常簡化的版本使用。 下面是一個代碼片段,用於將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 

增加了額外的變數以供理解。你可以在你的最後壓縮。

0

伯尼可能有最好的答案在這裏(複製整個工作表),但你的索引錯誤可能來自現身:更短的

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

爲1細胞比:

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