新建excel
import xlwings as xw
app=xw.App(visible=True,add_book=False)
for dept in ("技术部","开发部","销售部"):
workbook=app.books.add()
workbook.save(f"./部门业绩-{dept}.xlsx")
新建excel
from pathlib import Path
import xlwings as xw
app=xw.App(visible=False,add_book=False)
src_folder=Path('C:\\Users\\Administrator\\PycharmProjects\\pythonProject5')
header=['订单号','产品名称','产品价格']
val=['128','风扇','38']
new_workbook=xw.Book()
new_worksheet=new_workbook.sheets.add('test')
new_worksheet['A1'].value=header
new_worksheet['A2'].value=val
new_worksheet.autofit()
new_workbook.save(src_folder/'新建文件夹.xlsx')
new_workbook.close()
app.quit()
打开excel文件
import xlwings as xw
app=xw.App(visible=True,add_book=False)
app.display_alerts=False
app.screen_updating=False
filepath=r'C:\Users\Administrator\PycharmProjects\pythonProject5\新建文件夹.xlsx'
wb=app.books.open(filepath)
wb.save()
wb.close()
app.quit()
写入excel
import xlwings as xw
app=xw.App(visible=True,add_book=False)
wb=app.books.add()
wb.sheets['sheet1'].range('A1').value='人生'
#wb.save(r'd:\test.xlsx')
wb.save(r'./text.xlsx')
wb.close()
app.quit()
修改excel文件
import xlwings as xw
app=xw.App(visible=True,add_book=False)
wb=app.books.open(r'C:\Users\Administrator\PycharmProjects\新建Excel\test.xlsx')
# wb就是新建的工作簿(workbook),下面则对wb的sheet1的A1单元格赋值
wb.sheets['sheet1'].range('A1').value='苦短'
wb.save()
wb.close()
app.quit()
引用工作簿、工作表和单元格
- 引用工作簿,注意工作簿应该首先被打开
wb.=xw.books['工作簿的名字‘] - 引用活动工作簿
wb=xw.books.active - 引用工作簿中的sheet
sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
# 或者
wb=xw.books['工作簿的名字']
sht=wb.sheets[sheet的名字] - 引用活动sheet
sht=xw.sheets.active - 引用A1单元格
rng=xw.books['工作簿的名字‘].sheets['sheet的名字']
# 或者
sht=xw.books['工作簿的名字‘].sheets['sheet的名字']
rng=sht.range('A1') - 引用活动sheet上的单元格
# 注意Range首字母大写
rng=xw.Range('A1')
其中需要注意的是单元格的完全引用路径是:
# 第一个Excel程序的第一个工作薄的第一张sheet的第一个单元格
xw.apps[0].books[0].sheets[0].range('A1')
迅速引用单元格的方式是
sht=xw.books['名字'].sheets['名字']
# A1单元格
rng=sht[’A1']
# A1:B5单元格
rng=sht['A1:B5']
# 在第i+1行,第j+1列的单元格
# B1单元格
rng=sht[0,1]
# A1:J10
rng=sht[:10,:10]
PS: 对于单元格也可以用表示行列的tuple进行引用
# A1单元格的引用
xw.Range(1,1)
#A1:C3单元格的引用
xw.Range((1,1),(3,3))
储存数据
- 储存单个值
# 注意".value“
sht.range('A1').value=1 - 储存列表
# 将列表[1,2,3]储存在A1:C1中
sht.range('A1').value=[1,2,3]
# 将列表[1,2,3]储存在A1:A3中
sht.range('A1').options(transpose=True).value=[1,2,3]
# 将2x2表格,即二维数组,储存在A1:B2中,如第一行1,2,第二行3,4
sht.range('A1').options(expand='table')=[[1,2],[3,4]]
读取数据
- 读取单个值
# 将A1的值,读取到a变量中
a=sht.range('A1').value - 将值读取到列表中
#将A1到A2的值,读取到a列表中
a=sht.range('A1:A2').value
# 将第一行和第二行的数据按二维数组的方式读取
a=sht.range('A1:B2').value
读取目录
import os
# 定义一个函数,函数名字为get_all_excel,需要传入一个目录
def get_all_excel(dir):
file_list = []
for root_dir, sub_dir, files in os.walk(r'' + dir):
# 对文件列表中的每一个文件进行处理,如果文件名字是以‘xlxs’结尾就
# 认定为是一个excel文件,当然这里还可以用其他手段判断,比如你的excel
# 文件名中均包含‘res’,那么if条件可以改写为
for file in files:
# if file.endswith('.xlsx') and 'res' in file:
if file.endswith('.xlsx'):
# 此处因为要获取文件路径,比如要把D:/myExcel 和res.xlsx拼接为
# D:/myExcel/res.xlsx,因此中间需要添加/。python提供了专门的
# 方法
file_name = os.path.join(root_dir, file)
# 把拼接好的文件目录信息添加到列表中
file_list.append(file_name)
return file_list
# 获取上一级别目录中的指定文件
print(get_all_excel('.'))