xlsxwriter - Xlsxwriter:如何禁用数据标签中的文本换行?
问题描述
我正在使用 XLSX 编写器生成饼图,除了一件事之外,一切都很顺利:我似乎找不到一种方法来控制文本包装在我的数据标签(包含百分比值)中。任何大于 10 的字体大小都会导致“%”符号在数字下方换行(您可以在我附在下面的图片中看到这一点)。我正在尝试生成许多图表,因此手动调整它们可能会耗费大量时间。
文档建议可以从 num_format 启用或禁用换行。对于单元格,此属性设置为“格式”对象。但是,虽然数据标签文本具有 num_format 属性,但文档明确声明它必须使用字符串文字进行设置,并且不能采用格式对象。我不知道如何防止字符串用字符串文字格式换行。
或者,我研究了扩展/减少数据标签的宽度/高度。但是,库中似乎也缺少此选项。
据我所知,其他属性似乎都没有建议避免包装文本的方法。
我的问题是,有没有我缺少的解决方案?我将在下面留下一些输出和代码。
当前代码:
chart.add_series({
'categories' : '={}!B1:C1'.format(product_sheetname),
'values' : '={}!B2:C2'.format(product_sheetname),
'data_labels':{
'percentage':True,
'fill': {'color':'#363636'},
'font': {'name':'Arial (Body)', 'color':'white', 'size':16},
},
'points' : [
{'fill':{'color':'#4471d2'}},
{'fill':{'color':'#ff871c'}}
]
})
电流输出:
更新:根据下面的评论,一个快速的解决方法是扩大图表的大小。虽然这解决了换行问题,但它破坏了使用更大字体的目的。
解决方案
XlsxWriter 中没有任何方法可以调整数据标签的大小,但 Excel 应该自动执行此操作以获得最佳结果。
我试图复制,但没有看到你得到的文本换行(即使我尝试了 3 个不同版本的 Excel):
import xlsxwriter
workbook = xlsxwriter.Workbook('chart_pie.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write_row('B1', ['Apple', 'Cherry'])
worksheet.write_row('B2', [53, 47])
chart = workbook.add_chart({'type': 'pie'})
product_sheetname = 'Sheet1'
chart.add_series({
'categories' : '={}!B1:C1'.format(product_sheetname),
'values' : '={}!B2:C2'.format(product_sheetname),
'data_labels':{
'percentage':True,
'fill': {'color':'#363636'},
'font': {'name':'Arial (Body)', 'color':'white', 'size':16},
},
'points' : [
{'fill':{'color':'#4471d2'}},
{'fill':{'color':'#ff871c'}}
]
})
worksheet.insert_chart('B3', chart, {'x_offset': 25, 'y_offset': 10})
workbook.close()
输出:
推荐阅读
- python - numpy中张量的矩阵向量乘法
- eclipse - Eclipse 在 ABAP 程序启动时显示登录屏幕
- laravel - 获取在 Laravel API 中执行的数据库语句列表
- python - Python比较和区分自定义对象
- php - 在 Laravel 8 中运行多个 PHPUnit 测试时出错
- nginx - nginx 可以通过哪些方式向我的应用服务器发送请求?
- java - wsdl2java 生成带有长名称的 java 类
- python - Python Scrapy OSError: [WinError 123] 文件名、目录名或卷标语法不正确:
- c++ - cv::Mat::clone() 是否比分配由 cv::Mat::zeros() 创建的矩阵更有效?
- python - 打破 try-except 块