首页 > 解决方案 > 使用换行文本保存的 Excel 文件在 Libreoffice 和 soffice 中打开而不换行

问题描述

我在 Microsoft Office 2007 中使用新格式 xlsx 为单元格和自动高度设置了换行文本(它对旧 xls 的工作方式相同)。

当我保存文件并使用 Libreoffice 打开它时,换行文本不起作用(它在一行上显示单元格,而里面的文本可能被换行 - 但我看不到它)。然后我转到菜单文件-> 文本->,我在这里看到选择了换行文本。我取消选择它,然后列高自动更改为高度,即带有换行文本的单元格的高度,但文本在一行上。然后我再次转到 File -> Text -> Wrap text 并选择它,最后一切看起来都很正常。

问题是我需要让 Libreoffice 以某种方式识别包装文本的列高,以便在打开 xlsx 文件后一切正常,而不对其进行任何更改。

那么有没有办法以 Libreoffice 识别的方式从 Microsoft Office 设置此行高。为了创建 Microsoft excel 文件,我使用模板 + openpyxl。我已经在 xlsx 模板(使用 openpyxl)和之前的模板中设置了 python 中的换行文本。

但我认为这不是 openpyxl 特定的,因为仅使用 Microsoft Office、保存 xlsx 文件并使用 Libreoffice 打开会以错误的方式显示单元格。使用整个过程 1.Microsoft xlsx 2.python openpyxl 3. 保存文件会导致正常的 Microsoft 文件具有行高工作,并且在 Libreoffice 中有一个行单元格用于包装文本。所以我不知道如何解决这个问题。可能有使用 openpyxl 或仅使用 microsoft office 的解决方案,但我必须让文件在 libre office 中打开,并且此包装文本(行高)正常工作,因为之后我以编程方式将文件发送到 soffice 以将其导出为 pdf

subprocess.call(['soffice', '--headless', '--convert-to', 'pdf', path_xlsx, '--outdir', directory_xlsx])

因此我没有选择打开文件并手动更改它。 更改 pdf 导出解决方案不是一种选择

===============

在从 Libreoffice 编辑 wrap 选项之前,该行在工作表中看起来是这样的(此代码是从工作表文件 xl/worksheets/sheet1.xml 的 xlsx 存档中提取的):

<row r="4" spans="1:13">

编辑后看起来像这样:

<row r="4" customFormat="false" ht="41.95" hidden="false" customHeight="false" outlineLevel="0" collapsed="false">

因此,如果有办法通过 openpyxl 添加collapsed="false"、customHeight="false" 和customFormat="false",这可以解决问题。

编辑 1:我在 openpyxl.worksheet.dimensions 模块中找到了它们。但它们无法设置。

标签: pythonexcelms-officeopenpyxllibreoffice

解决方案


对我来说,解决方案是根据使用 openpyxl 的内容设置每一行的高度。如果我们使用单色字体并根据行中最大的单元格计算可能的宽度和高度,则可以做到这一点。这不是完美的解决方案,因为可能会有额外的空间,并且在某些情况下可能会中断,所以我不接受这个作为答案。我增加了常数,为任何情况提供更多空间(使高度更大),因此这不能被接受,但仍然是解决方案。


推荐阅读