第一次尝试使用python读写Excel文件

转载自己文字

在第一次尝试使用python读写Excel文件时,发现在使用xlrd模板后,python可以很方便的读取Excel中的文件,且代码较为简单,大致如下:
import os //使用import os 的目的就是为了改变当前工作路径
import xlrd
os.chdir(‘当前路径’)
file=xlrd.open_workbook(‘文件名称‘)
sheet=file.sheets()[0]
temp = sheet.cell(rows,cols)//如此便可以读出值
但是在尝试向其中写入值时发现无法保存文件,需要用到xlutils,直接import报错:
显示没有该模板。


所以只有去下载安装该模板,在官方网站:https://pypi.python.org/pypi/xlutils 得到该包,然后解压该文件,最好将解压后文件放在python目录下,然后使用cmd进入该目录,使用如下命令:
setup.py install
接着程序又会报错如下:
在 cmd 下执行命令 python setup.py install 出现如下错误:
Traceback (most recent call last):  
File "setup.py", line 5, in    
from setuptools import setup ImportError: No module named setuptools


其表明确实setuptools模板,所以需要去下载,网址如下:setuptools-0.6c11.win32-py2.7.exe 
直接安装即可。
然后再重新安装xlutils 即可成功。
其数据保存方法如下:
# 类型 0 empty,1 string, 2 number, 3 date, 4 boolean, 5 error
xf = 0 # 扩展的格式化


wb = copy(first)
sheet = wb.get_sheet(0)
sheet.wirte(rows,index,’’)
wb.save(‘’)
注意只能保存成xls格式的


在这里使用的copy来进行操作,所以要引入xlutils包


但是除此之外,还可以直接用xlwt包,直接来新建Excel文件来进行操作,更加方便,且其不需要从外部重新导入包,故后来采用直接用xlwt包的。
下边是第一次尝试的时候的代码:
import os
>>> os.chdir('C:\Users\Administrator\Desktop')
>>> import xlrd
>>> first = xlrd.open_workbook('orgin/S1.xlsx')
>>> import xlwt
>>> t_f=xlwt.Workbook()
>>> t_f=xlwt.Workbook(encoding='utf-8')//防止汉字乱码
>>> t_s=t_f.add_sheet('A',cell_overwrite_ok=True)//防止重
>>> row=4
>>> sheet=first.sheets()[0]
>>> rows_count=sheet.nrows
>>> while (row<(rows_count-2)):
back_biao_one=sheet.cell(row,1)
back_dis_one=sheet.cell(row,2)
front_biao_one=sheet.cell(row+1,1)
front_dis_one=sheet.cell(row+1,2)
front_biao_two=sheet.cell(row+2,1)
front_dis_two=sheet.cell(row+2,2)
back_biao_two=sheet.cell(row+3,1)
back_dis_two=sheet.cell(row+3,2)
t_s.write(row-4,0,back_dis_one)
row=row+4


 


Traceback (most recent call last):
File "", line 10, in
t_s.write(row-4,0,back_dis_one)
File "build\bdist.win32\egg\xlwt\Worksheet.py", line 1030, in write
self.row(r).write(c, label, style)
File "build\bdist.win32\egg\xlwt\Row.py", line 259, in write
raise Exception("Unexpected data type %r" % type(label))
Exception: Unexpected data type
第一次尝试的时候,总是报出上述错误,后来发现错误的原因是由于在各种值中还没有读入value,其值依旧是cell,故对while修改即可,如下:
while (row <= (rows_count-2)):
back_biao_one=sheet.cell(row,1).value
back_dis_one=sheet.cell(row,2).value
front_biao_one=sheet.cell(row+1,1).value
front_dis_one=sheet.cell(row+1,2).value
front_biao_two=sheet.cell(row+2,1).value
front_dis_two=sheet.cell(row+2,2).value
back_biao_two=sheet.cell(row+3,1).value
back_dis_two=sheet.cell(row+3,2).value
t_s.write_merge(row-4,row-4,0,1,back_dis_one)
t_s.write_merge(row-4,row-4,2,3,front_dis_one)
t_s.write_merge(row-3,row-3,2,3,front_dis_two)
t_s.write_merge(row-3,row-3,0,1,back_dis_two)
t_s.write(row-4,4,'Back')
t_s.write(row-3,4,'Front')
t_s.write(row-2,row-1,'Back-Front')
t_s.write(row-4,5,back_biao_one)
t_s.write(row-4,6,front_biao_one)
t_s.write(row-3,6,front_biao_two)
t_s.write(row-3,5,back_biao_two)
row=row+4
最后对其进行函数封装如下:
def format_mydata(filename,disfilename):
first=xlrd.open_workbook(filename)
sheet=first.sheets()[0]
row=4
index=1
rows_count=sheet.nrows
t_f=xlwt.Workbook(encoding='utf8')
t_s=t_f.add_sheet('A',cell_overwrite_ok=True)
while (row <= (rows_count-2)):
t_s.write_merge(row-4,row-1,0,0,index)
index=index+1
back_biao_one=sheet.cell(row,1).value
back_dis_one=sheet.cell(row,2).value
front_biao_one=sheet.cell(row+1,1).value
front_dis_one=sheet.cell(row+1,2).value
front_biao_two=sheet.cell(row+2,1).value
front_dis_two=sheet.cell(row+2,2).value
back_biao_two=sheet.cell(row+3,1).value
back_dis_two=sheet.cell(row+3,2).value
t_s.write_merge(row-4,row-4,1,2,back_dis_one)
t_s.write_merge(row-4,row-4,3,4,front_dis_one)
t_s.write_merge(row-3,row-3,3,4,front_dis_two)
t_s.write_merge(row-3,row-3,1,2,back_dis_two)
temp1=(back_dis_one+back_dis_two)/2
temp2=(front_dis_one+front_dis_two)/2
t_s.write_merge(row-2,row-2,1,2,temp1)
t_s.write_merge(row-2,row-2,3,4,temp2)
t_s.write_merge(row-1,row-1,1,2,temp1-temp2)
t_s.write_merge(row-1,row-1,3,4,'')
t_s.write(row-4,5,'Back')
t_s.write(row-3,5,'Front')
t_s.write_merge(row-2,row-1,5,5,'Back-Front')
temp1=back_biao_one-front_biao_one
temp2=back_biao_two-front_biao_two
t_s.write(row-4,6,back_biao_one)
t_s.write(row-4,7,back_biao_two)
t_s.write(row-3,7,front_biao_one)
t_s.write(row-3,6,front_biao_two)
t_s.write(row-2,6,temp1)
t_s.write(row-2,7,temp2)
t_s.write_merge(row-1,row-1,6,7,(temp1+temp2)/2)
row=row+4
t_f.save(disfilename)


进行运行时:
>>> import xlrd
>>> import xlwt
>>> import os
>>> os.chdir('C:\Users\Administrator\Desktop')
>>> format_mydata('orgin/S1.xlsx','des/S1.xls')
>>> format_mydata('orgin/S2r.xls','des/S2.xls')
>>> format_mydata('orgin/S3.xlsx','des/S3.xls')
>>> format_mydata('orgin/S456r.xls','des/S456.xls')
>>> format_mydata('orgin/S7.xlsx','des/S7.xls')
>>> format_mydata('orgin/S8.xlsx','des/S8.xls')
>>> format_mydata('orgin/S9r.xlsx','des/S9.xls')
>>> format_mydata('orgin/S9r.xls','des/S9.xls')
>>> format_mydata('orgin/S10.xlsx','des/S10.xls')
>>> format_mydata('orgin/S11.xlsx','des/S11.xls')
>>> format_mydata('orgin/S12r.xlsx','des/S12.xls')
>>> format_mydata('orgin/S12r.xls','des/S12.xls')
>>> format_mydata('orgin/S13.xlsx','des/S13.xls')
>>> format_mydata('orgin/S13.xls','des/S13.xls')
>>> format_mydata('orgin/S14rr.xls','des/S14.xls')
>>> format_mydata('orgin/S15.xls','des/S15.xls')


最后结果就得到了。


本方法的缺点在于:
还没有完成对其颜色的设置,后来手工填充的。
部分数据的运算也没有完成

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值