Mac Office 2011 VBA - вызов серверного скрипта - PullRequest
3 голосов
/ 05 ноября 2010

Я переношу большой проект 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) ответом?Я делаю это, чтобы отобразить диалоговое окно выбора файла, но не могу найти, как будет выглядеть яблочный скрипт для онлайн-скрипта.Или есть лучший / более быстрый способ сделать это?

Заранее спасибо, Гари

Ответы [ 2 ]

0 голосов
/ 14 июня 2013

Я недавно понял это для того, чтобы позвонить на сервер, чтобы преобразовать пользовательскую строку LaTeX в изображение уравнения.Вызов осуществляется через VBA с помощью команды MacScript в виде:

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 для анализа отправленных ему аргументов и urllib и urllib2 для обработки отправки запроса на сервер.Команда MacScript считывает стандартный вывод моего скрипта Python и возвращает его в виде строки result.

Это руководство по 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
0 голосов
/ 05 ноября 2010

Вы можете попробовать библиотеку сценариев доступа к URL, которая является интерфейсом для curl, или перейти к сценарию через браузер и прочитать там текст.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...