Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用openpyxl写入Excel会产生不同的字符符号_Python_Excel_Openpyxl - Fatal编程技术网

Python 使用openpyxl写入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'被内部替换

下面是我用来在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'
被内部替换为
'__ꄀ__'

为什么会发生这种情况?我如何将准确的字符串打印到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