python-xlwings操作_删除指定的行

python中处理excel的库很多,例如:xlrd、xlwt、xlswriter、xlwings。openpyxl、pandas等。
但运用中发现pandas、xlwt等库读取excel数据操作后保存的文件,数据类型变了(基本都是常规),为了保持数据类型或者说文件格式不变,采用xlwings进行相关操作。在服务器上线,不适合用xlwings,因需打开excel系统进行交互,可用openpyxl

Xlrd:xlrd支持.xls、.xlsx Excel文件的读,并不支持.xls、.xlsx 文件的写。
Xlwt:xlwt仅支持.xls文件的写。 Xlsxwriter:xlswriter支持.xlsx文件的写,另外此模块还支持VBA操作。
Win32com:win32com支持Excel的.xlsx和.xls,安装pypiwin32即可使用该库,该模块现在只支持Windows系统。
Openpyxl:openpyxl支持Excel2010多种文件的操作,read_only和write_only两个参数值得注意,该模块对VBA的支持不好,不支持.xls文件的操作。
Xlwings:xlwings实现了Excel中调用Python,python中调用Excel的骚操作,支持.xls文件的读,支持.xlsx文件的读写,支持VBA的操作,另外还支持和Numpy、Pandas结合进行操作,在很大程度上扩展了应用。
Pandas :pandas不用多说了,数据分析领域最为重要的库,支持.xls和.xlsx读写。

本文操作:删选excel简称中非LIMENGYAO的行删除
在这里插入图片描述

import xlwings as xw  #pip install xlwings

app = xw.App(visible=True, add_book=False) #创建App
# visible参数控制创建文件时可见的属性

app.display_alerts=False   #警告提示,不显示Excel消息框
app.screen_updating=False  #关闭屏幕更新,可加快宏的执行速度

wb = app.books.open(r'test.xlsx')  #打开已有excel
sheet = wb.sheets["sheet1"] #选中sheet1
#或者sheet =wb.sheets[1]

rows = sheet.api.UsedRange.Rows.count #总行数
cols = sheet.api.UsedRange.columns.count  #总列数

#因为库中没有直接获取表头列名的操作,所以遍历第一行,取指定列所在单元格位置
rng = sheet[0,:cols] #取第一行
for cell in rng:   
    if cell.value =='简称':
        print(cell.address)  #值是简称,就返回单元格位置
        a = cell.address
        
b = a[1:2]  #返回的值是$A$1,截取列的位置,即我们只需要A
c = b+'2:'+b+str(rows) #整列的范围

a_range = sheet.range(str(c))  # 得到range对象,就是简称所在的列

# 将range中每行对象存放到列表中并倒序(倒序是因为删除行后,后面的行位置都-1,从后向前删除就不会存在这个问题了)
cell_list = []
for cell in a_range:
    cell_list.append(cell)
cell_list.reverse()

#删除行操作
for cell in cell_list:
     print(cell.value)
     if cell.value != 'LIMENGYAO':
         cell_to_del = cell.address
         sheet.range(cell_to_del).api.EntireRow.Delete()

wb.save('test2.xls')

wb.close()
app.quit()    

你可能感兴趣的:(python练手小项目,python)