我使用# example code
wb = openpyxl.load_workbook('file.xlsx')
sheet = wb.get_sheet_by_name('Sheet1')
sheet.header_footer.left_footer.font_size = 7
sheet.header_footer.left_footer.text = '&BSome text&B\nMore text\nEven more'
sheet.header_footer.right_footer.font_size = 7
sheet.header_footer.right_footer.text = 'Page &P of &N'
wb.save('new_file.xlsx')
打开.xlsx文件,更新其中的一些值并将其另存为不同的.xlsx文件。我正在尝试添加一个包含新行的页脚:
\n
但是当我打开新创建的文件并查看页脚时,Some text^lMore text^pEven more
会以一种奇怪的方式被替换:
os.system('libreoffice --headless --invisible --convert-to pdf --outdir /path/on/disk new_file.xlsx')
我还注意到,如果我尝试在libreoffice的帮助下将其转换为PDF,例如像这样:
Some text_x000D_More text_x000D_Even more
生成的PDF再次呈现出不同的东西:
{{1}}
如何在页脚中正确生成新行?
(可能值得一提的是我在Ubuntu 14.04上使用openpyxl 2.3.3和Python 3.4.LibreOffice的版本是5.0.5.2)
答案 0 :(得分:1)
Excel的页眉和页脚使用奇怪的控制代码格式,其中public class getCustomerInfoModel
{
public string UMENT { get; set; }
public Decimal UMCUS { get; set; }
public string UMNAM { get; set; }
public string UMSLC { get; set; }
}
被XML中的 x000D 替换。页脚是正确的但LibreOffice无法正确呈现它。
答案 1 :(得分:0)
这个问题在2020年仍然有意义,与libreoffice无关。相反,它与openpyxl转义文本的方式有关。我想这很好用,但是在页眉和页脚上似乎没有转义换行符(至少在给出的示例文件中是用excel创建的)。除非发布了修补程序,否则您可以进行以下猴子修补:
from openpyxl.worksheet.header_footer import HeaderFooterItem
def unescape_newline(self):
original_value = self.__str_orig__()
return original_value.replace("_x000a_", "\n")
# please note: the following sentinel is very important.
# without it, you'll hit recursion error as you cannot simply
# replace __str__ over and over.
if not hasattr(HeaderFooterItem, "__str_orig__"):
HeaderFooterItem.__str_orig__ = HeaderFooterItem.__str__
HeaderFooterItem.__str__ = unescape_newline
# now you can assign newlines like so:
sheet.oddFooter.center.text = "This\nis\nmulti\nline\footer"