2017-06-11 232 views
0

我想創建一個for循環,循環通過excel表單的每個單元格。從該表中提取數據,然後將其放入列表中。通過Excel表循環的Python循環

然後是一個單獨的for循環,循環遍歷列表並將數據分配到單獨的工作表中。

我知道我怎麼能一個一個單獨做這是有點我現在在我的代碼。

import openpyxl 
import xlrd 
import xlwt 
wb = openpyxl.load_workbook('Z:\Public\Safety\SafetyDataPullProject\TestFile.xlsx') 
type(wb) 
sheet = wb.get_sheet_by_name('Sheet1') 
a = sheet['E5'] 

#Data From Old Sheets 
wb = openpyxl.load_workbook('Z:\Public\Safety\SafetyDataPullProject\TestFile.xlsx') 
type(wb) 
sheet = wb.get_sheet_by_name('Sheet1') 




#New Excel Sheet Creation 
book = xlwt.Workbook(encoding="utf-8") 
sheet1 = book.add_sheet("Current") 
sheet1.write(0, 0, "BFI4 AM CARE EOS REPORT", style0) 
sheet1.write(0, 6,(time.strftime("%d/%m/%Y")), style0) 

sheet1.write(1, 0, 'Encounter Type', style1) 
sheet1.write(1, 3, "Day Shift", style1) 
sheet1.write(1, 4, "Night Shift", style1) 
sheet1.write(1, 5, "Totals", style1) 
sheet1.write(1, 6, "WTD", style1) 


sheet1.write(5, 3, "Day Shift", style1) 
sheet1.write(5, 4, "Night Shift", style1) 
sheet1.write(5, 5, "Totals", style1) 
sheet1.write(5, 6, "WTD", style1) 

sheet1.write(2, 0 , "New Wrk Related Injury",style1) 
sheet1.write(2, 3 , a.value) 
sheet1.write(3, 0 , "Wrk Related Follow-up") 
sheet1.write(4, 0 , "Missed Follow-up") 

回答

0

考慮這個例子中,openpyxl拼盡全力:

# Old Sheet 
ws = wb.get_sheet_by_name('Sheet1') 

from openpyxl.styles import Font, colors, PatternFill 
style = {'font': Font(color=colors.BLACK)} 
style1 = {'font':Font(color=colors.WHITE, bold=True,italic=True), 
      'fill':PatternFill(start_color=colors.RED,end_color=colors.RED,fill_type='solid') 
     } 

data = [ 
    ["BFI4 AM CARE EOS REPORT", '', '', '', '', '', (time.strftime("%d/%m/%Y"))], 
    ['Encounter Type', '', '', "Day Shift", "Night Shift", "Totals", "WTD"], 
    ["New Wrk Related Injury", '', '', '', '', '', ''], 
    ["Wrk Related Follow-up", '', '', '', '', '', ''], 
    ["Missed Follow-up", '', '', '', '', '', ''], 
    ['', '', '', "Day Shift", "Night Shift", "Totals", "WTD"] 
    ] 

# Copy Data From Old Sheet 
for dRow in range(2, 5): 
    for dCol in range(3, 7): 
     data[dRow][dCol] = ws.cell(row=dRow+3, column=dCol+2).value 

# New Sheet Creation 
ws1 = wb.create_sheet("Current") 
for row, rData in enumerate(data, 1): 
    ws1.append(rData) 
    for c, rD in enumerate(rData,1): 
     cell = ws1.cell(row=row, column=c) 
     if row == 1: 
      cell.font = style1['font'] 
      cell.fill = style1['fill'] 
     else: 
      cell.font = style['font'] 

wb.save('test.xlsx') 

測試與Python 3.4.2 - openpyxl:2.4.1 - LibreOffice的:4.3.3.2

+0

謝謝你這麼多@stovfl!你認爲你可以幫助我理解這一點嗎?我想添加它,將列表中的str更改爲int,這樣我就可以從另一個表中拉出,並將其添加到單元格中的任何內容中。我覺得我不能夠,因爲我看着這個代碼,並有點困惑。 –

+0

使用'string'或'int'沒有區別。如果你拉'int','openpyxl'會寫'int'。 – stovfl