前言

Python需要读取Excel(.xls、.xlsx)时通常使用xlrd模块;如果要对其内容进行编辑的话稍稍有些麻烦,通常的做法是使用xlutils的copy模块对原文件进行复制,然后保存成新的文件。

使用示例

from xlutils import copy
import xlrd
import time
import os def save_result(file_path,res_flags,request_urls,responses):
book = xlrd.open_workbook(file_path) # 读取Excel
new_book = copy.copy(book) # 复制读取的Excel
sheet = new_book.get_sheet(0)
i = 1
for request_url, response, flag in zip(request_urls, responses, res_flags):
sheet.write(i, 8, u'%s' % request_url)
sheet.write(i, 9, u'%s' % response)
sheet.write(i, 10, u'%s' % flag)
i += 1
report_path = os.path.abspath(os.path.join('report'))
if not os.path.exists(report_path):
os.makedirs(report_path)
new_book.save(os.path.abspath(os.path.join(report_path, 'Report@%s.xlsx' % time.strftime('%Y.%m.%d@%H%M%S')))) # 保存为新的Excel

以上的示例适用于普通场景,假如xlsx较复杂,夹杂着各种格式、规则、宏,可能就会遇到问题---普通读取会丢掉所有这些附带的信息

其实xlrd早就已经适配了这个功能,它提供的formatting_info参数取值为True时(为了节省内存,该参数默认为False),就会读取各种格式的信息。

使用方法

xlrd.open_workbook(file,formatting_info=True) # 读取Excel

但是我们会发现在读取xlsx格式的Excel时,传入formatting_info会直接抛出异常,而读取xls类型的文件时不存在此问题。

raise NotImplementedError("formatting_info=True not yet implemented")

不难推断,抛异常的原因是formatting_info还没有对新版本的xlsx的格式完成兼容。

那么如果我们要操作的文件刚好是xlsx格式,又想保存其原有的格式该怎么办呢?

解决方法

1、修改为xlsx为xls(推荐)

将xlsx另存为xls,然后再进行后续操作,亲测有效,能正常保存Excel原有格式, 不用修改代码。

2、改用 openpyxl

coding尝试读取文件,处理速度真的很慢...而且规则和宏全部丢失。

3、使用pywin32

这是用于Win32 (pywin32)扩展的Python扩展库,它提供了对许多来自Python的Windows api的访问。

4、使用老旧的版本 xlrd-0.6.1

使用xlrd-0.6.1可以读取,没有异常抛出。直到我传入其他几个xls文件,出现Expected BOF record; found 0x4b50 错误,原因是xlrd-0.6.1不支持office2007

参考资料:

http://blog.sina.com.cn/s/blog_5e574c030101an5s.html

https://blog.csdn.net/erlang_hell/article/details/51992928

https://github.com/mhammond/pywin32

【Python】xlrd,NotImplementedError-formatting_info=True not yet implemented的更多相关文章

  1. Python模块学习之xlrd 读取Excel时传入formatting_info=True报错:NotImplementedError: formatting_info=True not yet implemented

    问题:xlrd读取Excel时传入 formatting_info=True 报错 之前我们使用读取xls文件的时候都是使用的xlrd库,但是这个库只能操作 .xls格式,对于后来的 .xlsx的版本 ...

  2. Python导出数据到Excel表格-NotImplementedError: formatting_info=True not yet implemented

    在使用Python写入数据到Excel表格中时出现报错信息记录:“NotImplementedError: formatting_info=True not yet implemented” 报错分析 ...

  3. 【Python】exe2shellcode,shellcode2exe

    用python写这类程序真简洁,要是用C++又不知道得多写多少行代码了. exe2shellcode #! /usr/bin/env python # -*- coding: utf-8 -*- im ...

  4. 【python】坑,坑,折腾一个下午python 3.5中 ImportError: No module named BeautifulSoup

    将语句 from bs4 import BeautifulSoup4 改成 from bs4 import BeautifulSoup 通过 尼玛------------------------! 总 ...

  5. 【python】发送邮件,含附件

    def send_mail(_user,_pwd,_to): # f = open(file_new,'rb') # mail_body = f.read() # f.close() # 读取最新测试 ...

  6. 【Python】无须numpy,利用map函数与zip(*)函数对数组转置(转)

    http://blog.csdn.net/yongh701/article/details/50283689 在Python的numpy中,对类似array=[[1,2,3],[4,5,6],[7,8 ...

  7. 【Python】实现将testlink上的用例指定格式保存至Excel,用于修改上传

    背景 前一篇博客记录的可以上传用例到testlink指定用例集的脚本,内部分享给了之后,同事希望能将testlink上原有的用例下载下来,用于下次修改上传,所有有了本文脚本. 具体实现 获取用例信息 ...

  8. 【python】多进程锁multiprocess.Lock

    [python]多进程锁multiprocess.Lock 2013-09-13 13:48 11613人阅读 评论(2) 收藏 举报  分类: Python(38)  同步的方法基本与多线程相同. ...

  9. 【python】SQLAlchemy

    来源:廖雪峰 对比:[python]在python中调用mysql 注意连接数据库方式和数据操作方式! 今天发现了个处理数据库的好东西:SQLAlchemy 一般python处理mysql之类的数据库 ...

随机推荐

  1. 微信小程序 --- page.json文件

    page.json 文件用于配置当前目录.page.json文件里的配置可以修改 app.json 配置里面的 window:不能覆盖app.json文件里面的 tabBar / 网络超时/ debu ...

  2. PreparedStatement vs Statement

    Statement和PreparedStatement之间的区别 1.PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程   2.使用 Statemen ...

  3. Linux系统下Redis缓存安装配置

    Redis是一个高性能的key-value数据库,现时越来越多企业与应用使用Redis作为缓存服务器.楼主是一枚JAVA后端程序员,也算是半个运维工程师了.在Linux服务器上搭建Redis,怎么可以 ...

  4. Oracle在linux下命令行无法使用退格键退格,无法使用上下键切换历史命令的解决办法

    使用xshell等客户端登录oracl时在命令行无法使用退格键也无法使用上下键切换历史命令可以使用rlwrap解决 1,linux环境 2,下载rlwrap wget http://files.cnb ...

  5. CodeForces 17D Notepad(同余定理)

    D. Notepad time limit per test 2 seconds memory limit per test 64 megabytes input standard input out ...

  6. CH1401 兔子与兔子【字符串】【HASH】

    1401 兔子与兔子 0x10「基本数据结构」例题 描述 很久很久以前,森林里住着一群兔子.有一天,兔子们想要研究自己的 DNA 序列.我们首先选取一个好长好长的 DNA 序列(小兔子是外星生物,DN ...

  7. 2017ACM-ICPC沈阳区域赛

    I-Little Boxes[大数] hdu6225  http://acm.hdu.edu.cn/showproblem.php?pid=6225 题意: 就是给四个大数,输出和. 思路: java ...

  8. ubuntu下完全卸载opencv3.1.0

    在ubuntu下删除opencv需要以下步骤: 1.进入opencv的源代码文件夹下的release(这是你在安装opencv时候自己命名的,cmake时候所在的目录) 2.执行以下命令 sudo m ...

  9. tomcat的配置和优化

    tomcat的内存使用配置,最大连接数配置. 如何修改配置呢,在/tomcat的/bin/下面有个脚本文件catailna.sh. 如果 windows 是bat设置tomcat的使用内存,其实就是设 ...

  10. flask源码剖析--请求流程

    想了解这篇里面的内容,请先去了解我另外一篇博客Flask上下文 在了解flask之前,我们需要了解两个小知识点 偏函数 import functools def func(a1,a2): print( ...