Mac Office 2011 VBA - 调用服务器脚本

时间:2010-11-05 07:00:59

标签: macos vba applescript

我正在将一个大型VBA项目从Windows移植到新的Mac Word 2011.它实际上非常顺利......几乎所有代码都在运行。

我的代码需要在我的服务器上调用脚本。在Windows上,我调用系统函数InternetOpenUrl来调用脚本,并调用InternetReadFile来读取脚本返回的结果。例如,我调用的脚本如下:

  "http://www.mysite.com/cgi-bin/myscript.pl?param1=Hello&param2=World

并返回类似“Success”的字符串

在Mac上执行相同操作的最佳方法是什么?是使用Applescript(通过vba MacScript函数)的答案吗?我这样做是为了显示文件选择器对话框,但是我找不到要调用在线脚本的AppleScript的样子。或者有更好/更快的方法吗?

提前致谢,    加里

2 个答案:

答案 0 :(得分:0)

您可以尝试URL访问脚本库,它是curl的前端,或者通过浏览器访问脚本并通过那里阅读文本。

答案 1 :(得分:0)

我最近认为这是为了调用服务器将用户定义的LaTeX字符串转换为等式的图像。通过MacScript命令通过VBA进行调用:

command = "do shell script """ & pyPath & "python " & getURLpath & "getURL.py --formula '" _
          & Latex_Str & "' --fontsize " & Font_Size & " " & WebAdd & """"
result = MacScript(command)

这看起来很难看,但这只是构建命令do shell script /usr/bin/python {path to script}/getURL.py --formula '{LaTeX formula string}' --fontsize {int} {myurl}并将其传递给命令。然后,我的Python脚本使用argparse来解析发送给它的参数,使用urlliburllib2来处理将请求发送到服务器。 MacScript命令读取我的Python脚本的标准输出并将其作为字符串返回给result

This guide on urllib2应该可以帮助您启动并运行Python脚本。

编辑:抱歉,我的答案上次不完整。我用来完成这项工作的Python脚本如下。

# Import the required libraries
from urllib import urlencode
from urllib2 import Request, urlopen, URLError, ProxyHandler, build_opener, install_opener
import argparse

# Set up our argument parser
parser = argparse.ArgumentParser(description='Sends LaTeX string to web server and returns meta data used by LaTeX in Word project')
parser.add_argument('webAddr', type=str, help='Web address of LaTeX in Word server')
parser.add_argument('--formula', metavar='FRML', type=str, help='A LaTeX formula string')
parser.add_argument('--fontsize', metavar='SIZE', type=int, default=10, help='Integer representing font size (can be 10, 11, or 12. Default 10)')
parser.add_argument('--proxServ', metavar='SERV', type=str, help='Web address of proxy server, i.e. http://proxy.server.com:80')
parser.add_argument('--proxType', metavar='TYPE', type=str, default='http', help='Type of proxy server, i.e. http')

# Get the arguments from the parser
args = parser.parse_args()

# Define formula string if input
if args.formula:
    values = {'formula': str(args.fontsize) + '.' + args.formula}   # generate formula from args
else:
    values = {}

# Define proxy settings if proxy server is input.
if args.proxServ:       # set up the proxy server support
    proxySupport = ProxyHandler({args.proxType: args.proxServ})
    opener = build_opener(proxySupport)
    install_opener(opener)

# Set up the data object
data = urlencode(values)
data = data.encode('utf-8')

# Send request to the server and receive response, with error handling!
try:
    req = Request(args.webAddr, data)

    # Read the response and print to a file
    response = urlopen(req)
    print response.read()

except URLError, e:
    if hasattr(e, 'reason'):    # URL error case
        # a tuple containing error code and text error message
        print 'Error: Failed to reach a server.'
        print 'Reason: ', e.reason
    elif hasattr(e, 'code'):    # HTTP error case
        # HTTP error code, see section 10 of RFC 2616 for details
        print 'Error: The server could not fulfill the request.'
        print 'Error code: ', e.code