Word 또는 Excel에서 Office VBA 매크로의 ASP.NET 사용하여 XML 웹 서비스를 사용하는 방법

요약

이 문서에서는 Word 또는 Excel의 Visual Basic for Applications(VBA) 매크로에서 ASP.NET 사용하여 XML 웹 서비스를 사용하는 방법을 보여 줍니다.

추가 정보

Office 매크로의 ASP.NET 사용하여 XML 웹 서비스와 성공적으로 통신하려면 매크로가 실행되는 클라이언트 컴퓨터에 SOAP 도구 키트를 설치해야 합니다. 따라서 이 문서의 데모에는 SOAP 도구 키트가 필요합니다. 다운로드 지침을 포함하여 SOAP 도구 키트에 대한 자세한 내용을 확인하세요.

ASP.NET 사용하여 XML 웹 서비스 만들기

  1. Microsoft Visual Studio .NET을 시작합니다. [파일] 메뉴에서 [새로 만들기]를 클릭한 다음 [프로젝트]를 클릭합니다. 새 프로젝트 대화 상자에서 프로젝트 형식 아래의 Visual Basic Projects를 클릭한 다음 템플릿 아래의 ASP.NET 사용하여 XML 웹 서비스를 클릭합니다. 프로젝트 이름을 SQLQuery로 지정하고 확인을 클릭합니다. Service1의 디자인 양식은 기본적으로 표시됩니다.

  2. 보기 메뉴에서 코드를 클릭하여 Service1의 코드 창을 표시합니다.

  3. 다음 코드를 코드 창의 맨 위에 붙여넣습니다.

    Imports System.Data.SqlClient
    
  4. 다음 코드를 Service1 클래스(엔드 클래스 바로 앞)에 붙여넣습니다.

    참고 이 코드를 실행하기 전에 사용자 ID <사용자> 이름 및 암호 =<강력한 암호를> 올바른 값으로 변경해야 합니다. 사용자 ID에 데이터베이스에서 이 작업을 수행할 수 있는 적절한 권한이 있는지 확인합니다.

    Private Const strConn = "User ID=<username>;Password=<strong password>;Initial Catalog=pubs;Data Source=localhost"
    
    <WebMethod()> Public Function GetIDs() As String()
        Dim i As Integer
    
    ' Create an open connection.
        Dim oConn As New SqlConnection(strConn)
        oConn.Open()
    
    Dim oDataset As New System.Data.DataSet()
        ' Execute the query.
        Dim oAdapter As New SqlDataAdapter("SELECT au_id FROM authors", oConn)
        ' Fill the dataset.
        oAdapter.Fill(oDataset)
    
    Dim s(oDataset.Tables(0).Rows.Count - 1) As String
        ' Create an array of IDs.
        For i = 0 To oDataset.Tables(0).Rows.Count - 1
            s(i) = oDataset.Tables(0).Rows(i).ItemArray.GetValue(0)
        Next i
        ' Return the array.
        Return s
    End Function
    
    <WebMethod()> Public Function QueryDatabase(ByVal sID As String) As String()
        Dim i As Integer
    
    ' Create an open a connection.
        Dim oConn As New SqlConnection(strConn)
        oConn.Open()
    
    Dim oCommand As New SqlCommand("SELECT * FROM authors WHERE au_id='" + sID + "'", oConn)
        Dim oReader As SqlDataReader
        ' Execute the query and assign results to a SqlDataReader.
        oReader = oCommand.ExecuteReader()
        oReader.Read()
    
    Dim s(7) As String
        ' Build an array of results.
        For i = 0 To 7
            s(i) = CType(oReader.GetValue(i), String)
        Next
        ' Return the array.
        Return s
    End Function
    
    

참고

SQL Server pubs 데이터베이스에 유효한 연결 문자열이 되도록 코드에서 strConn 상수 수정

웹 서비스 테스트

  1. F5 키를 눌러 웹 서비스 솔루션을 빌드하고 실행합니다. .NET IDE(통합 개발 환경)에서 웹 서비스를 실행하는 경우 Microsoft Internet Explorer는 솔루션에서 Service1.asmx를 로드합니다.

  2. GetIDs 메서드를 테스트합니다. 이렇게 하려면 GetIDs 하이퍼링크를 클릭한 다음 호출을 클릭합니다.

    이 메서드는 웹 서비스가 pubs 데이터베이스에서 추출한 작성자 ID 목록을 반환합니다. 결과는 브라우저에 XML로 표시됩니다.

  3. 브라우저 창 또는 창을 닫고 Visual Studio로 돌아갑니다.

  4. F5 키를 다시 눌러 웹 서비스를 실행합니다.

  5. QueryDatabase 메서드를 테스트합니다. 이렇게 하려면 QueryDatabase 하이퍼링크를 클릭한 다음 sID 매개 변수에 대해 409-56-7008을 입력하고 호출을 클릭합니다.

    이 메서드는 ID가 409-56-7008인 작성자의 세부 정보를 반환합니다. 결과는 브라우저에 XML로 표시됩니다.

  6. 브라우저 창 또는 창을 닫아 웹 서비스를 종료합니다.

Word에서 웹 서비스 사용

이 샘플에서는 Word와 함께 제공되는 우아한 팩스 서식 파일을 사용합니다. 이 샘플은 이 템플릿 없이는 작동하지 않습니다. 템플릿을 설치하려면 다음 단계를 수행합니다.

  1. Office 설치 마법사를 시작합니다.
  2. 마법사에서 기능 추가 또는 제거를 클릭합니다.
  3. 설치할 기능 아래에서 Windows용 Microsoft Excel을 확장합니다. 스프레드시트 서식 파일을 클릭하고 내 컴퓨터에서 실행을 클릭한 다음 업데이트를 클릭합니다.

Word에서 웹 서비스를 사용하려면 다음 단계를 수행합니다.

  1. Word를 시작합니다. 빈 문서는 기본적으로 만들어집니다.

  2. 도구 메뉴에서 매크로를 클릭한 다음 Visual Basic Editor를 클릭합니다. 삽입 메뉴에서 모듈을 클릭하여 빈 코드 모듈을 삽입합니다.

  3. **도구 **메뉴에서 참조를 클릭합니다.

  4. 참조 대화 상자에서 Microsoft SOAP 형식 라이브러리를 선택한 다음 확인을 클릭합니다.

    참고참조 대화 상자에서 Microsoft SOAP 형식 라이브러리를 사용할 수 없는 경우 찾아보기를 클릭합니다. 참조 추가 대화 상자에서 C:\Program Files\Common Files\MSSoap\Binaries 디렉터리로 이동하여 mssoap1.dll 선택합니다. 열기를 클릭한 다음 확인을 클릭합니다.

  5. 코드 모듈에 다음 코드를 붙여넣습니다.

    Public Const sServer = "localhost"
    
    Sub GenerateForm(sID As String)
        Dim oSOAPClient As Object
    
    On Error GoTo errhand
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        oSOAPClient.mssoapinit "http://" + sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        arrTemp = oSOAPClient.QueryDatabase(sID)
    
    Dim oDoc As Word.Document
    
    Set oDoc = Application.Documents.Add("Elegant Fax.dot")
        oDoc.Bookmarks("Company").Range.Text = arrTemp(2) + " " + arrTemp(1) + vbCrLf + _
                arrTemp(4) + vbCrLf + arrTemp(5) + ", " + arrTemp(6) + "  " + arrTemp(7) + vbCrLf + _
                arrTemp(3)           
        Exit Sub
    errhand:
        MsgBox "Error #" + Err.Number + ": " + Err.Description
    End Sub
    
    Sub ShowForm()
      ' Show the dialog box to the user.
      UserForm1.Show
    End Sub
    
    

    참고 방금 만든 웹 서비스를 호스팅하는 서버를 가리키도록 sServer 상수 수정

  6. 삽입 메뉴에서 UserForm을 클릭하여 빈 사용자 양식을 삽입합니다.

  7. 폼에 큰 목록 상자와 명령 단추를 배치합니다.

  8. 보기 메뉴에서 코드를 클릭하여 사용자 양식의 코드 창으로 변경합니다.

  9. 코드 창의 내용을 다음으로 바꿉니다.

    Private Sub CommandButton1_Click()
        ' Generate a FAX based on the ID.
        GenerateForm ListBox1.List(ListBox1.ListIndex)
        UserForm1.Hide
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim oSOAPClient As Object
    
    ' Create a SOAP client.
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        ' Initialize the SOAP client to the Web service.
        oSOAPClient.mssoapinit "http://" + Module1.sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        ' Get an array of IDs.
        arrTemp = oSOAPClient.GetIDs()
    
    ' Fill the list box with IDs.
        For i = 0 To UBound(arrTemp)
          ListBox1.AddItem arrTemp(i)
        Next
    End Sub
    
  10. 문서로 돌아가려면 VBA 편집기를 닫습니다.

  11. 도구 메뉴에서 매크로를 클릭한 다음 매크로를 클릭합니다. 매크로 대화 상자에서 ShowForm 매크로를 실행하여 ID 목록을 표시합니다. 목록에서 ID를 선택하고 명령 단추를 클릭하여 해당 사용자의 정보가 포함된 팩스 문서를 생성합니다.

Excel에서 웹 서비스 사용

이 샘플에서는 Excel과 함께 제공되는 Sales Invoice 템플릿을 사용합니다. 이 샘플은 이 템플릿 없이는 작동하지 않습니다. 템플릿을 설치하려면 다음 단계를 수행합니다.

  1. Office 설치 마법사를 시작합니다.
  2. 마법사에서 기능 추가 또는 제거를 클릭합니다.
  3. 설치할 기능 아래에서 Windows용 Microsoft Excel을 확장하고 스프레드시트 서식 파일을 확장한 다음 Sales Invoice를 클릭합니다. 내 컴퓨터에서 실행을 클릭하고 업데이트를 클릭합니다.

Excel에서 웹 서비스를 사용하려면 다음 단계를 수행합니다.

  1. Excel을 시작합니다. 빈 통합 문서는 기본적으로 만들어집니다.

  2. 도구 메뉴에서 매크로를 클릭한 다음 Visual Basic Editor를 클릭합니다. 삽입 메뉴에서 모듈을 클릭하여 빈 코드 모듈을 삽입합니다.

  3. **도구 **메뉴에서 참조를 클릭합니다.

  4. 참조 대화 상자에서 Microsoft SOAP 형식 라이브러리를 선택한 다음 확인을 클릭합니다.

    참고참조 대화 상자에서 Microsoft SOAP 형식 라이브러리를 사용할 수 없는 경우 찾아보기를 클릭합니다. 참조 추가대화 상자에서 C:\Program Files\Common Files\MSSoap\Binaries 디렉터리로 이동하여 mssoap1.dll 선택합니다. 열기를 클릭한 다음 확인을 클릭합니다.

  5. 코드 모듈에 다음 코드를 붙여넣습니다.

    Const sTemplatePath = "C:\Microsoft Office\Templates\1033\Sales Invoice.xlt"
    Public Const sServer = "localhost"
    
    Sub GenerateForm(sID As String)
        Dim oSOAPClient As Object
    
    On Error GoTo errhand
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        oSOAPClient.mssoapinit "http://" + sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        arrTemp = oSOAPClient.QueryDatabase(sID)
    
    Dim oBook As Excel.Workbook
    
    Set oBook = Application.Workbooks.Add(sTemplatePath)
        With oBook.ActiveSheet
          If If CInt(Application.Version) = 10 Or CInt(Application.Version) = 11 Then
            .Range("D13").Value = arrTemp(2) + " " + arrTemp(1)
            .Range("D14").Value = arrTemp(4)
            .Range("D15").Value = arrTemp(5)
            .Range("F15").Value = arrTemp(6)
            .Range("H15").Value = arrTemp(7)
            .Range("D16").Value = arrTemp(3)
    
    .Range("M13").Value = CStr(Date)
            .Range("C19").Value = "45.8"
            .Range("D19").Value = "Consulting hours"
            .Range("L19").Value = "75"
          ElseIf CInt(Application.Version) = 9 Then
            .Range("data5").Value = arrTemp(2) + " " + arrTemp(1)
            .Range("data6").Value = arrTemp(4)
            .Range("data7").Value = arrTemp(5)
            .Range("data8").Value = arrTemp(6)
            .Range("data9").Value = arrTemp(7)
            .Range("data10").Value = arrTemp(3)
    
    .Range("data11").Value = "45.8"
            .Range("data12").Value = "Consulting hours"
            .Range("data13").Value = "75"
          End If
        End With
        Exit Sub
    errhand:
        MsgBox "Error #" + Err.Number + ": " + Err.Description
    End Sub
    
    Sub ShowForm()
      ' Show the dialog box to the user.
      UserForm1.Show
    End Sub
    
    

    참고 방금 만든 웹 서비스를 호스팅하는 서버를 가리키도록 sServer 상수 수정 청구서 파일의 올바른 경로를 가리키도록 sTemplatePath 상수 수정 Office 2000의 경우 이 파일의 기본 위치는 C:\Microsoft Office\Templates\1033\Invoice.xlt입니다. Office XP의 경우 기본 위치는 C:\Microsoft Office\Templates\1033\Sales Invoice.xlt입니다.

  6. 삽입 메뉴에서 UserForm을 클릭하여 빈 사용자 양식을 삽입합니다.

  7. 폼에 큰 목록 상자와 명령 단추를 배치합니다.

  8. 보기 메뉴에서 코드를 클릭하여 사용자 양식의 코드 창으로 변경합니다.

  9. 코드 창의 내용을 다음으로 바꿉니다.

    Private Sub CommandButton1_Click()
        ' Generate a FAX based on the ID.
        GenerateForm ListBox1.List(ListBox1.ListIndex)
        UserForm1.Hide
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim oSOAPClient As Object
    
    ' Create a SOAP client.
        Set oSOAPClient = CreateObject("MSSOAP.SoapClient")
        ' Initialize the SOAP client to the Web service.
        oSOAPClient.mssoapinit "http://" + Module1.sServer + "/SQLQuery/Service1.asmx?wsdl", "Service1", "Service1Soap"
    
    Dim arrTemp() As String
        ' Get an array of IDs.
        arrTemp = oSOAPClient.GetIDs()
    
    ' Fill the list box with IDs.
        For i = 0 To UBound(arrTemp)
          ListBox1.AddItem arrTemp(i)
        Next
    End Sub
    
    
  10. 통합 문서로 돌아가려면 VBA 편집기를 닫습니다.

  11. 도구 메뉴에서 매크로를 클릭한 다음 매크로를 클릭합니다. 매크로 대화 상자에서 ShowForm 매크로를 실행하여 ID 목록을 표시합니다. 목록에서 ID를 선택하고 명령 단추를 클릭하여 해당 사용자의 정보가 포함된 청구서를 생성합니다.

참조

웹 서비스에 대한 자세한 내용은 Microsoft 기술 자료의 문서를 참조하세요.

Visual Basic .NET을 사용하여 간단한 웹 서비스를 작성하는 방법 301273