如何使用Python避免在Excel中覆盖单元格?

3
我正在使用Python-2.7和XlsxWriter在Excel表格中进行写作。
以下是我的代码...
 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表格之前也打印了数据,但没有显示任何错误,也没有重复记录等问题。

请问有人可以指导我错在哪里...

欢迎以任何形式给予指导/帮助。

提前感谢您 :)


请澄清一下,student_result是什么,您期望的输出是什么,哪些内容会被覆盖?请尝试提供一个最小化的示例,说明您目前的操作无法正常工作。您正在循环中写入固定数据到固定单元格,这对我来说已经非常奇怪了。我本来期望这些在循环外部处理。 - CodeMonkey
@user3387223 - 学生结果包含有关学生的数据。它正是上面提到的Excel标题(Student_Id,student_link等)。我的代码对我来说运行良好,只是第一个条目,例如- studdent_id = 1及其详细信息被标题本身覆盖了。 - Pallavi Joshi
2个回答

4

以下是代码示例存在的一些问题:

  • 表头被重写了内层循环的每一次迭代。这部分代码应该放在循环外面。
  • for a in student_result 循环未使用。
  • row_numcol_num 变量被递增,但未使用。
  • enumerate() 返回值为 0 的行值会覆盖或被 A1B1 的表头所覆盖。

修复这些问题可以得到如下代码:

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

美在于你上面解释的所有细节。非常感谢你的解释!!!我希望我能像你一样编写代码并理解概念。 - Pallavi Joshi

0
你已经预设了rownum和colnum,但是在write语句中却没有使用它们。可以考虑修改为:
   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

当我使用 sheet.write(r,c,col) 时,记录被放置得很好。我的问题只在于头部覆盖了第一条记录。要么我没有正确使用for循环,要么就是像您提到的rownum变量不在for循环中的情况。我会测试并告诉您结果。谢谢您的指导! - Pallavi Joshi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接