一、总结
一句话总结:
xlwings 是 Python 中操作Excel的一个第三方库,支持.xls读写,.xlsx读写,操作非常简单,功能也很强大
1、xlwings 中的逻辑:应用->工作簿->工作表->范围 对应的代码?
应用:一个应用(一个xlwings程序):app = xw.App(visible=True, add_book=False)
工作簿(book):excel文件(excel程序):wb = app.books.add()
工作表(sheet):sheet:sht = wb.sheets['sheet1']
范围:行列:sht.range('a6').expand('table').value = [['a','b'],['d','e']]
ActionScript
import xlwings as xw # 写到Excel中去 # add_book也就是是否增加excel 的book # visible=True 表示操作过程是否可显示(True会打开表格,但不打开sheet) app = xw.App(visible=True, add_book=False)# screen_updating=True时会打开sheet app.screen_updating = False # 新建工作簿 wb = app.books.add()# 页sheet1 sht = wb.sheets['sheet1']# 单个值插入 # sht.range('A1').value = '产品名称'# sht.range('B1').value = '编号'# sht.range('C1').value = '价格'# sht.range('A2').value = '不告诉你'# sht.range('B2').value = 'n110110'# sht.range('C2').value = '688.26'# sht.range('A3').value = '不告诉你1'# sht.range('B3').value = 'n1101101'# sht.range('C3').value = '688.261'# 单元格赋值3种方式 # sht['a1'].value = '编号'# sht[0, 1].value = '姓名'# sht.range('c1').value = '性别'# 插入一行 # sht.range('a1').value = [1,2,3,4]# 等同于 # sht.range('a1:d4').value = [1,2,3,4]# 插入一行的3种方法 # sht['a2:c2'].value = ['1', '张三', '男']# sht.range('a4:c4').value = ['3', '王五', '女']# sht.range('a5').value = ['4', '赵六', '男']# 插入一列 # sht.range('a2').options(transpose=True).value = [5,6,7,8]# 同时插入行列 # sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]# 在当前目录下生成文件 wb.save('demo1.xlsx')wb.close()# quit()方法仅仅是关闭,但并没有销毁系统进程。所以系统占用还是存在的。会影响系统打开excel文件。 # app.quit()# kill()方法是强制关闭,彻底销毁系统进程,释放内存。这种方法关闭彻底。 app.kill()# import os # path1=os.path.abspath('.') # 表示当前所处的文件夹的绝对路径 # print(path1)# path2=os.path.abspath('..') # 表示当前所处的文件夹上一级文件夹的绝对路径 # print(path2)# 关于路径问题,切换到指定目录即可
2、xlwings库向excel 插入值的方式?
a、插入单个值:
ActionScript
sht1['a1'].value = '编号' sht1[0, 1].value = '姓名' # [0, 1]为单元格坐标[行,列],行列都是从0开始 sht1.range('c1').value = '性别'
b、插入一行:
ActionScript
sht1['a2:c2'].value = ['1', '张三', '男'] sht1.range('a4:c4').value = ['3', '王五', '女'] sht1.range('a5').value = ['4', '赵六', '男']
c、插入一列:
ActionScript
sht.range('a2').options(transpose=True).value = [5,6,7,8]
d、同时插入行列:
ActionScript
sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]
3、xlwings库 读写excel基本操作步骤?
就是按照xlwings库逻辑(应用->工作簿->工作表->范围)操作即可,打开的记得关就好了,该读就读,该写就写
ActionScript
app = xw.App(visible=True, add_book=False)# 工作簿 wb = app.books.add()# 页sheet1 sht = wb.sheets['sheet1']# 同时插入行列 sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]# 在当前目录下生成文件 wb.save('demo1.xlsx')wb.close()app.quit()
4、xlwings库 读取excel中的数据的方式?
print(sht.range('a1:c7').value),这样读行,读列,还是同时读行读列都可以
ActionScript
# 读取行列:读取A1:C7(直接填入单元格范围就行了),得到一个二维列表print(sht.range('a1:c7').value)# 读取行:得一维列表 # print(sht.range('a1:c1').value)# 读取列:得一维列表 # print(sht.range('a1:a7').value)
ActionScript
import xlwings as xw app = xw.App(visible=True, add_book=False)# 显示警报() app.display_alerts = True # 屏幕更新(应用中) app.screen_updating = True # 打开文件 wb = app.books.open('demo1.xlsx')sht = wb.sheets['sheet1']# 遍历读取单元格 # column_name = ['A','B',"C"]# data_list = [] #将数据存到list中去 # for i in range(3): # 遍历行 # row_list = []# for j in range(3): #遍历列 # str1 = column_name[j]+str(i+1)# a = sht.range(str1).value # row_list.append(a)# print(a)# pass # data_list.append(row_list)# pass # print(data_list)# 读取行列:读取A1:C7(直接填入单元格范围就行了),得到一个二维列表print(sht.range('a1:c7').value)# 读取行:得一维列表 # print(sht.range('a1:c1').value)# 读取列:得一维列表 # print(sht.range('a1:a7').value)wb.save()wb.close()app.quit()
二、python的xlwings库读写excel操作总结
1、写
ActionScript
""" xlwings介绍 xlwings 是 Python 中操作Excel 的一个第三方库, 支持.xls读写,.xlsx读写 操作非常简单,功能也很强大1、安装库 pip3 install xlwings2、引入库import xlwings as xw3、 应用->工作簿->工作表->范围 应用:一个应用(一个xlwings程序): app = xw.App(visible=True, add_book=False)工作簿(book): excel文件(excel程序):wb = app.books.add()工作表(sheet): sheet:sht = wb.sheets['sheet1']范围:行列: sht.range('a6').expand('table').value = [['a','b'],['d','e']]xlwings.App(visible=True,add_book=False)其中参数visible(表示处理过程是否可视,也就是处理Excel的过程会不会显示出来),add_book(是否打开新的Excel程序,也就是是不是打开一个新的excel窗口)"""import xlwings as xw # 写到Excel中去 # add_book也就是是否增加excel 的book # visible=True 表示操作过程是否可显示 app = xw.App(visible=True, add_book=False)# 工作簿 wb = app.books.add()# 页sheet1 sht = wb.sheets['sheet1']# 单个值插入 # sht.range('A1').value = '产品名称'# sht.range('B1').value = '编号'# sht.range('C1').value = '价格'# sht.range('A2').value = '不告诉你'# sht.range('B2').value = 'n110110'# sht.range('C2').value = '688.26'# sht.range('A3').value = '不告诉你1'# sht.range('B3').value = 'n1101101'# sht.range('C3').value = '688.261'# 插入一行 # sht.range('a1').value = [1,2,3,4]# 等同于 # sht.range('a1:d4').value = [1,2,3,4]# 插入一列 # sht.range('a2').options(transpose=True).value = [5,6,7,8]# 同时插入行列 # sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]# 在当前目录下生成文件 wb.save('demo1.xlsx')wb.close()app.quit()# import os # path1=os.path.abspath('.') # 表示当前所处的文件夹的绝对路径 # print(path1)# path2=os.path.abspath('..') # 表示当前所处的文件夹上一级文件夹的绝对路径 # print(path2)# 关于路径问题,切换到指定目录即可
2、读
ActionScript
import xlwings as xw app = xw.App(visible=True, add_book=False)# 显示警报() app.display_alerts = True # 屏幕更新(应用中) app.screen_updating = True # 打开文件 wb = app.books.open('demo1.xlsx')sht = wb.sheets['sheet1']# 遍历读取单元格 # column_name = ['A','B',"C"]# data_list = [] #将数据存到list中去 # for i in range(3): # 遍历行 # row_list = []# for j in range(3): #遍历列 # str1 = column_name[j]+str(i+1)# a = sht.range(str1).value # row_list.append(a)# print(a)# pass # data_list.append(row_list)# pass # print(data_list)# 读取行列:读取A1:C7(直接填入单元格范围就行了),得到一个二维列表print(sht.range('a1:c7').value)# 读取行:得一维列表 # print(sht.range('a1:c1').value)# 读取列:得一维列表 # print(sht.range('a1:a7').value)wb.save()wb.close()app.quit()
示例一:
ActionScript
import xlwingsimport os # visible=True会打开表格,但不打开sheet app = xlwings.App(visible=False, add_book=False)app.display_alerts = False # screen_updating=True时会打开sheet app.screen_updating = False open_xls = app.books.open('test2.xlsx')# 2种方式打开sheet # sheet1 = open_xls.sheets['sheet1']sheet1 = open_xls.sheets[0]# # 获取最大行数 # max_row = sheet1.used_range.last_cell.row # print('最大行数是:',max_row)# # 获取最大列数 # max_col = sheet1.used_range.last_cell.column # print('最大列数是:',max_col)# 获取最大行数和列数 max = sheet1.used_range.shapeprint('最大行数和列数是:', max)# # 获取最大行数 # nrow = sheet1.api.UsedRange.Rows.count # print(nrow)# # 获取最大列数 # ncol = sheet1.api.UsedRange.Columns.count # print(ncol)# 读取sheet1中数据以字典形式存储到列表内 lst1 = []lst2 = []dic = {}for i in range(1, max[0]): for j in range(max[1]): # lst1.append(sheet1[i,j].value) # print(i,j) # print(sheet1[i,j].value) res = sheet1[i, j].value dic[sheet1[0, j].value] = res if j == max[1] - 1: lst2.append(dic) print(dic) dic = {}print(lst2)# open_xls.save()open_xls.close()# quit()方法仅仅是关闭,但并没有销毁系统进程。所以系统占用还是存在的。会影响系统打开excel文件。 # app.quit()# kill()方法是强制关闭,彻底销毁系统进程,释放内存。这种方法关闭彻底。 app.kill()
示例二:
ActionScript
import xlwings as xw app = xw.App(visible=False, add_book=False)# 新建excel表格工作簿 workbook = app.books.add()# 新建excel工作表 # workbook.sheets.add()sht1 = workbook.sheets[0]# 单元格赋值3种方式 sht1['a1'].value = '编号'sht1[0, 1].value = '姓名'sht1.range('c1').value = '性别'# 插入行 sht1['a2:c2'].value = ['1', '张三', '男']sht1.range('a4:c4').value = ['3', '王五', '女']sht1.range('a5').value = ['4', '赵六', '男']workbook.save(f'newbook.xlsx')workbook.close()app.kill()
当前文章中的内容略有补充
原文链接:https://www.cnblogs.com/Renyi-Fan/p/13233572.html
评论