但是上述介面的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 <phone number> -m <message>') sys.exit(2) for opt, arg in opts: if opt == '-h': print('request.py -p <phone number> -m <message>') 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方法