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
secsilm
V2EX  ›  Python

Python 如何读取 excel 的同时保留格式信息

  •  
  •   secsilm ·
    secsilm · 2019-07-31 17:53:23 +08:00 · 5300 次点击
    这是一个创建于 1943 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如单元格背景颜色是黄色,如何读出来这个信息。

    13 条回复    2019-08-09 10:20:40 +08:00
    TimePPT
        1
    TimePPT  
       2019-07-31 21:47:47 +08:00
    试试 openpyxl ?
    secsilm
        2
    secsilm  
    OP
       2019-08-01 08:37:07 +08:00 via Android
    @TimePPT 谢谢。我试了试貌似不能正确获取颜色,获取到的颜色和 excel 的颜色明显不一致
    TimePPT
        3
    TimePPT  
       2019-08-01 08:46:24 +08:00 via Android
    @secsilm 咦是么?我昨天试了没啥问题。难道是版本问题
    Crisimple
        4
    Crisimple  
       2019-08-01 09:23:39 +08:00 via Android
    正好遇到了这个问题,向大佬们学习一波
    secsilm
        5
    secsilm  
    OP
       2019-08-01 09:29:27 +08:00 via Android
    @TimePPT 是么,我回去再试试,也有可能我那个 excel 有问题?
    TimePPT
        6
    TimePPT  
       2019-08-01 09:37:28 +08:00 via Android
    @secsilm 可能版本问题,我用的 Mac 下 Excel 新版,能正确取到颜色。但如果选择颜色填充时用了默认系列色,只会取到系列的色系编号等,不直接展示 rgb 值。这个得看一下
    secsilm
        7
    secsilm  
    OP
       2019-08-01 14:00:05 +08:00
    @TimePPT 我试了试,Ubuntu 16.04 + Python 3.6 + openpyxl 2.6.2 + Excel 2016,手动输入和填充颜色,excel 文件在此:

    https://pan.baidu.com/s/155cFlg8deR2Ab9KQ1qf2mQ,提取码: s4xq

    代码如下:

    ```python
    from openpyxl import load_workbook


    def read_color(f):
    wb = load_workbook(f)
    ws = wb.active
    for row in ws.iter_rows():
    for cell in row:
    print(f"cell value={cell.value}, cell color={cell.fill.start_color.index}")
    ```

    输出:

    ```
    cell value=红色, cell color=FFFF0000
    cell value=黄色, cell color=FFFFFF00
    cell value=绿色, cell color=FF00B050
    cell value=红色字体, cell color=00000000
    cell value=黄色字体, cell color=00000000
    cell value=绿色字体, cell color=00000000
    ```

    对于 cell color,我没理解错的话后两位表示透明度,这里我就去掉了

    FFFF0000:
    FFFFFF00:
    FF00B050:

    明显可以看到颜色不对。

    另外你说的「选择颜色填充时用了默认系列色」,找个咋理解呢?我填充的时候就是直接在如下位置选的,这也算是默认系列色吗?

    secsilm
        8
    secsilm  
    OP
       2019-08-01 14:06:14 +08:00
    @TimePPT 上面的代码没有格式化,可以看这个:

    https://gist.github.com/secsilm/a6cfa1addab089df23b242893e50f1f2
    TimePPT
        9
    TimePPT  
       2019-08-01 14:41:59 +08:00   ❤️ 1
    看了下,还真比较麻烦。
    选 [自定义色] 和 [主题颜色] 时候(这个就是我之前说的系列),可以取到,分别是自定义色 RGB 和 theme 系列编号。
    选 [标准色] (就是你配图红框框出来的),通过 cell.fill 没取到。

    暂时没明白啥原因,不好意思,没帮上忙
    secsilm
        10
    secsilm  
    OP
       2019-08-01 14:54:40 +08:00
    @TimePPT 没事,非常感谢,我再看看
    joson1205
        11
    joson1205  
       2019-08-01 16:42:34 +08:00
    xlsxwriter
    secsilm
        12
    secsilm  
    OP
       2019-08-01 17:52:42 +08:00
    @joson1205 看了下这个是用来写 excel 的吧,我这需要的读
    joson1205
        13
    joson1205  
       2019-08-09 10:20:40 +08:00
    @secsilm 刚好看到个例子,没尝试,你可以看看,https://www.penwatch.net/cms/excel_cell_bg_color/
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3053 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 00:10 · PVG 08:10 · LAX 16:10 · JFK 19:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.