当前位置:首页 > Python > 正文内容

详解python的xlwings库读写excel操作总结

lonely2年前 (2022-04-15)Python589

 一、总结

一句话总结:
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']]


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、插入单个值:

sht1['a1'].value = '编号' 
sht1[0, 1].value = '姓名'  # [0, 1]为单元格坐标[行,列],行列都是从0开始
sht1.range('c1').value = '性别'

b、插入一行:

sht1['a2:c2'].value = ['1', '张三', '男'] 
sht1.range('a4:c4').value = ['3', '王五', '女'] 
sht1.range('a5').value = ['4', '赵六', '男']

c、插入一列:

sht.range('a2').options(transpose=True).value = [5,6,7,8]

d、同时插入行列:

sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']]




3、xlwings库 读写excel基本操作步骤?

就是按照xlwings库逻辑(应用->工作簿->工作表->范围)操作即可,打开的记得关就好了,该读就读,该写就写

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),这样读行,读列,还是同时读行读列都可以

# 读取行列:读取A1:C7(直接填入单元格范围就行了),得到一个二维列表
print(sht.range('a1:c7').value)

# 读取行:得一维列表 
# print(sht.range('a1:c1').value)

# 读取列:得一维列表
# print(sht.range('a1:a7').value)
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、写

"""

xlwings介绍
xlwings 是 Python 中操作Excel 的一个第三方库,
支持.xls读写,.xlsx读写
操作非常简单,功能也很强大

1、安装库
pip3 install xlwings

2、引入库
import xlwings as xw

3、
应用->工作簿->工作表->范围

应用:一个应用(一个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、读

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()


示例一:

import xlwings
import 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.shape
print('最大行数和列数是:', 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()


示例二:

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 


扫描二维码推送至手机访问。

版权声明:本文由复制者发布,如需转载请注明出处。

本文链接:https://www.copyer.cn/post/20.html

分享给朋友:

相关文章

locustio安装失败,提示: ERROR: Command errored out with exit status 1:

locustio安装失败,提示: ERROR: Command errored out with exit status 1:

使用pip install locustio 和 pip install -i https://pypi.douban.com/simple locustio 安装时均失败,提示:C:\Us...

Python pip更换安装源

Python pip更换安装源

常见的镜像源:华为:https://repo.huaweicloud.com/repository/pypi/simple 清华:https://pypi.tuna.tsinghua.edu...

推荐一个好用的Python第三方日志库loguru

推荐一个好用的Python第三方日志库loguru

        Loguru: 更优雅的日志记录解决方案loguru 是一个 Python 简易且强大的第三方日志记录库...

python获取昨天的日期

python获取昨天的日期

import datetime def getYesterday():     today = datetime.d...

SQLAlchemy中使用sqlacodegen自动同步数据库中表生成model

SQLAlchemy中使用sqlacodegen自动同步数据库中表生成model

前言如果数据库中的表已经存在了,我们只想通过 SQLAlchemy 操作数据库表的数据,不需要建表。这时可以不用一个个声明每个字段类型,可以用第三方包 sqlacodegen 自动...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。