希望和大家交朋友
原贴 非本人原创~
https://www./zhangyameng-lxats/ep1acs/yg39n5ryynh1g1eg?singleDoc
一、Python的xlwings模块:
Python的xlwings模块可以直接操作Excel对象,在影刀里面可以不使用影刀的接口,可以直接使用插入Python代码段去对打开的Excel表格进行操作,还是很厉害的,下面就介绍一下;
xlwings模块具体使用文档:
https://blog.csdn.net/wangyuxiang946/article/details/1322493399
二、影刀操作截图:
1.获取当前激活的sheet页:
excel_instance.workbook.ActiveSheet
#注意:
excel_instance代表的Excel对象
.workbook代表当前工作簿
.ActiveSheet代表当前激活的sheet页
.workbook.ActiveSheet这部分内容是固定要加入的,不允许改变,而且一定注意大小写!!!
示例代码:
excel_instance.workbook.ActiveSheet.Range("A1").value= "你好11111"
对当前Excel对象中的当前激活sheet页的A1单元格进行写入“你好11111”的内容!!
2.获取指定sheet页:
excel_instance.workbook.sheets[“Sheet2”]
#注意:
excel_instance代表的Excel对象
.workbook代表当前工作簿
.sheets[“Sheet2”]代表激活名为sheet2的sheet页
.workbook.ActiveSheet这部分内容是固定要加入的,不允许改变,而且一定注意大小写!!!
示例代码:
excel_instance.workbook.sheets["Sheet2"].Range("A1").value= "你好11111"
对当前Excel对象中的指定的名为sheet2的sheet页的A1单元格进行写入“你好11111”的内容!!
三、Python的Win32库:
Python里面的pywin32 库来可以进行来操作 Excel,而且可以用Python的win32库来进行与excel的VBA代码进行转换!!!
案例代码——例1:
使用插入Python代码的段的方式,实现将指定单元格的超链接设置为指定的目标sheet页!
worksheet = excel_instance.workbook.ActiveSheet # 获取当前激活sheet页
cell = worksheet.Range("B1") # 定位到指定单元格
cell.Select() # 选取指定单元格
hyperlink = worksheet.Hyperlinks.Add(Anchor=cell, Address="", SubAddress="Sheet1!A1") # 将指定单元格添加超链接
#注意:
①:将B1改成自定义的单元格
②:将sheet!A1改成目标sheet页 sheet!A1里面的!A1一定要填写!!!
影刀调用截图:
案例代码——例2:
本地有一张数据表格,表格里面有一个sheet页 sheet页里面的C列是金额这一列,我希望根据C列金额总和拆分成多个列表 每个列表内的金额列总和不能超过100000,注意操作Excel的库你需要给我指定使用pywin32库来操作,最后结果给我返回一个二维列表,二维列表里面的每一项列表之和能够满足不超过100000的要求,帮我写一个Python代码函数;
from xbot import print
worksheet = excel_instance.workbook.sheets["Sheet3"]
# 获取金额列的数据
amounts_range = worksheet.Range("C1:C14")
amounts_values = [cell.Value for cell in amounts_range if cell.Value]
# 拆分金额列数据
result = []
current_list = []
current_sum = 0
for amount in amounts_values:
if current_sum + amount <= 100:
current_list.append(amount)
current_sum += amount
else:
result.append(current_list)
current_list = [amount]
current_sum = amount
result.append(current_list) # 添加最后一个列表

print(result)
#注意:
①: worksheet = excel_instance.workbook.sheets[“Sheet3”] 这里面的sheet3改成你目标的sheet页名称
②: amounts_range = worksheet.Range(“C1:C14”) 这里的“C1:C14”改成你这列单元格的范围 这些都是可以用变量的 用“获取总行数”
③: if current_sum + amount <= 100: 这里面的“100” 改成你目标的金额
④: 然后结果会返回一个二维列表 [[30.0, 30.0, 40.0], [20.0, 10.0, 5.0, 7.0, 5.0, 45.0], [50.0, 20.0], [70.0, 10.0]] 列表的每一项就是一个
然后接下来就简单了 根据最后的二维列表判断对应的列表长度 就是你要新建sheet页的个数 直接遍厉二维列表 直接进行写入即可!!!
案例代码——例3:
本地有一张数据表格,希望对表格里面的A列进行分列动作,按照下划线的符号去进行分割,最终结果分成2列
import win32com.client as win32
# 打开 Excel 文件
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True # 添加可视化打开,就是人肉眼可以看到表格被打开
workbook = excel.Workbooks.Open(r'C:pathtoyourworkbook.xlsx')
# 选择 A 列并进行文本分列
worksheet = workbook.Worksheets('Sheet1')
worksheet.Columns('A:A').Select()
excel.Selection.TextToColumns(Destination=worksheet.Range('A1'), DataType=win32.constants.xlDelimited, _
TextQualifier=win32.constants.xlDoubleQuote, ConsecutiveDelimiter=False, Tab=False, _
Semicolon=False, Comma=False, Space=False, Other=True, OtherChar='_', FieldInfo=[(1, 1), (2, 1)], TrailingMinusNumbers=True)
# 选中 D8 单元格
worksheet.Range('D8').Select()
# 关闭 Excel 文件并退出程序
workbook.Close(SaveChanges=True)
excel.Quit()
#代码解释:
①:excel.Visible = True 这个代码控制是否可视化看见表格 False:不可见
②:workbook = excel.Workbooks.Open(r’C:pathtoyourworkbook.xlsx’) 这段代码可以与 影刀中的 excel_instance.workbook等价替换!!!
excel.Workbooks.Open(r’C:pathtoyourworkbook.xlsx’) = excel_instance.workbook
提示:
①:后续可以直接使用下边的代码去替换“启动Excel”指令
import win32com.client as win32
# 打开 Excel 文件
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = True # 添加可视化打开,就是人肉眼可以看到表格被打开
workbook = excel.Workbooks.Open(r'C:pathtoyourworkbook.xlsx')
②:后续可以直接使用下边的代码去替换“关闭Excel”指令
# 关闭 Excel 文件并退出程序
workbook.Close(SaveChanges=True)
excel.Quit()
案例代码——例4:
使用插入Python代码的段的方式,实现在指定sheet页后边新建sheet页
import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application') # 必须加上!!!
worksheet = excel_instance.workbook.sheets["联系人"] # 选择激活指定sheet页
new_sheet = excel_instance.workbook.Sheets.Add(After=worksheet)
new_sheet.Name = '字节12345'
注意:
①:excel = win32.gencache.EnsureDispatch(‘Excel.Application’) 这段代码一定要加,不加的话效果不能达到理想的状态
②:“联系人”——- 替换成 ——- 目标sheet页名称
③:“字节12345”——- 替换成 ——- 新建sheet页名称