python创建excel文件报错_Python读写excel

一、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["bbb"] #过时 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

import sys

from openpyxl import load_workbook

from openpyxl import Workbook

from openpyxl.writer.excel import ExcelWriter

if __name__ == '__main__':

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)

print('result.xlsx from test.xlsx saved!%n')

sys.exit()

二、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完成!')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值