Python 使用openpyxl写入Excel会产生不同的字符符号
下面是我用来在excel中插入行的代码Python 使用openpyxl写入Excel会产生不同的字符符号,python,excel,openpyxl,Python,Excel,Openpyxl,下面是我用来在excel中插入行的代码 from openpyxl import Workbook wb = Workbook() sheet = wb.active i = ['an', '_xa100_list'] sheet.append(i) wb.save('appending_values.xlsx') 问题是,在写入上述excel之后,当我打开文件时,我可以看到第二列的值为__ꄀ列表而不是“\u xa100\u列表” '\\u xa100\\\uu'被内部替换
from openpyxl import Workbook
wb = Workbook()
sheet = wb.active
i = ['an', '_xa100_list']
sheet.append(i)
wb.save('appending_values.xlsx')
问题是,在写入上述excel
之后,当我打开文件时,我可以看到第二列的值为__ꄀ列表
而不是“\u xa100\u列表”
'\\u xa100\\\uu'
被内部替换为'__ꄀ__'代码>
为什么会发生这种情况?我如何将准确的字符串打印到excel而不是此内部转换表单?讨论
该框显示是因为您没有使用具有该字符的字体。这是UTF-16中编码为A100
的unicode字符。现在,为什么Excel要将\u xa100\u
转换为DIT?原来,\ux[bytes]\ux
是Excel中的转义序列。尝试一下可以呈现以下内容的内容:
来自openpyxl导入工作簿的
wb=工作簿()
工作表=wb.active
i=['an','u x0040\u list']
附页(一)
wb.save('appending_values.xlsx')
您应该在Excel中看到下表。这是因为0040
是编码的@
A.
B
一
@名单
这是因为U+A100
是符号ꄀ代码>。不幸的是,openpyxl似乎在写入文件之前将所有字符串转换为unicode,因此str.encode
似乎也不起作用。也许你可以试着去看看。是的,谢谢。它与xlsxwriter配合使用。在引擎盖下,xlsxwriter通过添加X005F有效地使其X005F XA100逃逸XA100,因此Excel可以毫无问题地进行渲染。但当在libreoffice中打开同一个文件时,它会整体显示“X005F_XA100”。libreoffice似乎没有处理或考虑将X005F作为转义序列。openpyxl没有做任何特殊的事情,问题是您正在将XML转义值嵌入字符串中。谢谢,这很有效。但是,您能否进一步解释当从用户端写入excel时,实际的流程是什么,比如excel内部发生了什么样的编码或解码来将数据写入用户通过python或java或任何输入发送的文件?另外,如果A100是我发送的unicode值,那么“_x”wll只是将其转义,从而将它们作为特殊字符呈现?如果我能理解excel内部处理字符的一般流程,这将是非常有帮助的。其他关于这个问题的评论也提到了这一点:excel在这里没有做任何事情,转义序列是OOXML规范的一部分,OOXML是excel使用的文件格式。这种行为不是Excel根据其规范解析OOXML以外的任何操作的结果。还请注意,要成为有效的OOXML转义序列,必须使用尾随的\uu
。