(1)批量新建并保存关闭工作簿
import xlwings as xw
app = xw.App(visible=True, add_book=False) # 启动excel,但不新建
for i in range(6):
workbook = app.books.add() # 新建工作簿
#worksheet = workbook.sheets.add() # 新建工作表
workbook.save(f'e:\\file\\test{i}.xlsx') # 保存
workbook.close() # 关闭工作簿
app.quit() # 退出excel程序
#f-string方法:以f或F修饰符引领字符串,字符串中以大括号{}标明将被替换的内容。
(2)批量打开一个文件夹下的所有工作簿
import os
import xlwings as xw
file_path = 'e:\\table'
file_list = os.listdir(file_path)
app = xw.App(visible = True, add_book = False)
for i in file_list:
#判断文件是否为excel文件
if os.path.splitext(i)[1] == '.xlsx' or os.path.splitext(i)[1] == '.xls':
app.books.open(file_path+'\\'+i)
(3)批量重命名一个工作簿中的部分工作表
import xlwings as xw
app = xw.App(visible=True, add_book=False) # 启动excel,但不新建
workbook = app.books.open('e:\\data.xlsx')
worksheets = workbook.sheets # 获取工作簿中的所有工作表
for i in range(len(worksheets))[:5]: # 通过切片获取前面的5个工作表
worksheets[i].name = worksheets[i].name.replace('sale', ' ') #将工作表名中的sale替换掉
workbook.save('e:\\data1.xlsx') # 将修改后的工作簿另存为data1,若不想另存,则省略
app.quit()
(4)批量重命名多个工作簿
import os
file_path = 'e:\\table'
file_list = os.listdir(file_path)
old_book_name = '销售表' #工作簿中的旧关键字,如"北京销售表”
new_book_name = '分部销售表' #给出要替换为的新关键字,如“北京分部销售表”
for i in file_list:
if i.startswith('~$'):
continue
new_file = i.replace(old_book_name, new_book_name) #替换关键字
old_file_path = os.path.join(file_path, i)
new_file_path = os.path.join(file_path, new_file)
os.rename(old_file_path, new_file_path) # 执行重命名
(5)在多个工作簿中批量新增工作表
import os
file_path = 'e:\\table'
file_list = os.listdir(file_path)
sheet_name = 'a' # 新增的工作表名称
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i)
workbook = app.books.open(file_paths)
sheet_names = [j.name for j in workbook.sheets] # 获取打开的工作簿中所有工作表的名称
if sheet_name not in sheet_names:
workbook.sheets.add(sheet_name) #如果工作表不存在,新增工作表
workbook.save()
for m in workbook.sheets:
if m.name == sheet_name2:
m.delete() # 批量删除工作表
workbook.save()
app.quit()
(6)批量打印工作簿
xlwings模块中打印命令语法:workbook.api.PrintOut() # 打印工作簿
xlwings中没有提供打印工作簿的函数,所以利用工作簿的api属性调用VBA的PrintOut()函数来打印。
PrintOut(From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName)
From指定打印开始页;to打印终止页;Copies打印份数;Preview为True打印前显示打印预览,False为立即打印;Active Printer使用的打印机名称;PrintToFile为True则表示不打印到打印机,而是打印成pm文件;Collate为True表示逐份打印;PrToFileName当PrintTofile为True时指定pm文件的文件名。
(7)将一个工作簿中所有工作表批量复制到其他工作簿中
#将一个工作薄中所有工作表批量复制到多个工作簿中
import os
import xlwings as xw
app = xw.App(visible = False, add_book = False)
file_path = 'e:\\table'
file_list = os.listdir(file_path)
workbook = app.books.open('e:\\table\\out.xlsx') # 打开信息源工作簿
worksheet = workbook.sheets # 获取信息源工作簿的所有工作表
for i in file_list: # 遍历目标文件夹中的所有目标工作簿
if os.path.splitext(i)[1] == '.xlsx': # 判断是否是excel工作簿
workbooks = app.books.open(file_path+'\\'+i) # 打开目标工作簿
for j in worksheet: # 遍历信息源工作簿的所有工作表
contents = j.range('A1').expand('table').value # 获取工作表的所有数据。
name = j.name
workbooks.sheets.add(name = name, after = len(workbooks.sheets)) # 在目标工作簿的最后新增同名工作表
workbooks.sheets[name].range('A1').value = contents #将信息源的数据写入新工作表
workbooks.save()
app.quit()
(8)按条件将一个工作表拆分为多个工作簿
import xlwings as xw
file_path = 'G:\\D盘\\2- 检测报告\\计量仪器校准'
sheet_name = '内部校准清单'
app = xw.App(visible = True, add_book = False)
workbook = app.books.open(file_path+'\\2021内部校准计划表.xlsx')
worksheet = workbook.sheets[sheet_name]
value = worksheet.range('A3').expand('table').value
data = dict() # 创建空字典
for i in range(len(value)): # 按行遍历数据
product_name = value[i][6] # 筛选第6列的名称
if product_name not in data: # 判断第6列的名称是否在字典中,不存在则写入
data[product_name] = []
data[product_name].append(value[i]) # 按第6列的名称将数据筛选汇总到该键-值对中
for key, value in data.items():
n_workbook = app.books.add() #新增工作簿
n_worksheet = n_workbook.sheets.add(key) #在新增以键名为表名的新工作表
n_worksheet['A1'].value = worksheet['A2:J2'].value # 设置新表格的标题行
n_worksheet['A2'].value = value
n_worksheet.range('C2').column_width = 20 # 设置列宽
n_worksheet.range('D2').column_width = 13
n_worksheet.range('F2').column_width = 12
n_worksheet.autofit(r) # 自动调整行高
n_workbook.save(file_path+'\\split\\{}计量工具清单.xlsx'.format(key))
n_workbook.close()
app.quit()
(9)批量合并多个工作簿中的同名工作表
import os
import xlwings as xw
file_path = 'e:\\table'
file_list = os.listdir(file_path)
sheet_name = 'aa'
app = xw.App(visible=True, add_book=False)
header = None # 定义列标题
all_data = [] #创建空白列表,用于存储要合并的数据
for i in file_list:
if i.startswith('~$'):
continue
if os.path.splitext(i)[1] != '.xlsx'
continue
file_paths = os.path.join(file_path, i) # 构造要合并的工作簿的文件路径
workbook = app.books.open(file_paths)
for j in workbook.sheets:
if j.name == sheet_name:
if header == None:
header = j['A1:I1'].value
values = j['A2'].expand('table').value
all_data = all_data + values #将多个工作簿中同名工作表的数据汇总到一个列表中
n_workbook = app.books.add()
n_worksheet = n_workbook.sheets.add(sheet_name)
n_worksheet['A1'].value = header
n_worksheet['A2'].value = all_data
n_worksheet.autofit(r)
n_workbook.save(file_path+'\\split\\{}计量工具清单.xlsx'.format(key))
app.quit()
2、批量处理行、列和单元格
(1)调整行高列宽
xlwings设置行高列宽的方法:.row_height、.column_width、.autofit()
import os
import xlwings as xw
file_path = r'G:\D盘\2- 检测报告\计量仪器校准\split'
file_list = os.listdir(file_path)
app = xw.App(visible = True, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
if os.path.splitext(i)[1] != '.xlsx':
continue
file_paths = os.path.join(file_path,i)
workbook = app.books.open(file_paths)
worksheet = workbook.sheets[0]
worksheet.range('C2').column_width = 20 # 设置C列列宽20
worksheet.range('D2').column_width = 13
worksheet.range('F2').column_width = 12
worksheet.range('A1').row_height = 12 # 设置A1行行高
worksheet.autofit('r')
workbook.save()
workbook.close()
app.quit()
(2)批量更改数据格式
-获取某列有数据的最后一行行号:sht['A1'].current_region.last_cell.row
-设置数据格式:sht['A2:A200'].number_format='¥#,##0.00'
-设置单元格填充颜色:sht['A2:H2'].Color=xw.utils.rgb_to_int((0,0,0))
-设置字体:.api.Font.size、.api.Font.name、.api.Font.Bold、.api.Font.Color
-设置水平对齐方式:.api.HorizontalAlignment=xw.constants.HAlign.xlHAlignCenter/Left/Right
-设置垂直对齐方式:.api.VerticalAlignment=xw.constants.Valign.xlVAlignCenter/Left/Right
-设置边框:cell.api.Borders(b).LineStyle=1 #设置线型; cell.api.Borders(b).Weight=1 #设置线宽
row_num = j['A1'].current_region.last_cell.row # 获取工作表中数据区域最后一行的行号
j['A2:A{}'.format(row_num)].number_format = 'm/d' #将A列数据更改为“月/日”的格式
j['B2:B{}}'.format(row_num)].number_format = '¥#,##0.00' #将B列改为会计货币符号和小数2位
j['A2:H2'].api.Font.Size = 10 # 字体大小
j['A2:H2'].api.Font.Name = '宋体'
j['A2:H2'].api.Font.Bold = True # 加粗
j['A2:H2'].api.Font.Color = xw.utils.rgb_to_int((255,255,255)) # 字体颜色白色
j['A2:H2'].Color = xw.utils.rgb_to_int((0,0,0)) # 单元格填充颜色为黑色
j['A2:H2'].api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter # 水平对齐方式居中
j['A2:H2'].api.HorizontalAlignment = xw.constants.HAlign.xlHAlignLeft # 水平对齐方式靠左
j['A2:H2'].api.VerticalAlignment = xw.constants.Valign.xlVAlignCenter # 垂直对齐方式居中
for cell in j['A1'].expand('table'):
for b in range(7,12)
cell.api.Borders(b).LineStyle = 1 # 设置边框线型
cell.api.Borders(b).Weight = 2 # 设置边框粗细
(3)批量替换行列数据
for j in workbook.sheets:
value = j['A2'].expand('table').value
for index, val in enumerate(value):
val[2] = val[2]*(1+0.05) # 批量修改列数据
if val == ['背包', 16, 65]:
value[index] = ['双肩包', 36, 79] #将行数据背包,16,65替换为双肩包,36,79
j['A2'].expand('table').value = value #将替换后的数据重新写入工作表
知识延伸:
enumerate是python 的内置函数,用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列。enumerate(sequence[, start=0])
(4)批量对工作表数据进行分列
values = worksheet.range("A1").options(pd.DataFrame, header=1, index=False, expand='table').value
n_val = values['规格'].str.split('*', expand = True) # 根据*号拆分
values['长(mm)'] = n_val[0] #将拆分出的长写入长列
values['高(mm)'] = n_val[1] #将拆分出的长写入长列
values.drop(columns = ['规格'], inplace = True) # 将规格列删除
worksheet['A1'].options(index = False).value = values # 将拆分后的数据重新写入工作表中
知识延伸:
split()函数是pandas模块中Series对象的一个字符串函数,用于根据指定的分隔符拆分字符串。语法格式如下:
Series.str.split(pat=None, n=-1, expand=False) #pat为分隔符,省略则以空格作为分隔符。n为拆分次数省略或者为0或-1则无限拆分。expand指定拆分结果的格式,True为DATa Frame格式,False为Series格式。
drop()函数是pandas模块中DataFrame对象的函数,用于删除DataFrame对象的某一行或某一列。语法如下:
DataFrame.drop(label=None, axis=0, index=None, columns=None, inplace=False)
(5)批量合并指定列
values = worksheet.range("A1").options(pd.DataFrame, header=1, index=False, expand='table').value
values['规格'] = values['长(mm)']+'*'+values['高(mm)']
知识延伸:
insert()函数是python列表对象的函数,用于在列表的指定位置插入元素。语法格式如下:
insert(index,obj)
一个
列宽
单位等于“常规”样式中一个字符的宽度。 对于比例字体,会使用字符 0(零)的宽度。
使用 AutoFit 方法可基于单元格的内容
设置
列宽
。
使用 Width 属性可返回以磅为单位的
列宽
。
如果相应范围内的所有列都具有相同的
列宽
,ColumnWidth 属性会返回该
列宽
。 如果相应范围内的列具有不同的
列宽
,此属性会返回 空。
以下示例将工作表 Sheet
xlwings
xlwings
模块
简介主要用法介绍App打开/关闭excel程序book(工作簿)常用方法book属性示例sheet常用方法示例range常用方法存储数据
xlwings
模块
简介
xlwings
模块
是
python
中对excel进行操作的一个
模块
。相对于其他支持excel操作的
模块
来讲,
xlwings
是目前最为全能,且运行效率较高,即综合评分较高的一个
模块
,且支持win和mac os系统。
主要用法介绍
在介绍用法之前,先对
模块
中的对象做一下简单描述
App :对应的就是excel程序
Xlwings
学习
笔记
Python
基本延时函数代码换行反斜杠 \ ——不影响输出结果的代码换行三引号 ''' ''' —— 令字符串的打印结果换行
Xlwings
导入
xlwings
模块
打开、保存、关闭Excel文档在多个工作簿或sheet之间工作工作簿/sheet/单元格 引用读、写单元格值
Python
基本
import time
time.sleep(10) #延时10秒
反斜杠 \ ——不影响输出结果的代码换行
同时适用于字符串和代码
a = b + c + d + \
(一)
python
运行excel宏_
xlwings
:操作Excel,通过宏调用Pyhton(VBA调
Python
)
python
运行excel宏_
xlwings
:操作Excel,通过宏调用Pyhton(VBA调
Python
)_碧霄丶的博客-CSDN博客
xlwings
- 让Excel飞起来
说明:我的
xlwings
版本是0.11.5。老一点的版本可能需要经过额外的
设置
,其excel插件才能用。
xlwings
是一个
python
的库,支持从Excel调用
Python
,也支持通过
Python
去操作Ex
xlwings
是一个用于在
Python
中操作Excel的
模块
。它提供了读写Excel文件的功能,并且可以调整Excel文件的表格宽度、字体颜色等。
xlwings
可以通过引用单元格的行列tuple来操作单元格,也可以将数据存储到单元格中。例如,可以使用
xlwings
将一个值存储到指定的单元格中,也可以将一个列表存储到一行或一列中。同样,可以使用
xlwings
读取单个值或一段数据。\[2\]\[3\]
在你提供的示例中,
xlwings
被用于枚举指定文件夹下的Excel类型文件,并删除这些文件中的K列。首先,使用os
模块
的listdir函数列出指定文件夹下的所有文件,并将Excel类型的文件路径存储在一个列表中。然后,使用
xlwings
打开每个Excel文件,获取第一个工作表的行数,并遍历每一行。如果第11列的值不为空,就将其置为空。最后,保存并关闭Excel文件。需要注意的是,在程序结束后,需要使用del app语句来关闭Excel进程,以防止进程残留。\[1\]
总之,
xlwings
是一个方便的
Python
模块
,可以帮助你实现Excel自动化办公的任务。
#### 引用[.reference_title]
- *1* [
Python
3
学习
笔记
08-
Python
3读写Excel表之
xlwings
](https://blog.csdn.net/asanscape/article/details/80372743)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [插上翅膀,让Excel飞起来——
xlwings
(一)](https://blog.csdn.net/weixin_30900589/article/details/98436561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
Pandas将NaN转换为None 插入数据库
QTEASY量化交易:
Pandas将NaN转换为None 插入数据库
python-小卒:
Pandas将NaN转换为None 插入数据库
哇呜哈哈哈哈哈:
Pandas将NaN转换为None 插入数据库
janeajue:
UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xff in position 0: invalid start byte
PyQt5开发问题及技巧合集
python 配置文件configparser库的使用与问题