VB联合Python开发

用到 Python,首先你肯定得装一个Python吧,用3.x的

创建一个.py文件

说明:需要引用pythoncom  (这个需要pip install pywin32 )

import pythoncom
class PythonUtilities:

    _public_methods_=['SplitString']
    _public_methods_ = ['httpBom']
    _reg_progid_='PythonDemos.Utilities'
    _reg_clsid_=pythoncom.CreateGuid()

    def SplitString(self, val, item=None):
        import string
        if item !=None:
            item=str(item)
        val=str(val)
        return val.split(item)

    def httpBom(self):
        return  "hhh"

if __name__=='__main__':
    print ('Registering COM server...')
    import win32com.server.register
    win32com.server.register.UseCommandLine(PythonUtilities)
然后在VB中就可以使用Python中的方法了

Private Sub Command1_Click()
    Set PythonUtils = CreateObject("PythonDemos.Utilities")
'    response = PythonUtils.SplitString("Hello from VB My name is Leo Liu")
'    For Each Item In response
'        List1.AddItem Item
'    Next
    MsgBox PythonUtils.httpBom
End Sub
最终的使用方法

cmd 中 输入 : Python PythonDemos.py

然后VB就可以使用Python这个类中发方法了

如果想要注销这个COM

python PythonDemos.py --unregister 

然后将这个文件打包成 exe:

安装 pin install pyinstaller

Pyinstaller -F WFJieKouPY.py    #打包成多文件
Pyinstaller -D WFJieKouPY.py    #打包成单文件

注意:需要引用 import win32timezone  否则报错

import pypyodbc
import os
import requests
import pythoncom
import json
import win32com.server.register
import win32timezone
class PythonUtilities:
    _public_methods_ = ['FindBoms', 'SendBoms', 'test', 'GetData']
    _reg_progid_ = 'WFJieKouPY.Utilities'
    _reg_clsid_ = pythoncom.CreateGuid()

    accountId = ""
    tenantId = "sxqcdev"
    appId = "DEVTEST"
    appSecuret = "!QAZ2wsx#EDC4rfv"
    language = "zh_CN"

    user = "SQESB"
    usertype = "UserName"

    appTokenUrl = r'http://172.16.127.102:8081/ierp/api/getAppToken.do'
    accessTokenUrl = r'http://172.16.127.102:8081/ierp/api/login.do'
    pushBomUrl = r'http://172.16.127.102:8081/ierp/kapi/app/iscb/sf_bom_save'
    findBomUrl = r'http://172.16.127.102:8081/ierp/kapi/app/iscb/sf_bom_query'
    # 获取密码
    def GetKey(self):
        #####获取app_token
        data = {
            "accountId": self.accountId,
            "tenantId": self.tenantId,
            "appId": self.appId,
            "appSecuret": self.appSecuret,
            "language": self.language
        }
        headers = {
            "Content-Type": "application/json",
        }
        res = requests.post(url=self.appTokenUrl, json=data, headers=headers)
        res = res.json()
        if (res['state'] == "success"):
            app_token = res['data']['app_token']
            # print("app_token:" + app_token)
        else:
            return ""

        #########获取access_token
        data = {
            "user": self.user,
            "apptoken": app_token,
            "tenantId": self.tenantId,
            "accountId": self.accountId,
            "usertype": self.usertype
        }
        headers = {
            "Content-Type": "application/json",
        }
        res = requests.post(url=self.accessTokenUrl, json=data, headers=headers)
        res = res.json()
        if (res['state'] == "success"):
            access_token = res['data']['access_token']
            # print("access_token:" + access_token)
        else:
            return ""

        return access_token  # 返回密钥

    # # 取数据整合出成json格式
    # def GetData(self, path=os.getcwd() + r'\data\data.mdb'):
    #
    #     # 连接数据库
    #     # path = os.getcwd() + r'\data\data.mdb'  # 数据库文件
    #     # path = 'E:\万方接口程序\data\data.mdb'
    #
    #     conn = pypyodbc.connect(r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + path + ";Uid=;Pwd=;")
    #     cursor = conn.cursor()
    #     # ===========================获取某个表数据内容======================================================
    #     SQL_value = "SELECT * FROM 万方BOM表  ORDER BY material"  # 查表
    #     cursor.execute(SQL_value)
    #     result = cursor.fetchall()  # 生成表格
    #     data = {
    #         "boms": []
    #     }
    #     lastBom = ""
    #     if (len(result) > 0):
    #         for row in result:  # 按行输出
    #
    #             if (len(data['boms']) == 0 or lastBom != row[3]):  # 空的直接添加)
    #
    #                 data['boms'].append({
    #                     "createorg_number": row[1],
    #                     "version_number": row[2],
    #                     "material": row[3],
    #                     "wzta_sccj": row[4],
    #                     "wzta_versionremark": row[5],
    #                     "wzta_luxian": row[6],
    #                     "wzta_chexing": row[7],
    #                     "entry": []
    #                 })
    #                 data['boms'][len(data['boms']) - 1]['entry'].append({
    #                     "entrymaterial_number": row[8],
    #                     "wzta_tzyl": float(row[9]),
    #                     "wzta_gongweihao": row[10],
    #                     "wzta_zijiaoxianhao": row[11],
    #                     "wzta_weizhihao": row[12],
    #                     "wzta_tuzhidaihao": row[13],
    #                     "wzta_tuzhichicun": row[14],
    #                     "wzta_gongyiremark": row[15],
    #                     "entryqtynumerator": float(row[16]),
    #                     "entryoperationnumber": row[17],
    #                 })
    #             else:
    #                 data['boms'][len(data['boms']) - 1]['entry'].append({
    #                     "entrymaterial_number": row[8],
    #                     "wzta_tzyl": float(row[9]),
    #                     "wzta_gongweihao": row[10],
    #                     "wzta_zijiaoxianhao": row[11],
    #                     "wzta_weizhihao": row[12],
    #                     "wzta_tuzhidaihao": row[13],
    #                     "wzta_tuzhichicun": row[14],
    #                     "wzta_gongyiremark": row[15],
    #                     "entryqtynumerator": float(row[16]),
    #                     "entryoperationnumber": row[17],
    #
    #                 })
    #             lastBom = row[3]
    #
    #         # print(json.dumps(data,sort_keys=True,indent=4,ensure_ascii=False))
    #
    #     cursor.close()
    #     conn.close()
    #     return data
    #     # return json.dumps(data,ensure_ascii=False)

    # 查询物料是否存在
    def FindBoms(self, material, createorg_number='351'):
        # arr = []
        # arr.append(material)
        if material == "" :
            return
        data = {
            "number": material.split(","),
            "createorg_number": createorg_number
        }
        accessToken = self.GetKey()
        # print(accessToken)
        headers = {
            "Content-Type": "application/json",
            "accessToken": accessToken
        }
        res = requests.post(url=self.findBomUrl, json=data,
                            headers=headers)
        return json.dumps(res.json(), ensure_ascii=False)

    # # 推送BOM
    # def SendBoms(self, path=os.getcwd() + r'\data\data.mdb'):
    #     data = self.GetData(path)
    #     if (len(data["boms"]) <= 0):
    #         return {
    #             "status": False,
    #             "message": "数据表中没有待发送的物料。"
    #         }
    #
    #     accessToken = self.GetKey()
    #     # print(accessToken)
    #     headers = {
    #         "Content-Type": "application/json",
    #         "accessToken": accessToken
    #     }
    #     res = requests.post(url=self.pushBomUrl, json=data,
    #                         headers=headers)
    #     return json.dumps(res.json(), ensure_ascii=False)


    # # 推送BOM
    def SendBoms(self, bomStr):

        if bomStr == "":
            return
        boms = [] #存放推送数组
    #     先分组
        materialFZArr = bomStr.split("‖")
        for fzStr in materialFZArr:
            # 头部分组
            singleArr = fzStr.split("※")
            headArr = singleArr[0].split("→")
            boms.append({
                "createorg_number": headArr[0],
                "version_number":  headArr[1],
                "material":  headArr[2],
                "wzta_sccj":  headArr[3],
                "wzta_versionremark":  headArr[4],
                "wzta_luxian":  headArr[5],
                "wzta_chexing":  headArr[6],
                "entry": []
            })
            for zjStr in singleArr[1].split("▷"):
                zjStrArr = zjStr.split("→")
                boms[len(boms)-1]["entry"].append({
                    "entryoperationnumber": zjStrArr[0],
                    "entrymaterial_number": zjStrArr[1],
                    "entryqtynumerator": float(zjStrArr[2]),
                    "wzta_tzyl": float(zjStrArr[3]),
                    "wzta_gongweihao": zjStrArr[4],
                    "wzta_zijiaoxianhao": zjStrArr[5],
                    "wzta_weizhihao": zjStrArr[6],
                    "wzta_tuzhidaihao": zjStrArr[7],
                    "wzta_tuzhichicun": zjStrArr[8],
                    "wzta_gongyiremark":zjStrArr[9]
                })

        #print(boms)
        # return boms

        accessToken = self.GetKey()
        # print(accessToken)
        headers = {
            "Content-Type": "application/json",
            "accessToken": accessToken
        }
        res = requests.post(url=self.pushBomUrl, json=boms,
                            headers=headers)
        return json.dumps(res.json(), ensure_ascii=False)

    def test(self, str='zhw'):
        return str


print('Registering COM server...')


win32com.server.register.UseCommandLine(PythonUtilities)

input("运行成功!Press <Enter>")

# if __name__ == '__main__':
#     print('Registering COM server...')
#     import win32com.server.register
#
#     win32com.server.register.UseCommandLine(PythonUtilities)
#
#     input("运行成功!")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值