一、应用背景

昨天完成了CSV文件的读取并将其中的几列写入了EXCEL,今天就来选取一下其中满足条件的行数据,并写入此表中的另一个sheet中。

二、参考文献

《python 读取Excel文件(包括后缀为.xls与.xlsx)》
《用Python对Excel获取sheet、增加sheet、写入单元格数据》
《python合并已经存在的sheet数据到新sheet的方法》
《python中用xlrd和xlwt写入excel,在sheet中先写入的数据被后写入的数据覆盖的问题》

三、代码

代码如下:

from openpyxl import load_workbook
import xlrd
import xlwt
from xlutils.copy import copy

file=r"D:\DATA\excel\DAN.xls"  #打开
# 打开文件
workbook=xlrd.open_workbook(file)
cwb=copy(workbook) #复制一下
# 读取sheet页
sheet1=workbook.sheet_by_name('sheet1') #原始数据页面
sheet2=cwb.get_sheet('sheet2') #存放提取的数据,sheet2是原来就有的
# 获取表的行列数
rows=sheet1.nrows
cols=sheet1.ncols
# 获取表中数值   
RowIndex=0 #设置写入提取的数据的EXCEL行数
names=['year','month','day','hour','minute','NETRAD','H_F_MDS','LE_F_MDS'] #需要选取的列名

for nameindex in range(0,len(names)): #选取7列
    sheet2.write(0, nameindex, names[nameindex]) # 写入列名称

for i in range(1,rows):    #遍历行
    row_data = sheet1.row_values(i) 
    if int(row_data[3])==11 :
        if int(row_data[4])==0:  #若hour=11且minute=0 即11:00
            RowIndex=RowIndex+1
            for j in range(0,cols): #遍历列
                sheet2.write(RowIndex, j, float(row_data[j])) #将sheet1中满足条件的行赋值给sheet2

cwb.save(file) #保存EXCEL
print("------OK")

四、结果

原数据为左图,提取后为右图
在这里插入图片描述

五、注意事项

1、原来没有sheet2的情况

上面的程序所用到的表格里是带有sheet2的,若没有sheet2的话,就还得再创建一个,把如下语句:

sheet2=cwb.get_sheet('sheet2') #激活sheet2

替换为:

sheet2 = cwb.add_sheet('sheet2') #创建sheet2

2、关于copy

cwb=copy(workbook) #复制一下

由于能力有限,我还没有找到直接建立同一个工作簿下的工作表并写入数据的方法,于是就先复制一下,在最后的时候,把复制的工作簿覆盖掉原来的工作簿

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐