求教 pandas 输出到 Excel,=号如何以正常字符串输出并正确显示

2020-08-15 22:02:36 +08:00
 huqay

使用 python 的 pandas 读取 Excel 表格数据,然后进行处理。对 DataFrame 输出成 Excel,然后用 Excel 打开,面对类似于此种数据时(=61-A106-X20 ),Excel 会默认作为公式显示成计算结果,而无法正确显示为字符串型式,需双击单元格后才能正确显示。求解决办法。 尝试使用此种代码对数据格式进行转换仍有问题:

writer = pd.ExcelWriter('haha.xlsx', engine='xlsxwriter')
data_cabling.to_excel(writer, sheet_name='Sheet1')

workbook  = writer.book
worksheet = writer.sheets['Sheet1']

format1 = workbook.add_format({'num_format': '@'})
worksheet.set_column('A:BA', 18, format1)

writer.save()
2746 次点击
所在节点    Python
15 条回复
leschans
2020-08-15 22:05:40 +08:00
‘= 呢
huqay
2020-08-15 22:09:50 +08:00
@leschans 在 A:BA 列的单元格中
levelworm
2020-08-15 22:10:02 +08:00
前面加个单引号试试看,在 Excel 里就是这样。
huqay
2020-08-15 22:12:07 +08:00
@levelworm 这样是可以显示成字符串,但是输出成 Excel 后打开会是‘=61-A106-X20 还是需要一个一个地双击单元格才可以变成=61-A106-X20 。
levelworm
2020-08-16 02:21:01 +08:00
@huqay 问题是 Excel 里就是这样吧,你总得先打单引号,然后他会识别。可能我还是没搞清楚你的需求。。。
fox1751
2020-08-16 08:32:12 +08:00
@huqay 把一个一个双击单元格的操作,改为分列操作
huqay
2020-08-16 10:05:33 +08:00
@levelworm 可能确实是 Excel 的问题。
cassidyhere
2020-08-16 14:38:13 +08:00
pd.read_excel 有个可选参数 parse_cols
volvo007
2020-08-16 22:04:43 +08:00
如果你把这些公式单元格,转化成 text 类型,它们就不显示公式的运算结果,而是直接把公式放在上面了

如果方便在 Excel 里面预先操作的,可以把这些单元格转为 text (选中非常简单,全选后 按 F5 然后 special 里面只选择公式单元格即可)

如果要直接用 py 处理,不清楚类似 xlsxwriter,xlrd 或者其他的库,有没有类似的功能——就是不读取计算后的数据,而只读取原来输入的内容
volvo007
2020-08-16 22:08:03 +08:00
@volvo007 找到了,是 openpyxl 这个库,可以用 data_only 参数决定读取的是公式本身,还是计算后的结果
huqay
2020-08-17 20:48:49 +08:00
@volvo007 这个参数是用来读取的方法,不是用来写入的~
volvo007
2020-08-17 21:52:10 +08:00
@huqay 前面已经提到 cell 格式设置为 string,则按照文字显示而非公式

openpyxl 里面设置你要写入公式的区域为 string……
volvo007
2020-08-17 22:57:09 +08:00
@huqay 我翻了下 openpyxl 的手册,半天也没看到保存公式为文本的方法。尽管也有个你用到的 number_format 属性可以设置为 @ ,然而结果还是保存了公式计算后的结果为文本,而不是直接把公式保存为文本……

但如果公式前面加单引号,一样会遇到需要点一下才能识别为文本的问题……好吧……
huqay
2020-08-19 21:33:37 +08:00
@volvo007 感觉这个问题无解了。逼我用 VBA ~
多谢你的解答。
huqay
2020-08-19 23:43:18 +08:00
万万没想到,我还是解决了这个问题。
用了一个不太优雅的办法:
首先人工对原 Excel 文件进行格式设置,把所有单元格设置为文本格式。
然后使用 xlrd 对文件进行写入,只写入值,不改变格式。然后就可以了~

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/698563

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX