文档章节

Python读写excel

wangxuwei
 wangxuwei
发布于 2016/04/11 14:33
字数 978
阅读 1289
收藏 7

一、Openpyxl不支持老的xls文件、只支持xlsx文件,Openpyxl在python2好像运行不正常

安装

sudo pip3 install Openpyxl

例子:

test.xlsx

$ python3
Python 3.4.3 (default, Oct 14 2015, 20:28:29) 
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from openpyxl.reader.excel import load_workbook
>>> wb = load_workbook(filename=r'./test.xlsx')
>>> ws=wb.get_sheet_by_name("bbb")
>>> print (ws.cell(row=1,column=1).value)
编号
>>> print (ws.cell(row=1,column=2).value)
单位
>>> print (ws.cell(row=2,column=1).value)
16
>>> print (ws.cell(row=2,column=2).value)
内蒙古通信建设工程有限责任公司
>>>

下面的代码从文件test.xlsx表格bbb读取数据,写到新文件result.xlsx到表格"表1"

#coding=utf-8

from openpyxl import load_workbook  
from openpyxl import Workbook  
from openpyxl.writer.excel import ExcelWriter   
wb = load_workbook(filename = r'./test.xlsx')#获取一个已经存在的excel文件wb  
ws=wb.get_sheet_by_name("bbb")#打开该文件wb需要用到的worksheet即ws  
wb1=Workbook()#新建立一个工作簿wb1  
ewb1=ExcelWriter(workbook=wb1)#新建一个ExcelWriter,用来写wb1  
dest_filename=r'result.xlsx'#wb1的名字  
ws1=wb1.worksheets[0]#取得wb1的第一个工作表ws1  
ws1.title=u"表1"#指定ws1名字为表1 
for col_num in range(1,3):#此处遍历列1,2(A,B列)
    for row_num in range(1,42):#表示遍历的行数1,41  
        ws1.cell(row=row_num,column=col_num).value=ws.cell(row=row_num,column=col_num).value

ewb1.save(filename=dest_filename)#保存一定要有,否则不会有结果

注意:最新的openpyxl要做一些修改:

1、get_sheet_by_name函数已经过时,把它改为(不改会告警,但还是可以正确执行):

#ws=wb.get_sheet_by_name("bbb")
ws=wb.worksheets[1]

2、ewb1=ExcelWriter(workbook=wb1)执行报错

TypeError: __init__() takes exactly 3 arguments (2 given)

解决方案:

放弃用ExcelWriter(ewb1),直接用一个语句

wb1.save(filename=dest_filename)

来替换原来的

ewb1=ExcelWriter(workbook=wb1)新建一个ExcelWriter,用来写wb1
....
....
....
ewb1.save(filename=dest_filename)保存一定要有,否则不会有结果

修改后的新版代码如下:

#coding=utf-8

from openpyxl import load_workbook  
from openpyxl import Workbook  
from openpyxl.writer.excel import ExcelWriter


wb = load_workbook(filename = r'./test.xlsx')#获取一个已经存在的excel文件wb
#ws=wb.get_sheet_by_name("bbb")
ws=wb.worksheets[1]
wb1=Workbook()#新建立一个工作簿wb1
#ewb1=ExcelWriter(workbook=wb1)新建一个ExcelWriter,用来写wb1
dest_filename=r'result.xlsx'#wb1的名字
ws1=wb1.worksheets[0]#取得wb1的第一个工作表ws1
ws1.title=u"表1"#指定ws1名字为表1
for col_num in range(1,3):#此处遍历列1,2(A,B列)
    for row_num in range(1,42):#表示遍历的行数1,41
        ws1.cell(row=row_num,column=col_num).value=ws.cell(row=row_num,column=col_num).value

#ewb1.save(filename=dest_filename)保存一定要有,否则不会有结果
wb1.save(filename=dest_filename)

二、python2用xlrd,xlwt来读写xls文件

读:

# -*- coding: utf-8 -*-
# 读取excel数据
# 打印第二行以下的数据
import xlrd
data = xlrd.open_workbook('test.xlsx') # 打开xls文件
table = data.sheets()[1] # 打开第二张表,名字为bbb
nrows = table.nrows # 获取表的行数
for i in range(nrows): # 循环逐行打印
   if i == 0: # 跳过第一行
       continue
   for m in table.row_values(i):
       print m

写:

#coding=utf-8
#######################################################
#filename:test_xlwt.py
#function:新建excel文件并写入数据
#######################################################
import xlwt
#创建workbook和sheet对象
workbook = xlwt.Workbook() #注意Workbook的开头W要大写
sheet1 = workbook.add_sheet('sheet1',cell_overwrite_ok=True)
sheet2 = workbook.add_sheet('sheet2',cell_overwrite_ok=True)
#向sheet页中写入数据
sheet1.write(0,0,'this should overwrite1')#向sheet1页中一行、一列写入数据
sheet1.write(0,1,'aaaaaaaaaaaa')#向sheet1页中一行、二列写入数据
sheet1.write(1,0,u'第二行第一列')#向sheet1页中二行、一列写入数据
sheet2.write(0,0,'this should overwrite2')
sheet2.write(1,2,'bbbbbbbbbbbbb')

#保存该excel文件,有同名文件时直接覆盖
workbook.save('./test2.xls')
print '创建excel文件完成!'

三、pyExcelerator主要用来写。用来读很不方便

#!/usr/bin/env python  
#coding=utf-8
  
from pyExcelerator import *  
  

w = Workbook()  
ws = w.add_sheet('sheet')  
#第一行作为header:注意是(0,0)作为第一行第一列  
ws.write(0,0,u"姓名")  
ws.write(0,1,u"年龄")  
ws.write(0,2,u"班级")  
  
data = [["aaaa",9,u"三年二班"], ["bbbb",8,u"三年二班"], ["cccc",9,u"三年二班"]]  
  
#这里一般的处理是对数据循环,对应到sheet中的行列,写入数据  
for i in range(len(data)):  
    for j in range(len(data[i])):  
        ws.write(i+1,j,data[i][j])  
    i+=1   
w.save('mini.xls')  
print ('创建excel文件mini.xls完成!')

 

© 著作权归作者所有

wangxuwei
粉丝 27
博文 339
码字总数 120689
作品 0
杭州
其他
私信 提问
Python和它高大上的插件们

Python操作Excel: Python操作Excel主要依赖两个库: xlrd(用于读Excel):https://pypi.python.org/pypi/xlrd This package is for reading data and formatting information from Excel ......

Iuranus
2014/12/16
0
0
这是Python操作Excel表格最好的教材, 爬虫工程师都对它爱不释手

因为数据是用.csv格式保存的,所以我们通常用Excel来处理。然而其工作量是非常大的,反复操作一些相同的动作,所以Python爬虫师那种动则几十万的数据量,都会利用Python脚本来给我们处理。 ...

Python新世界
2018/08/02
0
0
python 编写自动化小工具 未完成

python 编写自动化小工具 Python split() python数据类型之间的转换 str(demo) python换行写入文件 !/usr/bin/env python ecoding=utf-8 f=open(r"D:opsdevolduseroldused.txt","a+") newlin......

iOS_愛OS
2018/06/21
0
0
[雪峰磁针石博客]python数据分析快速入门教程2-pandas数据结构

Title: python数据分析快速入门教程2-pandas数据结构 Date: 2018-03-31 9:20 Category: 数据分析 Slug: pythonpandascrash_tutorial2 [雪峰磁针石博客]python数据分析快速入门教程1-开胃菜 ...

Python测试开发人工智能
2018/07/10
0
0
python文件读写(一)-txt, log, json, csv, xml文件

1.概述 在平时自动化测试工作中,经常会用python对一些文件进行读写操作。其中使用最多的文件格式,就是txt, log, json, csv, xml, zip, tar, gz, rar, excel,这十种文件格式。 其中txt, lo...

Godric_wsw
2018/07/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

lombok的一个踩坑记录

lombok的类如下所示: package com.divx.service.model.task;import com.divx.service.model.BaseTypeMedia;import lombok.Data;/** * @author wuzhilang * @Title: QuestionResult ......

无知的小狼
29分钟前
2
0
如何使用markdown

我没有导入相应的包 这个用的还是有些问题 而且显示的时候格式问题还没解决 <div class="blog_editor" style="margin: 0 auto;width:60%;height:1000px;background-color: white;"> <div s......

南桥北木
31分钟前
4
0
纯手写SpringBoot框架之注解方式启动SpringMVC容器

使用Java语言创建Tomcat容器,并且通过Tomcat执行Servlet,接下来,将会使用Java语言在SpringBoot创建内置Tomcat,使用注解方式启动SpringMVC容器。 代码实现。 1.pom.xml文件,需要依赖的jar...

Java老王
33分钟前
2
0
Presto查询引擎简单分析

Hive查询流程分析 各个组件的作用 UI(user interface)(用户接口):提交数据操作的窗口 Driver(引擎):负责接收数据操作,实现了会话句柄,并提供基于JDBC / ODBC的execute和fetch API Metas...

MobService
35分钟前
1
0
《软件架构的10个常见模式》,看完真心觉得不错

作者:半吊子全栈工匠原文链接:https://blog.csdn.net/wireless_com/article/details/89008061 企业规模的软件系统该如何设计呢?在开始写代码之前,我们需要选择一个合适的架构,这个架构...

Java干货分享
46分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部