python-docx表格单元格文本旋转后LibreOffice/Word2016行高无法自适应问题
问题解答
问题根因
这个现象既不是python-docx的功能缺陷,也不是操作疏漏,属于LibreOffice、Microsoft Word桌面端软件对表格竖排文本的默认布局规则限制导致的:
你使用的文本方向修改方案本质是向docx文件的XML结构中写入了单元格textDirection属性,python-docx本身已经完成了属性的正确写入,Wordpad兼容该属性时默认会自动适配单元格高度,但LibreOffice和Microsoft Word 2016及以上版本,对设置了非水平文本方向的单元格,默认关闭了自动行高适配逻辑,才会出现文本被截断的问题。
可行解决方案
你可以通过以下几种方法适配Office类软件的布局规则:
- 显式设置首行的行高规则为自动适配:操作完首行单元格文本方向后,导入
WD_ROW_HEIGHT枚举,将首行的height_rule属性设置为自动,示例代码如下:from docx.enum.table import WD_ROW_HEIGHT # table为你操作的表格对象,取首行设置 table.rows[0].height_rule = WD_ROW_HEIGHT.AUTO - 手动设置首行固定高度:提前计算竖排文本所需高度(竖排状态下文本的横向长度等于所需行高),给首行设置固定高度值,该方案兼容性最好,可同时适配LibreOffice和微软Office全版本。
- 额外开启单元格自动换行属性:设置单元格文本方向的同时,将单元格的
wrap_text属性设为True,部分场景下也可触发自动行高适配。
内容的提问来源于stack exchange,提问作者Z.Edibo
相关产品推荐
相关产品推荐

