使用xlsxwriter生成Excel时堆叠条形图无法显示的问题
问题排查与修复方案
核心问题1:未关闭工作簿
xlsxwriter必须调用workbook.close()才能将所有内容(包括图表)写入Excel文件,你的代码末尾缺少这一步,导致图表没有被持久化到文件中。
核心问题2:工作表名称不匹配
你创建的工作表默认名称是Sheet1,但代码中引用的是sheetname,两者不匹配。解决方式二选一:
- 创建工作表时指定名称:
worksheet_1 = workbook_1.add_worksheet('sheetname') - 把代码中所有
sheetname替换为默认的Sheet1
问题3:系列名称引用错误
第一个add_series中的name引用了两个单元格$I$1:$J$1,每个图表系列的名称应该是单个单元格,需要修改为单个单元格引用,比如'=sheetname!$I$1',或者和第二个系列一样使用列表格式。
修复后的完整代码示例
# 使用原始字符串避免路径转义问题 workbook_1 = xlsxwriter.Workbook(filename=r'C:\Users\testdba\Downloads\DB_1.xlsx') # 指定工作表名称为sheetname,和后续引用一致 worksheet_1 = workbook_1.add_worksheet('sheetname') chart1 = workbook_1.add_chart({'type': 'bar', 'subtype':'stacked'}) # 修复第一个系列的name引用为单个单元格 chart1.add_series({ 'name': '=sheetname!$I$1', 'categories': '=sheetname!$I$2:$I$5', 'values': '=sheetname!$J$2:$J$5', }) chart1.add_series({ 'name': ['sheetname', 0, 8, 0, 8], # 修改为单个单元格(0行8列即I1) 'categories': ['sheetname', 1, 8, 4, 8], 'values': ['sheetname', 1, 9, 4, 9], }) chart1.set_title({'name': 'AGILE COUNT'}) chart1.set_x_axis({'name': 'AGILE'}) chart1.set_y_axis({'name': 'COUNT'}) chart1.set_style(11) worksheet_1.insert_chart('K2', chart1) # 必须调用close保存所有内容 workbook_1.close()
额外注意事项
- 确保I-J列的数据确实存在且格式正确,比如
$I$2:$I$5是分类标签,$J$2:$J$5是对应数值 - 路径中的反斜杠用原始字符串
r''包裹,避免转义字符导致路径解析错误
内容的提问来源于stack exchange,提问作者Rodney Palafox
相关产品推荐
相关产品推荐

