但是上述接口的params变量无法在Python中实现,只能采用RESTFul形式,传递的参数一定要用JSON格式

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

 但是上述接口的params变量无法在Python中实现,只能采用RESTFul形式,传递的参数一定要用JSON格式_第1张图片 

二、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工作表界面相关命令

但是上述接口的params变量无法在Python中实现,只能采用RESTFul形式,传递的参数一定要用JSON格式_第2张图片

  • Excel界面

但是上述接口的params变量无法在Python中实现,只能采用RESTFul形式,传递的参数一定要用JSON格式_第3张图片

6、Application的常用属性

 但是上述接口的params变量无法在Python中实现,只能采用RESTFul形式,传递的参数一定要用JSON格式_第4张图片

三、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种类型的工作表

  可以在插入对话框里看到(选中工作表名称——鼠标右键单击——插入——即可显示),如图(包含参数说明):

  但是上述接口的params变量无法在Python中实现,只能采用RESTFul形式,传递的参数一定要用JSON格式_第5张图片

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方法

你可能感兴趣的:(但是上述接口的params变量无法在Python中实现,只能采用RESTFul形式,传递的参数一定要用JSON格式)