2012-11-27 3 views
2

저는 Eve Online이라는 게임에서 사용할 수있는 Excel 스프레드 시트를 작성하고 있습니다. 내 스프레드 시트는 eve-marketdata.com이라는 데이터 제공 업체 웹 사이트를 통해 자동으로 데이터를 검색해야합니다. eve-marketdata의 개발자 페이지 : http://eve-marketdata.com/developers/item_history2.php에서 http를 통해 '게시'요청을 보내 데이터를 요청하는 방법에 대한 지침을 제공합니다.웹 사이트에서 xml 데이터를 Excel에서 검색하려고 시도합니다.

예 : 시장 내역 요청에 사용 된 URL은 http://api.eve-marketdata.com/api/item_history2.xml?char_name=venoushka입니다. 그러면 필자는 10000002 지역에서 항목 ID 34에 대한 데이터 45 일을 가져오고 싶다고 말합니다. URL의 끝에 넣을 것입니다. : api.eve-marketdata.com/api/item_history2.xml?char_name=venoushka patel & type_ids = 34 & region_ids = 10000002의 최종 제품에 대해 각각 & 기호로 구분 된 item_id = 34, days = 45 및 region_ids = 10000002 & days = 45 (이 사이트의 게시 규정으로 인해 http : //가 삭제되었습니다.)

그래서, 스프레드 시트의 정보 (예 : 항목 ID, 지역 ID 등)를 사용하여 적당한 URL을 사이트에 제출 한 다음 찾고있는 정보 만 가져 와서 셀에 넣으십시오. 이것은 현재 xpath를 사용하는 'importxml'기능 때문에 Excel 문서 대신 Google 문서 도구에서 훨씬 쉽습니다. 그러나 Google 워드 프로세서는 스프레드 시트 당 50 개로 xml 호출 수를 제한하고 스프레드 시트는 수천 개가 될 것이므로 Excel을 사용해야합니다.

아니요. '스프레드 시트에서 수행 할 작업이 수천 가지가 아니기 때문에'웹에서 가져 오기 '또는'지도 XML '을 Excel의 셀 기능에 사용하지 않을 것입니다.

나는이 다음 VBA 코드를 사용하여 수행 할 수 있다는 것을 들었다 :

Set objHTTP = CreateObject("MSXML2.ServerXMLHTTP") 
URL = "http://www.somedomain.com" 
objHTTP.Open "POST", URL, False 
objHTTP.setRequestHeader "User-Agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)" 
objHTTP.send ("") 

문제는, 내가 프로그래밍에 아주 좋은거야하지만 내가 전에 VBA를 사용한 적이, 스프레드 시트 엑셀. 시각 기본 편집기를 여는 방법을 알고 있지만 그것에 관한 내용입니다. 첫째로 :

나는 이것을 vba 편집기에 붙여 넣은 다음 통합 문서에서 어떻게 호출합니까? 나는 function()과 같은 것을 무언가를 처음부터 끝내야한다고 생각한다.

워크 시트에서이 기능을 사용하여 필요한 작업을 수행하는 방법은 무엇입니까?

누군가 위의 코드가 수행하는 작업을 설명하고 작업을 수행하기 위해 수정해야 할 필요가 있습니까?

사전에 나는이 문제에 대해 도움을 청한 사실을 진심으로 사과하고 있으며,이를 수행 할 수있는 방법이 필요한 커뮤니티 (수천 명 밖에 있음)의 상당 부분이 있습니다!

+1

확실히 POST 요청을 사용해야합니까? GET 요청을 설명하는 것 같습니다. http://www.w3schools.com/tags/ref_httpmethods.asp을 참조하십시오. – barrowc

답변

2

당신은 그렇게하지 않을 것입니다. 첫째, 요청은 GET이 아니라 POST이므로 변경 사항이 적용됩니다. 당신은 다음과 같은 것을 사용할 수 있습니다

Function ImportData(sUrl As String) As Variant 
     Dim oDoc As Object 
     Dim oAttr As Object 
     Dim oRow As Object 
     Dim x As Long: x = 1 
     Dim y As Long: y = 1 
     Dim vData() As Variant 

     Set oDoc = CreateObject("MSXML2.DOMDocument") 
     With oDoc 
      .Load sUrl 
      Do: DoEvents: Loop Until .readystate = 4 
      ReDim vData(1 To .getElementsByTagName("row").Length, 1 To 8) 
      For Each oRow In .getElementsByTagName("row") 
       For Each oAttr In oRow.Attributes 
        vData(x, y) = oAttr.Text 
        y = y + 1 
       Next oAttr 
       y = 1 
       x = x + 1 
      Next oRow 
     End With 

     ImportData = vData 

    End Function 


    Public Sub Test() 
     Dim g 
     'g = ImportData("http://api.eve-marketdata.com/api/item_history2.xml?char_name=venoushka%20patel&type_ids=34&region_ids=10000002&days=45") 
     'or 
     g = ImportData(Sheets(1).range("a1").Value) 
     Sheets(1).Cells(2, 1).Resize(UBound(g), UBound(g, 2)).Value = g 
    End Sub 

그런 다음 당신은 당신의 URL을 넣어 줄 위치를 볼 수있는 매크로 Test를 실행하는 일반 모듈에 넣어하여 테스트 할 수 있습니다. 나는 인정해야만한다. 이걸로 가파른 학습 곡선을 보일 수도 있지만, VBA 치아를 자르기위한 가장 쉬운 프로젝트가 될 수는 없다.

+0

감사합니다 카일! 이것은 적어도 나를 시작하게 할 것이다. Visual Basic 편집기에 코드를 붙여 넣은 다음 매크로 '테스트'를 실행하여 45 일간의 데이터를 열에 배치했습니다. 매크로를 사용하지 않고이 작업을 수행 할 수 있는지 궁금합니다. 데이터가 항상 배치되는 곳 (물론 해당 특정 항목에 대한 데이터가있는 경우)에 표시된 영역을 시트에 표시하고 새로 고침 데이터 또는 무언가를 누르십시오. 모든 데이터가 한꺼번에 업데이트됩니다. 또한 일부 데이터가 표시되지 않도록 제한하려면 어떻게해야합니까? 예를 들어, 날짜/저가 가격/평균 가격 만 원했고 다른 모든 것들은 보여주지 않으면 건너 뛰십시오. – Venoushka

+0

예, 매크로없이이 작업을 수행 할 수 있습니다. 가져 오기 XML/웹 쿼리를 사용하지만 그 작업을 원하지 않는다고 지정했습니다. 원하는 경우 refresh라고 표시된 시트에 버튼을 놓고 매크로를 실행할 수 있습니다. – SWa

+0

나는 본다. 여기에 대한 질문이 있습니다. 예를 들어 시트에서 입력을 수락하는식이 있습니다. 예를 들어 VBA에서 일반적인 수식을 유지하면서 항목 ID, 지역 ID 또는 기타 데이터가 스프레드 시트 자체에서 참조되는 경우가 있습니다. 그것은 아주 좋을 것입니다. 또한, 아마도 당신은 엑셀과 함께 사용하기 위해 vba를 배우기 위해 좋은 웹 사이트 및/또는 책으로 안내 할 수 있습니까? 너 정말 고마워. 정말 고마워. – Venoushka