题记:

  最近做Python导入接口,用到xlrd包读取excel文件信息入库,获取合并单元格信息时遇到时而成功时而失败的情况,一开始用xls文件读取不了合并单元格信息,后来换用xlsx格式可以读取。但将导出的文件再重新导入时获取合并单元格信息又失败了。没办法去看看源码看能不能突破,说实话看源码真的头疼,去源码里面搜merge发现里面的 sheet.merged_cells 属性并没有什么特别的地方。后来读merged_cells 头部的注释是发现一个叫formatting_info的参数,然后问题迎刃而解。遂记之。

源码注释:

  1. ##
  2. # List of address ranges of cells which have been merged.
  3. # These are set up in Excel by Format > Cells > Alignment, then ticking
  4. # the "Merge cells" box.
  5. # <br> Note that the upper limits are exclusive: i.e. <tt>[2, 3, 7, 9]</tt> only
  6. # spans two cells.
  7. # <br> -- New in version 0.6.1. Extracted only if open_workbook(formatting_info=True).
  8. # <br>How to deconstruct the list:
  9. # <pre>
  10. # for crange in thesheet.merged_cells:
  11. # rlo, rhi, clo, chi = crange
  12. # for rowx in xrange(rlo, rhi):
  13. # for colx in xrange(clo, chi):
  14. # # cell (rlo, clo) (the top left one) will carry the data
  15. # # and formatting info; the remainder will be recorded as
  16. # # blank cells, but a renderer will apply the formatting info
  17. # # for the top left cell (e.g. border, pattern) to all cells in
  18. # # the range.
  19. # </pre>
  20. merged_cells = []

  

读取合并单元格代码:

  1. def read_excel_as_merge(self,file_name):
         # 读取合并单元格信息,按照平铺方式展开,合并单元格按照合并单元格的最左上单元格填充
  2. data = []
  3. wb = xlrd.open_workbook(file_name,'r',formatting_info=True)
  4. sheet = wb.sheet_by_name(wb.sheet_names()[0])
  5. merge = sheet.merged_cells
  6.  
  7. for ri in range(sheet.nrows):
  8. # print(sheet.row_values(r))
  9. row = []
  10. for ci in range(sheet.ncols):
  11. v = sheet.cell(ri, ci).value
  12. for rg in merge:
  13. a, b, c, d = rg
  14. if ri >= a and ri < b and ci >= c and ci < d:
  15. v = sheet.cell(a, c).value
  16. row.append(v)
  17. data.append(row)
  18.  
  19. return data,merge

能通过百度解决的问题,就不打扰别人;

能通过问人解决的问题,就不读源码;

能通过源码解决的问题,就不自己Coding;

【开发者笔记】python的更多相关文章

  1. 笔记-python操作mysql

    笔记-python操作mysql 1.      开始 1.1.    环境准备-mysql create database db_python; use db_python; create tabl ...

  2. 笔记-python异常信息输出

    笔记-python异常信息输出 1.      异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...

  3. 笔记-python -asynio

    笔记-python -asynio 1.      简介 asyncio是做什么的? asyncio is a library to write concurrent code using the a ...

  4. 笔记-python lib-pymongo

    笔记-python lib-pymongo 1.      开始 pymongo是python版的连接库,最新版为3.7.2. 文档地址:https://pypi.org/project/pymong ...

  5. 笔记-python tutorial-9.classes

    笔记-python tutorial-9.classes 1.      Classes 1.1.    scopes and namespaces namespace: A namespace is ...

  6. 一个Js开发者学习Python的第一天

    原文地址:小寒的博客 https://www.dodoblog.cn/blogs/5bf6b8fa0c09883d0f8aad13 作为一个有着足足两年半学习经验和一年半开发经验的js开发者,看着js ...

  7. 写给.NET开发者的Python教程(一):引言

    距离上一篇博文已过去8个月了,这段时间发生了很多事情导致没能持续更新博客.这段时间除了工作繁忙,业余时间都投入到AI技术的学习中,后面一段时间将会给大家分享我作为一个.NET开发人员在深度学习领域学习 ...

  8. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  9. 【开发者笔记】python中的类方法(@classmethod)和静态方法(@staticmethod)

    在java.c#等高级语言中我们用static来定义静态方法和静态变量,那么在python中如何定义静态方法和静态变量呢. python提供了@classmethod和@staticmethod来定义 ...

随机推荐

  1. Python学习笔记(三)——迭代

    知识点 迭代 迭代 什么是迭代呢?和递归又有什么区别呢? 根据维基百科和网上的资料: 迭代:迭代是重复反馈过程的活动,其目的通常是为了接近并到达所需的目标或结果.每一次对过程的重复被称为一次“迭代”, ...

  2. ubuntu-12.04.5-desktop-amd64.iso:ubuntu-12.04.5-desktop-amd64:安装Oracle11gR2

    ubuntu 桌面版的安装不介绍. 如何安装oracle:核心步骤和关键点. ln -sf /bin/bash /bin/sh ln -sf /usr/bin/basename /bin/basena ...

  3. C# 基础小知识之yield 关键字

    对于yield关键字我们首先看一下msdn的解释: 如果你在语句中使用 yield 关键字,则意味着它在其中出现的方法.运算符或 get 访问器是迭代器. 通过使用 yield 定义迭代器,可在实现自 ...

  4. mysqldump工具,工作的本质是什么呢?(dump表的时候,是否会产生drop表的语句)

    需求描述: 今天在看mysqldump工具的使用过程,发现一个同事,是这样写的mysqldump命令 mysqldump -uroot -pmysql employees titles | mysql ...

  5. Redis生成Id主键的工具

    public class PrimaryKeyGenerator { private static readonly NedisClient client = new NedisClient(GetR ...

  6. MySQL性能优化(二)-- 数据类型,SQL,八种连接

    一.mysql数据类型优化原则 1. 能够使用最小数据类型存储时,尽量使用最小数据类型存储(前提是要评估字段值的真实数据存储范围) eg:create table aaa(id1 int(10) ze ...

  7. 虚拟机 搭建LVS + DR + keepalived 高可用负载均衡

    一:环境说明:   LVS-DR-Master:    10.3.0.82   LVS-DR-Backup:    10.3.0.70   VIP:                10.3.0.60  ...

  8. docker nginx mysql

    docker run -p 9000:9000 --name myphp -v /docker/www/:/var/www/html/ -v /docker/php/php.ini:/usr/loca ...

  9. ajax返回值传给js全局变量

    1. $.ajaxSetup({ async : false //设置ajax为同步方式,异步方式的话在赋值时数据还未提取出来 });var t = ""; var enginee ...

  10. php第一例

    参考 例子 https://www.cnblogs.com/chinajins/p/5622342.html 配置多个网站 https://blog.csdn.net/win7system/artic ...