LiveBos的WSDL模式下有通用的接口
1
|
execBizProcess(xs:string sessionId, xs:string bizProcessName, xs:string id, lbParameter[] params, lbParameter[] variables, )
|
但是上述接口的params变量无法在Python中实现,只能采用RESTFul形式,传递的参数一定要用JSON格式,如
1
|
requestdata_json
=
json.dumps(requestdata, separators
=
(
','
,
':'
))
|
实例:
# -*- coding: utf-8 -*- """ @desc: SMS Sending though LiveBos of Apexsoft @author: Bionw @contact: [email protected] @version: v0.1 """ import requests, json, sys, getopt, time # from urllib import request # URL = 'http://192.168.1.1:8101/service/LBREST' # Test enviroment URL = 'http://192.168.1.4:8101/service/LBREST' # Production enviroment login_URL = URL + '/userService/login' exec_URL = URL + '/biz/execProcess' service_user_id = 'webservice' service_user_password = '000000' """ Get User SessionId """ def get_session(): login_data = dict(userId=service_user_id, password=service_user_password) r = requests.get(login_URL, login_data) r.encoding = 'utf-8' r_json = r.json() sessionID = r_json['sessionId'] return sessionID """ Send Sms """ def send_sms(phone_number,message): # 短信核心参数 interface_name = 'TXXFS_XZDX' # 接口名称 message_type = 1 # 1|短信;2|邮件 XXLX message = message # XXNR 信息内容 phone_number = phone_number # JSR 接收人 sender = 'NAGIOS_SYS' # FSR 发送人 send_date = time.strftime("%Y/%m/%d") # PREFSRQ 预定发送日期 send_time = time.strftime("%H:%M:%S") # PREFSSJ 预定发送时间 params = { 'XXLX': message_type, 'XXNR': message, 'FSR': sender, 'JSR': phone_number, 'PREFSRQ': send_date } requestdata = { 'bizProcessName': interface_name, 'params': params } requestdata_json = json.dumps(requestdata, separators=(',', ':')) SMS_content = { # post数据集 'sessionId': get_session(), 'requestData': requestdata_json } # print(SMS_content) r = requests.post(exec_URL, SMS_content) r.encoding = 'utf-8' r_json = r.json() if r_json['result'] == 1: return '发送成功' else: return '发送失败' def main(argv): # phone_number = '' # message_content = '' try: opts, args = getopt.getopt(argv, "hp:m:", ["phone=", "message="]) except getopt.GetoptError: print('request.py -p-m ') sys.exit(2) for opt, arg in opts: if opt == '-h': print('request.py -p -m ') sys.exit() elif opt in ("-p", "--phone"): phone_number = arg elif opt in ("-m", "--message"): message_content = arg print('输入的号码为:', phone_number) print('发送的内容为:', message_content) print(send_sms(phone_number,message_content)) if __name__ == '__main__': main(sys.argv[1:])
一、对象模型
在VBE中“帮助(H)”——“Microsoft Visual Basic 帮助(H) F1”——“Visual Basic 语言参考”——“函数” 或者在VBE下快捷键“F1”
地址:https://docs.microsoft.com/zh-cn/office/vba/api/overview/excel/object-model
二、Application对象(Excel顶层对象)
1、ScreenUpdating属性
是否控制屏幕更新,False表示关闭屏幕更新,True表示打开屏幕更新
设置ScreenUpdating=False 关闭屏幕更新,将看不到程序的执行过程,可以加快程序的执行速度,让程序显得更直观,专业。
示例(为关闭屏幕更新下,会弹出对话框):
Sub InputTest() Cells.ClearContents '清除表中所有数据 Range("A1:A10") = 100 MsgBox "刚才在A1:A10输入数值100,你能看到结果吗?" Range("B1:B10") = 200 MsgBox "刚才在B1:B10输入数值200,你能看到结果吗?" End Sub
示例(关闭屏幕更新,看不到执行过程,程序最终执行完成才能看到最终结果)
Sub InputTest() Cells.ClearContents '清除表中所有数据 Application.ScreenUpdating = False '关闭屏幕更新 Range("A1:A10") = 100 MsgBox "刚才在A1:A10输入数值100,你能看到结果吗?" Range("B1:B10") = 200 MsgBox "刚才在B1:B10输入数值200,你能看到结果吗?" Application.ScreenUpdating = True '恢复屏幕更新 End Sub
2、DisplayAlterts属性
是否显示警告对话框,False为不显示,True为显示
Sub delSht() Dim sht As Worksheet Application.DisplayAlerts = False '不显示警告信息 For Each sht In Worksheets If sht.Name = ActiveSheet.Name Then '判断sht是不是活动工作表 sht.Delete '删除sht代表的工作表 End If Next Application.DisplayAlerts = True '恢复显示警告信息 End Sub
3、EnableEvents属性
启用或禁用事件,False为禁用(不让事件发生),True为启用
什么是事件?能被Excel认识的一个操作动作,例如“打开工作簿”、“关闭工作簿”等
- 示例1:编写一个程序,当选中工作表的单元格时,自动在单元格中写入该单元格的地址
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Value = Target.Address End Sub
- 示例2:选中活动单元格,记录对应单元格地址,并将活动单元格向下移动一个单元格
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Value = Target.Address Application.EnableEvents = False '禁用事件 Target.Offset(1, 0).Select '选中活动单元格下面的一个单元格 Application.EnableEvents = True '启用事件 End Sub
4、WorksheetFunction属性
使用WorksheetFunction调用Excel内置函数
- 示例1:统计A1:A50单元格中数值大于1000的单元格有多少个?
Sub CountTest() Dim mycount As Integer, rng As Range For Each rng In Range("A1:B50") If rng.Value > 1000 Then mycount = mycount + 1 Next MsgBox "A1:B50中大于1000的单元格个数为:" & mycount End Sub
- 示例2: 统计A1:A50单元格中数值大于1000的单元格有多少个?使用COUNTIF函数
Sub CountTest() Dim mycount As Integer mycount = Application.WorksheetFunction.CountIf(Range("A1:B50"), ">1000") MsgBox "A1:B50中大于1000的单元格个数为:" & mycount End Sub
5、给Excel梳妆打扮
- Excel工作表界面相关命令
- Excel界面
6、Application的常用属性
三、Workbook对象
Workbook工作簿
Workbooks工作簿集合
1、怎么引用工作簿
引用工作簿,就是指明工作簿的位置及名称,共有两种方式
方式一:利用索引号引用工作簿,Workbook.Item(3),这里的Item可以省略,即Workbook(3)
方式二:利用工作簿名称引用 ,Workbook("Book1")或Workbook("Book1.xls"),如果本地文件显示拓展名(且文件已经保存),则文件名必须带拓展名,否则会报错。
2、Workbook名片信息
Sub wbMsg() Range("B2") = ThisWorkbook.Name '返回当前工作簿名称 练习 -副本.xlsm Range("B3") = ThisWorkbook.Path '返回当前工作簿路径 C:\Users\ThinkPad\Desktop Range("B4") = ThisWorkbook.FullName '返回当期工作簿带名称的路径 C:\Users\ThinkPad\Desktop\练习 - 副本.xlsm End Sub
3、创建工作簿
- 使用方法:Workbooks.Add
如果不带任何参数,将创建包含一定数目空白工作表的新工作簿(数目由SheetsInNewWorkbook属性决定)
- 也可以给Add方法设置参数(参数表示现有Excel名称的字符串,选用该参数,新建的工作簿将以该文件作为模板)
Workbooks.Add "C:\Program Files\Microsoft Office\Templates\2052\ADDRESS\ADDRESS.XLS"
- 也可以通过参数指定新建工作簿中包含的工作类型
Workbooks.Add xlWBATChart '新建图表工作表
- Excel一共有4种类型的工作表
可以在插入对话框里看到(选中工作表名称——鼠标右键单击——插入——即可显示),如图(包含参数说明):
4、打开工作簿
使用Workbooks的Open方法(参数名要写含路径的名称)
Sub OpenFile() Workbooks.Open Filename:="F:\Book1.xls" End Sub
参数名成可以省略不写(Open除了Filename参数外,还有14个参数,让用户决定以何种方式打开指定的文件,可以通过系统的帮助来查看更多的信息)
Sub OpenFile() Workbooks.Open "F:\Book1.xls" End Sub
5、激活工作簿
同事打开多个工作簿,但是同一时间只能有一个窗口是活动的,调用Workbooks对象的Active方法可以激活一个工作簿。
Sub JhWb() Workbooks("Book1.xls").Activate '激活工作簿 End Sub
6、保存工作簿
保存工作簿调用Workbooks的Save方法
Sub SaveWb() ThisWorkbook.Save '保存代码所在的工作簿 End Sub
如果想将文件另存为一个新的文件,或者第一次保存一个新建的工作簿,就用SaveAs方法。
参数指定文件保存的路径及文件名如果省略路径,则默认将文件保存在当前文件夹中
Sub SaveWb() ThisWorkbook.SaveAs Filename:="D:\test.xls" End Sub
使用SaveAs方法将工作簿另存为新文件后,将自动关闭原文件,打开新文件,如果希望继续保留原文件不打开新文件,可以用SaveCopyAs方法
Sub SaveWb() ThisWorkbook.SaveCopyAs Filename:="D:\test.xls" End Sub
7、关闭工作簿
关闭工作簿使用Workbooks的Close方法,如果不带参数,则关闭所有打开的工作簿
Sub CloseWb() Workbooks.Close '关闭所有打开的工作簿 End Sub
如果想关闭指定的工作簿,需要指定参数
Sub CloseWb() Workbooks("Book1.xls").Close '关闭Book1.xls End Sub
如果关闭之前被更改过的内容没有保存,关闭工作簿前Excel会询问用户是否保存更改,如果不想显示该对话框,可以给Close方法设置参数:
Sub CloseWb() Workbooks("Book1.xls").Close savechanges:=True '关闭并保存Book1.xls End Sub
关闭并保存的参数savechanges也可以省略不写:
Sub CloseWb() Workbooks("Book1.xls").Close True '关闭Book1.xls End Sub
8、ThisWorkbook与ActiveWorkbook
同是Application对象的属性,同是返回Workbook对象,但二者并不是等同的。
ThisWorkbook是对程序所在的工作簿的引用
ActiveWorkbook是对活动工作簿的引用
新建的工作簿总会成为活动工作簿
Sub wb() Workbooks.Add MsgBox "代码所在的工作簿为:" & ThisWorkbook.Name & Chr(13) _ & "当前活动工作簿为:" & ActiveWorkbook.Name ActiveWorkbook.Close savechanges:=False End Sub
四、Worksheet对象
Worksheet表示一张普通的工作表,Worksheets表示多个Worksheet对象的集合。
1、引用工作表
可以使用工作表的索引号或者标签名称引用它
Worksheets.Item (1) '引用工作表里的第一张工作表 Worksheets (1) '引用工作表里的第一张工作表 Worksheets ("Sheet1") '引用工作簿里标签名称为"Sheet1"的工作表
因为代码名称只能在【属性窗口】里修改,不会随着工作表标签名称或索引号的变化而变化。因此,当工作表的索引号或标签名称经常变化时,使用代码名称引用工作表会更方便。
使用代码名称引用工作表,只需直接写代码名称
例如:第一张工作表的A1单元格输入100,代码为:Sheet1.Range("A1")=100
查看工作表的代码名称,可以读取它的CodeName属性,如果想知道活动工作表的代码名称,代码为:
Sub ShowShtCode() MsgBox ActiveSheet.CodeName End Sub
2、新建工作表
新建工作表使用Worksheets的Add方法
- 不带任何参数,将在活动工作表新建一张工作表
Worksheets.Add
- 可以用参数给新建的工作表指定位置
Worksheets.Add before:=Worksheets(1) '在第一张工作表前插入一张新的工作表
Worksheets.Add after:=Worksheets(1) ‘在第一张工作表后插入一张新的工作表
- 还可以同时插入多张工作表
Worksheets.Add Count:=3 '在活动工作表前插入3张工作表,Count参数的缺省值为1
- 可以同时使用多个参数,不同参数之间用英文逗号隔开
Sub shtAdd() Worksheets.Add after:=Worksheets(1), Count:=3 End Sub
在最后一张工作表后插入两张工作表
Sub shtAdd() '在最后一个工作表后插入两张工作表 Worksheets.Add before:=Worksheets(Worksheets.Count), Count:=2 End Sub
- Add方法有哪些参数?请看VBE的提示
3、更改工作表标签名称
- 更改工作表标签名称,设置工作表Name属性
Worksheets(2).Name="工资表" '更改第二张工作表的标签名称为“工资表”
- 新建工作表时在程序中更改标签名称
Sub shtAdd() Worksheets.Add Before:=Worksheets(1) ActiveSheet.Name = "工资表" End Sub
- 新建工作表同时指定它的标签名称
Sub shtAdd() '在第一张工作表前插入一个名称为“工资表”的工作表 Worksheets.Add(before:=Worksheets(1)).Name = "工资表" End Sub
- 如果同时添加多张工作表(即Count参数值大于1),并不能使用一句代码同时命名
4、删除工作表
删除工作表使用Worksheets对象的Delete方法
Worksheets("Sheet1").Delete '删除Sheet1工作表
5、激活工作表
激活工作表可以使用Activate方法和Select方法
Worksheets(1).Activate '激活第一张工作表
Worksheets(1).Select '激活第一张工作表
6、复制工作表
复制工作表使用Copy方法