2016-02-03 93 views
2

我使用python-2.7和xlsxwriter在Excel工作表中寫作。如何避免在Excel中使用python覆蓋單元格?

以下是我的代碼...

workbook = Workbook('D:\S_details.xlsx') 
sheet = workbook.add_worksheet() 
rownum = 2 
colnum = 2 
for a in student_result: 
    for r, row in enumerate(student_result): 
      for c, col in enumerate(row): 
        bold = workbook.add_format({'bold': 1}) 
        sheet.write('A1','Student_ID',bold) 
        sheet.write('B1','Student_Link',bold) 
        sheet.write('C1','Student_Name',bold) 
        sheet.write('D1','Student_Qualification',bold) 
        sheet.write('E1','Student_Address',bold) 
        sheet.write('F1','Student_City',bold) 
        sheet.write('G1','Student_State',bold) 
        sheet.write('H1','Student_Country',bold) 
        sheet.write('I1','Student_Stream',bold) 
        sheet.write('J1','Student_Gender',bold) 
        sheet.write(r,c,col) 
        rownum = rownum + 1 
        colnum = colnum + 1 

代碼運行良好,但它是從數據庫中檢索到的第一個條目由每列的標題覆蓋。

因此,只有第一項被覆蓋,條目的其餘部分是可見的完美。

我還打印數據寫入它的Excel工作表之前,但它沒有顯示任何錯誤,也沒有記錄被複制左右。

任何人都可以請指導我要去的地方錯了...任何形式

指導/幫助是值得歡迎的。

感謝你提前:)

+0

請澄清,什麼是student_result,你能指望什麼作爲輸出,什麼是覆蓋?嘗試做一個最小的例子,你在做什麼不工作。您正在將固定數據寫入循環中的固定單元格,這對我來說似乎已經很陌生。我會期待那些在循環之外的人。 – CodeMonkey

+0

@ user3387223 - 學生結果包含有關學生的數據。這正是上面提到的excel標題(Student_Id,student_link..etc)。我的代碼對我來說工作正常,只是第一個入口說eg-studdent_id = 1,它的細節被頭本身覆蓋。 –

回答

3

有與代碼示例中的幾個問題:

  • 爲內循環的每次迭代重新編寫標題。這部分代碼應該在循環之外。
  • for a in student_result環未被使用。
  • row_numcol_num變量遞增,不能使用。
  • enumerate()返回它會覆蓋或通過在集流管的A1B1條目改寫0行值。

修復這些問題會給這樣的事情:

import xlsxwriter 

workbook = xlsxwriter.Workbook('S_details.xlsx') 
sheet = workbook.add_worksheet() 

# Generate some sample data. 
student_result = [] 
for num in range(1, 11): 
    student_result.append([num] * 10) 

# Make the columns wider so that the text is visible. 
sheet.set_column('A:J', 20) 

# Add some formatted headers. 
bold = workbook.add_format({'bold': 1}) 
sheet.write('A1','Student_ID',bold) 
sheet.write('B1','Student_Link',bold) 
sheet.write('C1','Student_Name',bold) 
sheet.write('D1','Student_Qualification',bold) 
sheet.write('E1','Student_Address',bold) 
sheet.write('F1','Student_City',bold) 
sheet.write('G1','Student_State',bold) 
sheet.write('H1','Student_Country',bold) 
sheet.write('I1','Student_Stream',bold) 
sheet.write('J1','Student_Gender',bold) 

# Write the data. 
for row_num, row_data in enumerate(student_result): 
    for col_num, col_data in enumerate(row_data): 
     sheet.write(row_num + 1, col_num, col_data) 

workbook.close() 
+0

美麗是你解釋上述所有細節的方式。感謝^無限的解釋。 !我希望我能夠編碼並理解像你這樣的概念。 –

0

您預設ROWNUM和colnum,但你不是在寫語句中使用它們。如何:

sheet.write(rownum,colnum,col) 

而且你可能不希望提前ROWNUM在山坳的循環,所以:

for a in student_result: 
    for r, row in enumerate(student_result): 
      for c, col in enumerate(row): 
        bold = workbook.add_format({'bold': 1}) 
        sheet.write('A1','Student_ID',bold) 
        sheet.write('B1','Student_Link',bold) 
        sheet.write('C1','Student_Name',bold) 
        sheet.write('D1','Student_Qualification',bold) 
        sheet.write('E1','Student_Address',bold) 
        sheet.write('F1','Student_City',bold) 
        sheet.write('G1','Student_State',bold) 
        sheet.write('H1','Student_Country',bold) 
        sheet.write('I1','Student_Stream',bold) 
        sheet.write('J1','Student_Gender',bold) 
        sheet.write(rownum,colnum,col) 
        colnum = colnum + 1 
       rownum += 1 
+0

當我使用'sheet.write(r,c,col)'時,記錄放置得非常好。我的問題只是第一條記錄被標題覆蓋。要麼我沒有正確地使用for循環,或者你提到的rownum出於for循環可能是一種情況。將測試並讓你知道。感謝您的指導! –