HOWTO: Visual Basic .NET에서 ADO.NET을 사용하여 Excel 통합 문서의 레코드를 검색하고 수정하기

기술 자료 번역 기술 자료 번역
기술 자료: 316934 - 이 문서가 적용되는 제품 보기.
모두 확대 | 모두 축소

이 페이지에서

요약

이 문서에서는 ADO.NET을 사용하여 Microsoft Excel 통합 문서에서 데이터를 검색하거나, 기존 통합 문서의 데이터를 수정하거나, 새 통합 문서에 데이터를 추가하는 방법을 설명합니다. ADO.NET을 사용하여 Excel 통합 문서에 액세스하려면 Jet OLE DB 공급자를 사용할 수 있습니다. 이 문서는 Excel이 대상 데이터 원본일 때 Jet OLE DB 공급자를 사용하는 데 필요한 정보를 제공합니다.

Microsoft Excel 통합 문서에서 Jet OLE DB 공급자를 사용하는 방법

Microsoft Jet 데이터베이스 엔진은 설치 가능한 ISAM(Indexed Sequential Access Method) 드라이버를 통해 Excel 통합 문서 등 다른 데이터베이스 파일 형식의 데이터에 액세스할 수 있습니다. Microsoft Jet 4.0 OLE DB 공급자가 지원하는 외부 형식을 열려면 연결의 확장 속성에 데이터베이스 형식을 지정합니다. Jet OLE DB 공급자는 Microsoft Excel 통합 문서에 대해 다음과 같은 데이터베이스 형식을 지원합니다.
Excel 3.0
Excel 4.0
Excel 5.0
Excel 8.0
참고: Microsoft Excel 5.0 및 7.0(95) 통합 문서에는 Excel 5.0 원본 데이터베이스 형식을 사용하고 Microsoft Excel 8.0(97), 9.0(2000) 및 10.0(2002) 통합 문서에는 Excel 8.0 원본 데이터베이스 형식을 사용합니다. 이 문서의 예제는 Excel 2000 및 Excel 2002 형식의 Excel 통합 문서를 사용합니다.

연결 문자열

Jet OLE DB 공급자를 사용하여 Excel 통합 문서에 액세스하려면 다음과 같은 구문의 연결 문자열을 사용하십시오.
Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties="Excel 8.0;HDR=YES;"
연결 문자열에서 데이터 원본 매개 변수에 통합 문서의 전체 경로와 파일 이름을 지정합니다. Extended Properties 매개 변수에는 ISAM 버전의 속성과 테이블에 머리글 포함 여부를 나타내는 속성 등 두 속성이 포함될 수 있습니다.

Excel 통합 문서를 사용하면 범위의 첫 번째 행이 기본적으로 머리글 행(또는 필드 이름)입니다. 첫 번째 범위에 머리글이 포함되지 않는 경우 연결 문자열의 확장 속성에 HDR=NO를 지정할 수 있습니다. 연결 문자열에 HDR=NO를 지정하는 경우 Jet OLE DB 공급자가 필드 이름을 자동으로 지정합니다. F1은 첫 번째 필드, F2는 두 번째 필드 등의 형식으로 표시됩니다.

데이터 형식

일반적인 데이터베이스와 달리 Excel 테이블에서 열의 데이터 형식을 직접 지정하는 방법은 없습니다. 그 대신, OLE DB 공급자는 필드의 데이터 형식을 추측하기 위해 열에 있는 8개의 행을 검색합니다. 연결 문자열의 확장 속성에 있는 MAXSCANROWS 설정에 1과 16 사이의 값을 지정하여 검색할 행 수를 변경할 수 있습니다.

테이블 명명 규칙

Excel 통합 문서에서 테이블(또는 범위)을 참조하는 방법에는 여러 가지가 있습니다.
  • 시트 이름 다음에 달러 기호(예: [Sheet1$] 또는 [My Worksheet$])를 넣어 사용합니다. 이러한 방식으로 참조되는 통합 문서 테이블은 워크시트에서 사용된 모든 범위를 포함합니다.
    Select * from [Sheet1$]
  • 이름이 정의된 범위(예: [MyNamedRange])를 사용합니다.
    Select * from [MyNamedRange]
  • 특정 주소가 있는 범위(예: [Sheet1$A1:B10])를 사용합니다.
    Select * from [Sheet1$A1:B10]
참고: 워크시트 이름 다음의 달러 기호는 테이블이 존재한다는 표시입니다. 본 문서의 새 통합 문서 및 테이블 만들기 절에서 설명한 것처럼 새 테이블을 만드는 경우 달러 기호를 사용하지 마십시오.

Excel 통합 문서를 ADO.NET 데이터 원본으로 사용하는 방법

레코드 검색

ADO.NET에서 Dataset 또는 DataReader 두 방법 중 하나를 사용하여 데이터베이스에서 레코드를 검색할 수 있습니다.

Dataset는 데이터 원본에서 검색한 레코드의 캐시입니다. Dataset의 데이터는 대개 데이터베이스에 있는 내용을 상당히 축소한 버전입니다. 그러나 실제 데이터 작업과 같은 방식으로 작업할 수 있으며 실제 데이터베이스와는 연결이 해제된 상태로 유지할 수 있습니다. 데이터베이스 검색 이외에 Dataset를 사용하여 기본 데이터베이스에서 업데이트 작업을 수행할 수도 있습니다.

또는 DataReader를 사용하여 데이터베이스에서 읽기 전용이고 앞으로만 이동 가능한 스트림을 검색할 수 있습니다. DataReader 프로그램을 사용하면 한 번에 한 행만 메모리에 있기 때문에 성능은 증가하고 시스템 오버헤드가 줄어듭니다. 검색할 데이터가 많고 기본 데이터베이스는 변경하지 않으려는 경우 Dataset 보다는 DataReader를 사용하는 것이 좋습니다.

레코드 추가 및 업데이트

ADO.NET을 사용하면 세 가지 방법 중 하나로 통합 문서에 레코드를 추가하고 업데이트할 수 있습니다.
  • 한 번에 한 레코드씩 삽입하거나 업데이트하는 명령을 직접 실행합니다. 이렇게 하려면 연결에 OLEDbCommand 개체를 만들고 CommandText 속성을 유효한 명령으로 설정하여 다음과 같이 레코드를 삽입하거나

    INSERT INTO [Sheet1$] (F1, F2) values ('111', 'ABC')
    다음과 같이 레코드를 업데이트하는 명령을 실행합니다.

    UPDATE [Sheet1$] SET F2 = 'XYZ' WHERE F1 = '111'
    그 다음 ExecuteNonQuery 메서드를 호출합니다.
  • Excel 통합 문서에서 테이블/쿼리로 채운 DataSet를 변경한 다음 DataAdapterUpdate 메서드를 호출하여 DataSet의 변경 내용을 다시 통합 문서에 적용합니다. 그러나 변경 확인을 위해 Update 메서드를 사용하려면 DataAdapter의 InsertCommand
    INSERT INTO [Sheet1$] (F1, F2) values (?, ?)
    UpdateCommand
    UPDATE [Sheet1$] SET F2 = ? WHERE F1 = ?
    에 대해 매개 변수화된 명령을 설정해야 합니다. OleDbDataAdapter는 Excel 통합 문서에 대해 키/색인 정보를 제공하지 않으므로 매개 변수화된 INSERT 및 UPDATE 명령이 필요합니다. 키/색인 필드가 없으면 CommandBuilder는 명령을 자동으로 생성할 수 없습니다.
  • 다른 데이터 원본을 Jet OLE DB 공급자와 함께 사용할 수 있는 경우에 다른 데이터 원본에서 Excel 통합 문서로 데이터를 내보냅니다. 이 방식으로 Jet OLE DB 공급자와 함께 사용할 수 있는 데이터 원본에는 텍스트 파일, Microsoft Access 데이터베이스 및 기타 Excel 통합 문서 등이 있습니다. 다음과 같이 단일 INSERT INTO 명령을 사용하면 다른 테이블/쿼리의 데이터를 통합 문서로 내보낼 수 있습니다.
    INSERT INTO [Sheet1$] IN 'C:\Book1.xls' 'Excel 8.0;' SELECT * FROM MyTable"
    INSERT INTO를 사용하려면 대상 테이블(또는 워크시트)이 이미 있어야 하며 데이터가 대상 테이블에 추가됩니다.

    다음과 같이 SELECT..INTO를 사용하여 테이블/쿼리를 통합 문서로 내보낼 수도 있습니다.
    SELECT * INTO [Excel 8.0;Database=C:\Book1.xls].[Sheet1] FROM [MyTable]
    SELECT..INTO를 사용할 때 대상 테이블이나 통합 문서가 없을 경우 자동으로 만들어집니다. SELECT..INTO 명령을 실행하기 전에 테이블이 이미 있는 경우 오류가 발생합니다.
본 문서 뒷부분의 샘플 코드 절에서는 통합 문서에 레코드를 추가하고 업데이트하는 각각의 방법을 보여줍니다.

레코드 삭제

Jet OLE DB 공급자를 사용하면 Excel 통합 문서에 레코드를 삽입하고 업데이트할 수 있지만 DELETE 작업은 수행할 수 없습니다. 하나 이상의 레코드에서 DELETE 작업을 수행하려고 하면 다음과 같은 오류 메시지가 나타납니다.
Deleting data in a linked table is not supported by this ISAM.
이 제한 사항은 Excel 통합 문서를 데이터베이스로 취급할 때 발생합니다.

통합 문서 및 테이블 만들기

Excel 통합 문서에서 테이블을 만들려면 CREATE TABLE 명령을 실행합니다.
CREATE TABLE Sheet1 (F1 char(255), F2 char(255))
이 명령을 실행하면 명령에서 지정한 테이블 이름을 가진 새 워크시트가 만들어집니다. 연결에 대한 통합 문서가 없을 경우에도 자동으로 만들어집니다.

샘플 코드 절에서는 CREATE TABLE 명령을 사용하여 새 통합 문서와 테이블을 만드는 방법을 설명합니다.

단계

샘플 코드

  1. 새로운 Visual Basic .NET Windows 응용 프로그램 프로젝트를 시작합니다.

    기본적으로 Form1이 생성됩니다.
  2. 6개의 RadioButton 컨트롤과 Button 컨트롤 한 개를 Form1에 추가합니다.
  3. 모든 RadioButton 컨트롤을 선택하고 size 속성을 200,24로 설정합니다.
  4. 보기 메뉴에서 코드를 누릅니다.
  5. 코드 모듈의 시작 부분에 다음 줄을 추가합니다.
    Imports System.Data.OleDb
  6. 다음 코드를 Form 클래스에 삽입합니다.
    Private m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData1.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    
    Private m_sConn2 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                   "Data Source=C:\ExcelData2.xls;" & _
                   "Extended Properties=""Excel 8.0;HDR=YES"""
    
    Private m_sNorthwind = _
          "C:\Program Files\Microsoft Office\Office10\Samples\Northwind.mdb"
    
    Private m_sAction As String
    
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
          RadioButton1.Text = "Create_Workbook"
          RadioButton2.Text = "Retrieve_Records"
          RadioButton3.Text = "Add_Records"
          RadioButton4.Text = "Update_Records"
          RadioButton5.Text = "Update_Individual_Cells"
          RadioButton6.Text = "Use_External_Source"
          Button1.Text = "Go!"
    End Sub
    
    Private Sub RadioButtons_Click(ByVal sender As Object, ByVal e As System.EventArgs) _
          Handles RadioButton1.Click, RadioButton2.Click, RadioButton3.Click, _
          RadioButton4.Click, RadioButton5.Click, RadioButton6.Click
          m_sAction = sender.Text'Store the text for the selected radio button
    End Sub
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
          Try
             ' Call the associated routine to add/update/modify the workbook.
             Select Case m_sAction
                Case "Create_Workbook" : Create_Workbook()
                Case "Retrieve_Records" : Retrieve_Records()
                Case "Add_Records" : Add_Records()
                Case "Update_Records" : Update_Records()
                Case "Update_Individual_Cells" : Update_Individual_Cells()
                Case "Use_External_Source" : Use_External_Source()
             End Select
    
          Catch ex As OleDbException
             Dim er As OleDbError
             For Each er In ex.Errors
                MsgBox(er.Message)
             Next
          Catch ex2 As System.InvalidOperationException
             MsgBox(ex2.Message)
          End Try
    
    
    End Sub
    
    Public Sub Create_Workbook()
    
          ' If the workbooks already exist, prompt to delete.
          Dim answer As MsgBoxResult
          If Dir("C:\ExcelData1.xls") <> "" Or Dir("C:\ExcelData2.xls") <> "" Then
              answer = MsgBox("Delete existing workbooks (C:\ExcelData1.xls and " & _
                       "C:\ExcelData2.xls)?", MsgBoxStyle.YesNo)
              If answer = MsgBoxResult.Yes Then
                  If Dir("C:\ExcelData1.xls") <> "" Then Kill("C:\ExcelData1.xls")
                  If Dir("C:\ExcelData2.xls") <> "" Then Kill("C:\ExcelData2.xls")
              Else
                  Exit Sub
              End If
          End If
    
    '==========================================================================
          ' Create a workbook with a table named EmployeeData. The table has 3 
          ' fields: ID (char 255), Name (char 255) and Birthdate (date).  
    '==========================================================================
          Dim conn As New OleDbConnection()
          conn.ConnectionString = m_sConn1
          conn.Open()
          Dim cmd1 As New OleDbCommand()
          cmd1.Connection = conn
          cmd1.CommandText = "CREATE TABLE EmployeeData (Id char(255), Name char(255), BirthDate date)"
          cmd1.ExecuteNonQuery()
          cmd1.CommandText = "INSERT INTO EmployeeData (Id, Name, BirthDate) values ('AAA', 'Andrew', '12/4/1955')"
          cmd1.ExecuteNonQuery()
          conn.Close()
    
    '==========================================================================
          ' Create a workbook with a table named InventoryData. The table has 3 
          ' fields: Product (char 255), Qty (float) and Price (currency). 
    '==========================================================================
    
          conn.ConnectionString = m_sConn2
          conn.Open()
          Dim cmd2 As New OleDbCommand()
          cmd2.Connection = conn
          cmd2.CommandText = "CREATE TABLE InventoryData (Product char(255), Qty float, Price currency)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Cola', 200, 1.35)"
          cmd2.ExecuteNonQuery()
          cmd2.CommandText = "INSERT INTO InventoryData (Product, Qty, Price) values ('Chips', 550, 0.89)"
          cmd2.ExecuteNonQuery()
          conn.Close()
    
          ' NOTE: You can ALTER and DROP tables in a similar fashion.
    
    End Sub
    
    Public Sub Retrieve_Records()
    
          '==========================================================
          'Use a DataReader to read data from the EmployeeData table.
          '==========================================================
    
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd1 As New System.Data.OleDb.OleDbCommand("Select * From [EmployeeData$]", conn1)
          Dim rdr As OleDbDataReader = cmd1.ExecuteReader
    
          Debug.WriteLine(vbCrLf & "EmployeeData:" & vbCrLf & "=============")
          Do While rdr.Read()
             Debug.WriteLine(System.String.Format("{0,-10}{1, -15}{2}", _
                rdr.GetString(0), rdr.GetString(1), _
                rdr.GetDateTime(2).ToString("d")))
          Loop
          rdr.Close()
          conn1.Close()
    
          '========================================================
          'Use a DataSet to read data from the InventoryData table.
          '========================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds)
          Debug.WriteLine(vbCrLf & "InventoryData:" & vbCrLf & "==============")
          Dim dr As DataRow
          For Each dr In ds.Tables(0).Rows'Show results in output window
             Debug.WriteLine(System.String.Format("{0,-15}{1, -6}{2}", _
                dr("Product"), dr("Qty"), dr("Price")))
          Next
          conn2.Close()
    
    End Sub
    
    Public Sub Add_Records()
    
    '==========================================================================
          ' Run an INSERT INTO command to add new records to the workbook. 
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('CCC', 'Charlie', '10/14/48')"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "INSERT INTO [EmployeeData$] (ID, Name, BirthDate) values ('DDD', 'Deloris', '7/19/98')"
          cmd.ExecuteNonQuery()
          conn1.Close()
    
          '====================================================================
          'Use the InsertCommand object to add new records to the InventoryData
          'table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyExcelTable")
    
          ' Generate the InsertCommand and add the parameters for the command.
          da.InsertCommand = New OleDbCommand( _
             "INSERT INTO [InventoryData$] (Product, Qty, Price) VALUES (?, ?, ?)", conn2)
          da.InsertCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
          da.InsertCommand.Parameters.Add("@Qty", OleDbType.Double).SourceColumn = "Qty"
          da.InsertCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
    
          ' Add two new records to the dataset.
          Dim dr As DataRow
          dr = ds.Tables(0).NewRow
          dr("Product") = "Bread" : dr("Qty") = 390 : dr("Price") = 1.89 : ds.Tables(0).Rows.Add(dr)
          dr = ds.Tables(0).NewRow
          dr("Product") = "Milk" : dr("Qty") = 99 : dr("Price") = 2.59 : ds.Tables(0).Rows.Add(dr)
    
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyExcelTable")
          conn2.Close()
    
    End Sub
    
    Public Sub Update_Records()
    
    '==========================================================================
          ' Run an UPDATE command to change a record in the EmployeeData
          ' table.
    '==========================================================================
          Dim conn1 As New System.Data.OleDb.OleDbConnection(m_sConn1)
          conn1.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn1
          cmd.CommandText = "UPDATE [EmployeeData$] " & _
                        "SET NAME = 'Aaron', BirthDate = '5/4/1975' WHERE ID = 'AAA'"
          cmd.ExecuteNonQuery()
          conn1.Close()
    
          '====================================================================
          ' Use the UpdateCommand object to modify records in the InventoryData
          ' table.
          '====================================================================
          Dim conn2 As New OleDbConnection(m_sConn2)
          Dim da As New OleDbDataAdapter("Select * From [InventoryData$]", conn2)
          Dim ds As DataSet = New DataSet()
          da.Fill(ds, "MyInventoryTable")
    
          ' Generate the UpdateCommand and add the parameters for the command.
          da.UpdateCommand = New OleDbCommand( _
             "UPDATE [InventoryData$] SET Qty = ?, Price=? WHERE Product = ?", conn2)
          da.UpdateCommand.Parameters.Add("@Qty", OleDbType.Numeric).SourceColumn = "Qty"
          da.UpdateCommand.Parameters.Add("@Price", OleDbType.Currency).SourceColumn = "Price"
          da.UpdateCommand.Parameters.Add("@Product", OleDbType.VarChar, 255, "Product")
    
          ' Update the first two records.
          ds.Tables(0).Rows(0)("Qty") = 1000
          ds.Tables(0).Rows(0)("Price") = 10.1
          ds.Tables(0).Rows(1)("Qty") = 2000
          ds.Tables(0).Rows(1)("Price") = 20.2
    
          ' Apply the dataset changes to the actual data source (the workbook).
          da.Update(ds, "MyInventoryTable")
          conn2.Close()
    
    End Sub
    
    Public Sub Update_Individual_Cells()
    
    '==========================================================================
          ' Update individual cells on the EmployeeData worksheet; 
          ' specifically, cells F3, G3, and I4 are modified.
    '==========================================================================
    
          ' NOTE: The connection string indicates that the table does *NOT* 
          ' have a header row.
          Dim conn As New System.Data.OleDb.OleDbConnection(m_sConn1.Replace("HDR=YES", "HDR=NO"))
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
          cmd.CommandText = "UPDATE [EmployeeData$F3:G3] SET F1 = 'Cell F3', F2 = 'Cell G3'"
          cmd.ExecuteNonQuery()
          cmd.CommandText = "UPDATE [EmployeeData$I4:I4] SET F1 = 'Cell I4'"
          cmd.ExecuteNonQuery()
          conn.Close()
    
    End Sub
    
    Public Sub Use_External_Source()
    
          ' Open a connection to the sample Northwind Access database.
          Dim conn As New System.Data.OleDb.OleDbConnection( _
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & m_sNorthwind & ";")
          conn.Open()
          Dim cmd As New System.Data.OleDb.OleDbCommand()
          cmd.Connection = conn
    
    '=======================================================================
          ' Run an INSERT..INTO command on the Northwind database to append 
          ' the records from a table/query to an existing table in the Excel 
          ' workbook.
    '=======================================================================
          cmd.CommandText = "INSERT INTO [EmployeeData$] IN 'C:\ExcelData1.xls' 'Excel 8.0;'" & _
             "SELECT EmployeeID AS ID, FirstName AS Name, BirthDate FROM Employees"
          cmd.ExecuteNonQuery()
    
    '==========================================================================
          ' Run a SELECT..INTO command on the Northwind database to insert 
          ' all the records from a table/query into a new sheet in the Excel 
          ' workbook.
    '==========================================================================
          cmd.CommandText = "SELECT * INTO [Excel 8.0;Database=C:\ExcelData2.xls].[ProductSales]" & _
                          "FROM [Product Sales for 1997]"
          cmd.ExecuteNonQuery()
    
          conn.Close()
    
    End Sub
  7. 필요하면 코드에서 m_sNorthwind 구성원에 대해 예제 Access 데이터베이스 Northwind의 경로를 수정합니다.

시험해보기

  1. 보기 메뉴에서 다른 창을 가리킨 다음 출력을 눌러 출력 창을 표시합니다.
  2. F5 키를 눌러 프로그램을 빌드하고 실행합니다.
  3. Create_Workbook을 누른 다음 Go를 누릅니다. Create_Workbook 프로시저는 CREATE TABLE 명령을 사용하여 C:\ExcelData1.xls 및 C:\ExcelData2.xls 두 개의 새로운 통합 문서를 만듭니다. ExcelData1.xls에는 EmployeeData라는 시트(테이블)가 하나 들어 있고 ExcelData2.xls에는 InventoryData라는 시트(테이블)가 하나 들어 있습니다. 테이블은 레코드로 채워져 있습니다.

    참고: 이 테스트의 나머지 각 단계마다 Excel에서 통합 문서를 열어 결과를 확인하십시오. 또는 Retrieve_Records를 눌러 Visual Studio .NET의 출력 창에서 테이블 내용을 보십시오.
  4. Retrieve_Records를 누른 다음 Go를 누릅니다. Retrieve_Records 프로시저는 테이블에서 레코드를 추출하고 다음과 비슷한 결과를 출력 창에 표시합니다.
    EmployeeData:
    =============
    AAA       Andrew         12/4/1955
    
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
  5. Add_Records를 누른 다음 Go를 누릅니다. Add_Records 루틴은 각 테이블에 두 레코드를 추가합니다.
    EmployeeData:
    =============
    AAA       Andrew         12/4/1955
    CCC       Charlie        10/14/1948
    DDD       Deloris        7/19/1998
    
    InventoryData:
    ==============
    Cola           200   1.35
    Chips          550   0.89
    Bread          390   1.89
    Milk           99    2.59
  6. Update_Records를 누른 다음 Go를 누릅니다. Update_Records 루틴은 각 통합 문서에서 두 레코드를 업데이트합니다.
    EmployeeData:
    =============
    AAA       Aaron          5/4/1975
    CCC       Charlie        10/14/1948
    DDD       Deloris        7/19/1998
    
    InventoryData:
    ==============
    Cola           1000   10.1
    Chips          2000   20.2
    Bread          390    1.89
    Milk           99     2.59
  7. Update_Individual_Cells를 누른 다음 Go를 누릅니다. Update_Individual_Cells 루틴은 ExcelData1.xls에서 EmployeeData 워크시트의 특정 셀을 수정합니다. 특히 F3, G3 및 I4 셀이 업데이트됩니다.
  8. Use_External_Source를 누른 다음 Go를 누릅니다. INSERT..INTO 명령을 사용하면 Use_External_Source 루틴은 Northwind 테이블 'Employees'의 레코드를 ExcelData1.xls에 있는 EmployeeData 워크시트에 추가합니다. 그리고 Use_External_Source는 SELECT..INTO 명령을 사용하여 ExcelData2.xls에 Northwind 테이블 'Products'의 모든 레코드를 포함하는 새 테이블(또는 시트)을 만듭니다.

    참고: Use_External_Source를 한 번 이상 누르면 기본 키가 인식되지 않거나 시행되지 않기 때문에 Employees 목록이 여러 번 추가됩니다.

셀 서식

ADO.NET을 사용하여 기존 통합 문서에 레코드를 추가하거나 업데이트하는 경우 새 레코드나 업데이트된 레코드와 함께 사용될 통합 문서에 셀 서식을 적용할 수 있습니다. 통합 문서에서 기존 레코드(또는 행)를 업데이트하면 셀 서식이 유지됩니다. 통합 문서에 새 레코드(또는 행)를 삽입하면 새 레코드는 그 위에 있는 행 서식을 상속합니다.

다음 절차는 샘플 코드가 있는 통합 문서에 서식을 사용하는 방법을 보여줍니다.
  1. F5 키를 눌러 샘플을 빌드하고 실행합니다.
  2. Form1에서 Create_Workbook을 누른 다음 Go를 누릅니다.
  3. Microsoft Excel을 시작하고 C:\ExcelData1.xls를 엽니다.
  4. 굵은 글꼴 스타일을 A2 셀에 적용합니다.
  5. 기울임꼴, 밑줄 스타일을 B2 셀에 적용하고 가운데에 맞춥니다.
  6. 자세한 날짜 형식을 C2 셀에 적용합니다.
  7. C:\ExcelData1.xls를 저장하고 닫습니다.
  8. Form1에서 Add_Records를 누른 다음 Go를 누릅니다.
  9. Excel에서 C:\ExcelData1.xls를 열고 새로운 두 행이 첫 번째 행의 서식을 상속했는지 확인합니다.

제한 사항

다음은 Excel 데이터 원본에 관한 Jet OLE DB 공급자 제한 사항 몇 가지를 설명합니다.
  • ADO.NET을 사용하여 셀에 수식을 삽입할 수 없습니다.
  • Jet OLE DB 공급자는 Excel 통합 문서에서 테이블의 키/색인 정보를 제공할 수 없습니다. 이런 이유로 CommandBuilder를 사용하여 Excel 통합 문서에서 레코드를 자동으로 업데이트하고 삽입할 수 없습니다.

참조

자세한 내용은 Microsoft 기술 자료의 다음 문서를 참조하십시오.
316756 PRB: ADO.NET OLEDbDataAdapter를 사용하여 Excel 통합 문서를 수정할 때 오류 발생
257819 HOWTO: Visual Basic 또는 VBA의 Excel 데이터로 ADO 사용
306023 HOWTO: Visual C# .NET을 사용하여 Excel 통합 문서에 데이터 전송
311731 HOWTO: ASP.NET, ADO.NET 및 Visual Basic .NET을 사용하여 Excel 데이터 쿼리 및 표시
306572 HOWTO: ASP.NET, ADO.NET 및 Visual C# .NET을 사용하여 Excel 데이터를 쿼리하고 표시하는 방법
278973 샘플: ExcelADO는 Excel 통합 문서에서 ADO를 사용하여 데이터를 읽고 쓰는 방법을 보여준다





Microsoft 제품 관련 기술 전문가들과 온라인으로 정보를 교환하시려면 Microsoft 뉴스 그룹에 참여하시기 바랍니다.

속성

기술 자료: 316934 - 마지막 검토: 2003년 11월 24일 월요일 - 수정: 4.0
본 문서의 정보는 다음의 제품에 적용됩니다.
  • Microsoft Excel 2000 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
  • Microsoft ADO.NET (included with the .NET Framework)
  • Microsoft Excel 2002 Standard Edition
  • Microsoft Office Excel 2003
키워드:?
kbhowtomaster KB316934

피드백 보내기

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com