2013-06-07 1 views
3
용 Microsoft Word 2011 년 POST를 통해

데이터를 수신하는 단계를 포함한다. 현재 (Windows에서 작업 중) 통화는 다음과 같습니다. 내가 OSX에서 같은 통화를 사용하는 경우, 나는 오류 429가 "ActiveX 구성 요소는 개체를 만들 수 없습니다"라는받을 수 있습니다.보내기 및 I 포트에 우리가 방정식 이미지를 생성하는 웹 사이트를 사용하여 문서에 삽입하는 이미지를 돌려줍니다 Windows에서 MS Word 용 작업 한 매크로를 시도하고 OSX

' Create an xmlhttp object. 
Set w_page = CreateObject("Microsoft.XMLHTTP") 

' Open the connection to the remote server. 
w_page.Open "POST", WebAdd, False 

' Indicate that the body of the request contains form data 
w_page.setRequestHeader "Content-Type", "application/x-www-form-urlencoded" 

' Actually send the request and return the data: 
Font_Size = ComboFontSize.Value 
w_page.Send "formula=" & Font_Size & "." & Latex_Str 

오류는 Set w_page = CreateObject("Microsoft.XMLHTTP") 문에 생성됩니다.

Set w_page = CreateObject("MSXML2.ServerXMLHTTP") 

Set w_page = CreateObject("WinHttp.WinHttpRequest.5.1") 

그러나 같은 오류가 생성됩니다 : I는 다음과 같은 대체 방법 중 몇 가지를 시도했습니다. 나에게 관심이 사람을 위해 OSX 말씀 2011 년

의 게시물을 전송하는 올바른 방법을 찾아 도와주세요,이 프로젝트는 GitHub 볼 수 있습니다.

고맙습니다.

편집 : 나는 OSX Excel에서 사용하기위한 옵션을 자세히 this post을 발견,하지만 난 OSX 말씀에 대한 아날로그를 찾을 수 없습니다. 사람은 워드 해당하는 OSX의 게시물을 보내기 위해 일하는 것이 엑셀 ActiveSheet.QueryTables을 알고 있나요?

편집 : 나는 일부 진전을 만들었습니다. VBA를 통해 외부 프로그램을 호출 할 수 있고 모든 Mac에 Python이 설치되어있는 것처럼 보입니다. 따라서 urlliburllib2을 사용하여 서버에 요청을 보내는 Python 스크립트를 작성했습니다. 파이썬 파일은 명령 줄에서 수식 문자열, 글꼴 크기 및 웹 주소를 구문 분석 argparse를 사용합니다. ,

sCmd = "python " & pyPath & "getURL.py --formula " & Latex_Str & " --fontsize "_ 
    & Font_Size & " " & WebAdd 
sResult = Shell(sCmd, vbNormalFocus) 
Latex_Str이 응용 프로그램을 통해 사용자가 입력 Font_Size가 마찬가지로 사용자가 정의되어

WebAdd은 두 개의 주소 중 하나입니다

지금 내 매크로 같은 내 파이썬 스크립트를 호출 할 수 있습니다 방정식을 생성하는지 아니면 임시 파일을 정리하는지에 따라 다릅니다.

내가 알아낼 수없는 것은 VBA에서 내 파이썬 스크립트 (나중에 이미지 파일을 검색하는 데 필요한 내 서버의 반환 값이있는 문자열)에서 반환되는 값을 읽는 방법입니다. Shell 명령은 PID 번호 만 반환합니다. 아무도 도와 줄 수 있니?

해결 방법 : 알아 냈습니다! 서버에 POST 요청을 처리하고 stdout에 대한 응답을 인쇄하는 Python 스크립트를 작성할 수있었습니다. 커뮤니티와 많은 문서를 온라인으로 도우면서 VBA의 AppleScript를 사용하여 result = vba.MacScript(command) 메서드를 사용하여이 Python 스크립트를 호출 할 수있었습니다. 이것은 내가 파이썬 스크립트에서 stdout을 VBA의 문자열 변수로 읽을 수있게 해주었습니다. 내가 시작

# 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 
     # print e.read() 

This related thread는 최근 문자열 수익을 내 함수를 호출하고 얻기위한 MacScript 명령의 방향으로 날을 지적하고, @CuberChase 나 쓰기에 길을 시작있어 다음과 같이 내 파이썬 스크립트이었다 서버에 대한 호출을 처리하는 외부 함수. 고마워요!

답변

6

불행히도 MacBook을 통해 VBA에서 의 HTTP Post 요청을 수행 할 수있는 역량이 없습니다.

OSX에 XMLHTTP 개체 모델 (또는 MSXML2 또는 WinHttp)이 없기 때문에 현재 "ActiveX 구성 요소는 개체를 만들 수 없습니다."라는 오류 429가 표시됩니다.이 개체 모델은 Windows 전용입니다. 이는 Word뿐 아니라 모든 Office 프로그램에서 사용할 수 없음을 의미합니다.

AppleScript (가능한 경우 확실하지 않음)를 사용하거나 컬과 같은 외부 프로그램에서 쉘 명령을 사용하는 것과 같은 방법으로 해결해야합니다. 이 SO 응답은 HTTP Get 요청에 대해 Curl을 사용하며 아마도 가장 좋은 시작 장소입니다. https://stackoverflow.com/a/15994195/1733206

+0

오우 와우, 그럴듯 해 보이지만 조금 더 솔직 해지기를 기대했습니다. 나는 이것을 구현하기 위해 노력할 것이고, 그것이 작동하도록 할 수 있다면 그에 따라 당신의 대답을 표시 할 것입니다. 감사! – Engineero

+0

좋은 물건. 결과가 나오면 반드시 게시하십시오. – CuberChase

+0

솔직히 외부 함수를 호출 할 생각은 없었지만, 그 점을 알기에 파이썬을 호출하여 요청을 처리하도록 할 수 있습니다. 나는 파이썬이 OSX에 설치되었다고 믿는다. 그래서 의존성 문제가 없어야한다. 나는 그것에 대해 연구하고 그에 따라 업데이트 할 것이지만, 당신의 대답은 그것이 작동 할 것처럼 보인다. 고마워요! – Engineero

관련 문제