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

2019-07-31 17:53:23 +08:00
 secsilm

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

5130 次点击
所在节点    Python
13 条回复
TimePPT
2019-07-31 21:47:47 +08:00
试试 openpyxl ?
secsilm
2019-08-01 08:37:07 +08:00
@TimePPT 谢谢。我试了试貌似不能正确获取颜色,获取到的颜色和 excel 的颜色明显不一致
TimePPT
2019-08-01 08:46:24 +08:00
@secsilm 咦是么?我昨天试了没啥问题。难道是版本问题
Crisimple
2019-08-01 09:23:39 +08:00
正好遇到了这个问题,向大佬们学习一波
secsilm
2019-08-01 09:29:27 +08:00
@TimePPT 是么,我回去再试试,也有可能我那个 excel 有问题?
TimePPT
2019-08-01 09:37:28 +08:00
@secsilm 可能版本问题,我用的 Mac 下 Excel 新版,能正确取到颜色。但如果选择颜色填充时用了默认系列色,只会取到系列的色系编号等,不直接展示 rgb 值。这个得看一下
secsilm
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
2019-08-01 14:06:14 +08:00
@TimePPT 上面的代码没有格式化,可以看这个:

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

暂时没明白啥原因,不好意思,没帮上忙
secsilm
2019-08-01 14:54:40 +08:00
@TimePPT 没事,非常感谢,我再看看
joson1205
2019-08-01 16:42:34 +08:00
xlsxwriter
secsilm
2019-08-01 17:52:42 +08:00
@joson1205 看了下这个是用来写 excel 的吧,我这需要的读
joson1205
2019-08-09 10:20:40 +08:00
@secsilm 刚好看到个例子,没尝试,你可以看看,https://www.penwatch.net/cms/excel_cell_bg_color/

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

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

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

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

© 2021 V2EX