如何用Python的XlsxWriter动态将嵌套列表写入Excel指定位置?
问题:XlsxWriter写入嵌套列表时单元格定位异常
我尝试使用XlsxWriter向Excel工作表写入数据,但单元格定位不正确。我有一个名为q_arr的嵌套列表,示例数据如下:
q_arr = [ ["", "", "", ""], ["yes", "", "", "comp", ""], ["cateA", "comp", "", "mode"] ]
该列表元素数量不固定,且包含需要保留的空值。目前我已通过以下代码在遍历docs的循环中向第0列写入date数据:
row = 1 for index, result in enumerate(docs): sheet.write(row, 0, result["date"]) row = row + 1
现在需要在该循环内,从第36列、第1行(第0行为表头)开始动态写入q_arr的数据。我尝试了以下代码,但所有内容都被写入同一行,无法正常工作:
row = 1 for index, result in enumerate(docs): sheet.write(row, 0, result["date"]) for row_values in q_arr: sheet.write(rows, cols, row_values) cols += 1 cols = 36 rows += 1 row = row + 1
而脱离docs循环的测试代码(如下)能正常运行:
for row_values in q_arr: for val in row_values: sheet.write(rows, col, val) col += 1 col = 36 rows += 1
请问如何通过Python的XlsxWriter动态将嵌套列表写入Excel?
解决方案
问题核心是变量逻辑混乱和直接写入整个列表导致定位错误,修正后的代码如下:
# 初始化行号,从第1行开始(第0行是表头) row = 1 for result in docs: # 写入当前行第0列的日期数据 sheet.write(row, 0, result["date"]) # 从当前row开始,向36列起写入q_arr的数据 current_row = row col = 36 # 遍历q_arr的每个子列表(对应Excel的一行) for row_values in q_arr: # 遍历子列表的每个元素,写入当前行的对应列 for val in row_values: sheet.write(current_row, col, val) col += 1 # 写完一行子列表后,重置列到36,行号+1 col = 36 current_row += 1 # 更新主行号到q_arr写完后的下一行 row = current_row
关键修正说明:
- 行号关联:用
current_row绑定当前date行与q_arr的起始行,确保每个docs条目对应的q_arr内容紧跟在日期行之后 - 拆分元素写入:嵌套遍历
q_arr的子列表和内部元素,将每个值写入独立单元格,避免把整个列表塞进单个单元格 - 索引重置:每写完
q_arr的一个子列表(Excel的一行),就把列索引重置回36,保证下一行从正确位置开始写入
内容的提问来源于stack exchange,提问作者Kunal Pandey
相关产品推荐
相关产品推荐

