我正在使用rpyc python服务器处理通过电子邮件发送的请求。我正在将它们加载到Excel吸盘中,其想法是在收到新请求后通过运行宏来自动更新excel。
但是,我无法初始化工作簿对象。下面的代码可以正常打开工作簿(startExcel),但是当我运行RunThis方法时,它会打印0,因为尚未初始化工作簿中的代码。
有什么办法可以解决这个问题吗?
from threading import Thread, Lock
import rpyc
from rpyc.utils.server import ThreadedServer
import win32com.client
from win32com.client import DispatchEx
import pythoncom
import os
import time
class MyService(rpyc.Service):
excelInitialized = False
xl = 0
wb = 0
def exposed_startExcel(self):
pythoncom.CoInitialize()
xl, wb = loadExcelEnv()
print wb
ws = wb.Sheets('RequestBlotter')
xl.Application.Run("ThisWorkbook.cleardata")
xl.Application.Run("ThisWorkbook.UpdateBlotter")
def exposed_RunThis(self):
print self.wb
def loadExcelEnv():
xl = DispatchEx('Excel.Application')
xl.DisplayAlerts = True
xl.Visible = True
wb = xl.Workbooks.Open(dir_path + '\\Repo Blotter.xlsm')
return xl, wb
server = ThreadedServer(MyService, port = 33445, protocol_config = {"allow_public_attrs" : True})
dir_path = os.path.dirname(os.path.realpath(__file__))
t = Thread(target = server.start)
t.daemon = True
t.start()
conn = rpyc.connect("localhost", 33445)
c = conn.root
c.startExcel()
while True:
time.sleep(10)
c.exposed_RunThis()
答案 0 :(得分:0)
在MyService.exposed_startExcel
中,变量wb
的范围是方法;您永远不会设置属性MyService.wb
。为此,请设置self.wb
而不是wb
。