求教 pandas 输出到 Excel,=号如何以正常字符串输出并正确显示 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
huqay
V2EX    Python

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

  •  
  •   huqay 2020-08-15 22:02:36 +08:00 3280 次点击
    这是一个创建于 1889 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

    但如果公式前面加单引号,一样会遇到需要点一下才能识别为文本的问题……好吧……
    huqay
        14
    huqay  
    OP
       2020-08-19 21:33:37 +08:00
    @volvo007 感觉这个问题无解了。逼我用 VBA ~
    多谢你的解答。
    huqay
        15
    huqay  
    OP
       2020-08-19 23:43:18 +08:00
    万万没想到,我还是解决了这个问题。
    用了一个不太优雅的办法:
    首先人工对原 Excel 文件进行格式设置,把所有单元格设置为文本格式。
    然后使用 xlrd 对文件进行写入,只写入值,不改变格式。然后就可以了~
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2811 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 06:44 PVG 14:44 LAX 23:44 JFK 02:44
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86