Teď jste offline a čekáte, až se znova připojí internet.

Jak přenést data z ADO Recordset Excel s automatizace

Důležité: Tento článek byl přeložen pomocí software společnosti Microsoft na strojový překlad, ne profesionálním překladatelem. Společnost Microsoft nabízí jak články přeložené překladatelem, tak články přeložené pomocí software na strojový překlad, takže všechny články ve Znalostní databázi (Knowledge Base) jsou dostupné v češtině. Překlad pomocí software na strojový překlad ale není bohužel vždy dokonalý. Obsahuje chyby ve skloňování slov, skladbě vět, nebo gramatice, podobně jako když cizinci dělají chyby při mluvení v češtině. Společnost Microsoft není právně zodpovědná za nepřesnosti, chyby nebo škody vzniklé chybami v překladu, nebo při použití nepřesně přeložených instrukcí v článku zákazníkem. Společnost Microsoft aktualizuje software na strojový překlad, aby byl počet chyb omezen na minimum.

Projděte si také anglickou verzi článku:246335
Souhrn
Automatizace Excel je možné přenést obsah sadu záznamů ADO do listu aplikace Microsoft Excel. Přístup můžete použít, závisí na verzi aplikace Excel jsou automatizace. Aplikace Excel 97, Excel 2000 a Excel 2002 mít CopyFromRecordset metodu, můžete použít k přenosu sadu záznamů rozsah. CopyFromRecordset v aplikaci Excel 2000 a 2002 lze zkopírovat DAO nebo ADO recordset. CopyFromRecordset v aplikaci Excel 97 však podporuje pouze sady záznamů DAO. Sadu záznamů ADO přenést do aplikace Excel 97, vytvořit matici ze sady záznamů a naplnit oblast s obsahem této matice.

Tento článek popisuje oba způsoby. Ukázkový kód prezentovány ilustruje, jak přenést sadu záznamů ADO Excel 97, Excel 2000, Excel 2002, Excel 2003 nebo Excel 2007.
Další informace
Ukázka kódu poskytované níže ukazuje, jak kopírovat ADO recordset listu Microsoft Excel pomocí automatizace z aplikace Microsoft Visual Basic. Kód nejprve zkontroluje verzi aplikace Excel. Pokud je zjištěn Excel 2000 nebo 2002, je použita metoda CopyFromRecordset, protože je efektivní a vyžaduje méně kód. Však Pokud zjištěn aplikace Excel 97 nebo dřívější sady záznamů nejprve zkopírován na matici pomocí metody GetRows objekt ADO recordset. Matice je pak převeden, takže jsou záznamy v první dimenzi (v řádcích) a pole jsou v druhá dimenze (ve sloupcích). Matice poté zkopírován do listu aplikace Excel prostřednictvím přiřazení pole oblast buněk. (Pole je zkopírované v jednom kroku spíše než existující cyklické prostřednictvím každou buňku v listu).

Ukázkový kód používá ukázkové databázi Northwind, která je součástí Microsoft Office. Pokud jste vybrali výchozí složku při instalaci sady Microsoft Office, je databáze umístěna v:

\Program Files\Microsoft Office\Office\Samples\Northwind.mdb

Pokud Northwind je databáze umístěna v jiné složce v počítači, musíte upravit cestu databáze v kódu poskytované níže.

Pokud máte databázi Northwind v systému nainstalována, můžete použít možnost grafem.@je instalační program Microsoft Office nainstalovat ukázkové databáze.

Poznámka: Databáze Northwind není nainstalována při instalaci sady Microsoft Office 2007. Získání Northwind 2007 naleznete na následujícím webu:

Kroky vytvoření ukázkových

  1. Spusťte jazyka a vytvoření nového projektu standardní EXE. Jako výchozí je vytvořen formulář Form1.
  2. Přidat CommandButton Form1.
  3. Klepněte na příkaz odkazy v nabídce projekt. Přidat odkaz na Knihovně Microsoft ActiveX Data Objects 2.1.
  4. Vložit následující kód do části kódu Form1:
    Private Sub Command1_Click()    Dim cnt As New ADODB.Connection    Dim rst As New ADODB.Recordset        Dim xlApp As Object    Dim xlWb As Object    Dim xlWs As Object        Dim recArray As Variant        Dim strDB As String    Dim fldCount As Integer    Dim recCount As Long    Dim iCol As Integer    Dim iRow As Integer        ' Set the string to the path of your Northwind database    strDB ="c:\program files\Microsoft office\office11\samples\Northwind.mdb"      ' Open connection to the database    cnt.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _        "Data Source=" & strDB & ";"        ''When using the Access 2007 Northwind database    ''comment the previous code and uncomment the following code.    'cnt.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _    '    "Data Source=" & strDB & ";"            ' Open recordset based on Orders table    rst.Open "Select * From Orders", cnt        ' Create an instance of Excel and add a workbook    Set xlApp = CreateObject("Excel.Application")    Set xlWb = xlApp.Workbooks.Add    Set xlWs = xlWb.Worksheets("Sheet1")      ' Display Excel and give user control of Excel's lifetime    xlApp.Visible = True    xlApp.UserControl = True        ' Copy field names to the first row of the worksheet    fldCount = rst.Fields.Count    For iCol = 1 To fldCount        xlWs.Cells(1, iCol).Value = rst.Fields(iCol - 1).Name    Next            ' Check version of Excel    If Val(Mid(xlApp.Version, 1, InStr(1, xlApp.Version, ".") - 1)) > 8 Then        'EXCEL 2000,2002,2003, or 2007: Use CopyFromRecordset                 ' Copy the recordset to the worksheet, starting in cell A2        xlWs.Cells(2, 1).CopyFromRecordset rst        'Note: CopyFromRecordset will fail if the recordset        'contains an OLE object field or array data such        'as hierarchical recordsets            Else        'EXCEL 97 or earlier: Use GetRows then copy array to Excel            ' Copy recordset to an array        recArray = rst.GetRows        'Note: GetRows returns a 0-based array where the first        'dimension contains fields and the second dimension        'contains records. We will transpose this array so that        'the first dimension contains records, allowing the        'data to appears properly when copied to Excel                ' Determine number of records        recCount = UBound(recArray, 2) + 1 '+ 1 since 0-based array                ' Check the array for contents that are not valid when        ' copying the array to an Excel worksheet        For iCol = 0 To fldCount - 1            For iRow = 0 To recCount - 1                ' Take care of Date fields                If IsDate(recArray(iCol, iRow)) Then                    recArray(iCol, iRow) = Format(recArray(iCol, iRow))                ' Take care of OLE object fields or array fields                ElseIf IsArray(recArray(iCol, iRow)) Then                    recArray(iCol, iRow) = "Array Field"                End If            Next iRow 'next record        Next iCol 'next field                    ' Transpose and Copy the array to the worksheet,        ' starting in cell A2        xlWs.Cells(2, 1).Resize(recCount, fldCount).Value = _            TransposeDim(recArray)    End If    ' Auto-fit the column widths and row heights    xlApp.Selection.CurrentRegion.Columns.AutoFit    xlApp.Selection.CurrentRegion.Rows.AutoFit    ' Close ADO objects    rst.Close    cnt.Close    Set rst = Nothing    Set cnt = Nothing        ' Release Excel references    Set xlWs = Nothing    Set xlWb = Nothing    Set xlApp = NothingEnd SubFunction TransposeDim(v As Variant) As Variant' Custom Function to Transpose a 0-based array (v)        Dim X As Long, Y As Long, Xupper As Long, Yupper As Long    Dim tempArray As Variant        Xupper = UBound(v, 2)    Yupper = UBound(v, 1)        ReDim tempArray(Xupper, Yupper)    For X = 0 To Xupper        For Y = 0 To Yupper            tempArray(X, Y) = v(Y, X)        Next Y    Next X        TransposeDim = tempArrayEnd Function
  5. Stisknutím klávesy F5 spustit projektu. Zobrazí se Form1.
  6. Klepněte na Form1 CommandButton a Poznámka: obsah tabulky objednávky je zobrazena v novém sešitu aplikace Excel.
Pomocí CopyFromRecordset

CopyFromRecordset efektivitu a výkon je upřednostňovaným způsobem. Protože aplikace Excel 97 podporuje sady pouze DAO záznamů s CopyFromRecordset, pokud se pokusíte předat sadu záznamů ADO CopyFromRecordset aplikaci Excel 97, zobrazí se následující chybová zpráva:
Chyba při běhu 430:
Třída nepodporuje automatizaci nebo nepodporuje očekávané rozhraní.
V ukázce kódu vyhnout této chybě kontrolou aplikace Excel verze tak, aby CopyFromRecordset nepoužívejte pro verzi 97.

Poznámka: Při použití CopyFromRecordset měli být vědomi, použijete sadu záznamů ADO nebo DAO nemůže obsahovat polí objektů OLE nebo matice data jako například hierarchické sady záznamů. Pokud sadu záznamů zahrnout pole obou typů, metoda CopyFromRecordset se nezdaří s následující chybou:
Chyba při běhu-2147467259:
Metoda CopyFromRecordset objektu Range se nezdařila.
Pomocí GetRows

Pokud je zjištěn Excel 97, použijte metodu GetRows sadu záznamů ADO zkopírovat sadu záznamů do matice. Pokud přiřadíte matice vrácené GetRows oblast buněk v listu, přejde data ve sloupcích namísto v řádcích. Například pokud sada záznamů má dvě pole a 10 řádků, pole zobrazí jako dva řádky a sloupce 10. Proto musíte transponovat matice pomocí funkce TransposeDim() před přiřazením pole oblast buněk. Při přiřazování matici oblast buněk, jsou některá omezení být vědomi:

Při přiřazování matici objektu Excel Range platí následující omezení:
  • Pole nemůže obsahovat pole dat, například hierarchické sady záznamů nebo polí objektů OLE. Všimněte si, že ukázkový kód zkontroluje tato podmínka a, že uživatel je informována, že pole nelze zobrazit v aplikaci Excel zobrazí "Pole Array".

  • Pole nemůže obsahovat polí datum, které mají datum před rokem 1900. (Viz části "odkazy „ Microsoft Knowledge Base článek odkaz) Poznámka: ukázkový kód formáty polí datum jako řetězců vyhnout potenciální problém.
Poznámka: použití funkce TransposeDim() transponovat matice před matice je zkopírován do listu aplikace Excel. Namísto vytváření vlastní funkce transponovat matice můžete použít aplikace Excel transponovat funkce změnou ukázkový kód přiřadit matice buňky, jak je ukázáno níže:
   xlWs.Cells(2, 1).Resize(recCount, fldCount).Value = _      xlApp.WorksheetFunction.Transpose(recArray)				
Pokud se rozhodnete pomocí aplikace Excel transponovat metody namísto funkce TransposeDim() transponovat matice, měli byste být vědoma s metodou transponovat následující omezení:
  • Pole nemůže obsahovat element, který je větší než 255 znaků.
  • Pole nemůže obsahovat hodnoty Null.
  • Počet prvků pole nesmí překročit 5461.
Pokud výše uvedené omezení jsou nebere úvahu při kopírování matice do listu aplikace Excel, může dojít k jedné z následujících chyb běhu:
Run-time chyba 13: Neshoda typu
Run-time Chyba 5: Argument nebo volání procedury neplatný
Run-time error 1004: Definované aplikací nebo objekt definován chyba
Odkazy
Další informace o omezení na předávání matic do různých verzích klepněte na následující číslo článku databáze Microsoft Knowledge Base:
177991XL: Omezení předávání Arrays Excel pomocí automatizace
Další informace naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:
146406XL: Jak načíst tabulku z aplikace Access do aplikace Excel pomocí DAO
215965XL2000: 12: 00: 00 dop dřívější než 1900 zobrazené pro data
243394Jak použít MFC kopírování DAO Recordset Excel s automatizace
247412INFORMACE: Metody pro přenos dat do aplikace Excel z jazyka
Transponovat Neshoda XL2007

Upozornění: Tento článek je přeložený automaticky

Vlastnosti

ID článku: 246335 - Poslední kontrola: 03/28/2007 23:17:43 - Revize: 5.1

Microsoft Office Excel 2007, Microsoft Office Excel 2003, Microsoft Excel 2002 Standard Edition, Microsoft Excel 2000 Standard Edition, Microsoft Excel 97 Standard Edition, Microsoft Visual Basic 5.0 Professional Edition, Microsoft Visual Basic 6.0 Professional Edition, Microsoft Visual Basic 5.0 Enterprise Edition, Microsoft Visual Basic Enterprise Edition for Windows 6.0, Microsoft ActiveX Data Objects 2.0, Microsoft ActiveX Data Objects 2.1, Microsoft ActiveX Data Objects 2.5

  • kbmt kbexpertiseinter kbautomation kbhowto KB246335 KbMtcs
Váš názor
ody>t=">