Metody přenosu dat do aplikace Excel z jazyka

Překlady článku Překlady článku
ID článku: 247412 - Produkty, které se vztahují k tomuto článku.
Rozbalit všechny záložky | Minimalizovat všechny záložky

Souhrn

Tento článek popisuje mnoho metody přenosu dat do aplikace Excel z aplikace Microsoft Visual Basic. Tento článek také uvádí výhody a nevýhody pro každou metodu tak, aby zvolte řešení, které vám nejlépe vyhovuje.

Další informace

Přístup nejčastěji slouží k přenosu dat sešitu aplikace Excel je automatizace. Automatizace poskytuje největší flexibilitu pro určení umístění dat v sešitu stejně jako možnost formátování sešitu a různých nastavení provést v době spuštění. Automatizace můžete použít několik postupů pro přenos dat:
  • Přenos dat buňku buňce
  • Převod dat v matici do oblasti buněk
  • Přenos dat sadu záznamů ADO oblast buněk pomocí metody CopyFromRecordset
  • Vytvoření tabulky dotazu na listu aplikace Excel obsahující výsledek dotazu na zdroj dat OLEDB nebo ODBC
  • Přenést data do schránky a vložit obsah schránky do listu aplikace Excel
Jsou také metody, které můžete použít k přenosu dat do aplikace Excel, které nevyžadují nutně automatizace. Pokud server-side aplikace jsou spuštěny, může to být dobré přístup věnovali hromadného zpracování dat směrem od vašich klientů. Následující metody lze použít k přenosu dat bez automatizace:
  • Přenést data kartu nebo čárkami oddělený textový soubor, který můžete později analyzovat Excel do buněk v listu
  • Přenést data do listu pomocí ADO
  • Přenos dat do aplikace Excel pomocí dynamické výměny dat (DDE)
Následující oddíly poskytují více podrobností na každém z těchto řešení.

Poznámka: Při použití aplikace Microsoft Office Excel 2007 můžete použít nový formát souboru sešit Excel 2007 (*.xlsx) při ukládání sešitů. Chcete-li to provést, vyhledejte následující řádek kódu v následujících příkladech kódu:
oBook.SaveAs "C:\Book1.xls"
nahradit tento kód s následující řádek kódu:
oBook.SaveAs "C:\Book1.xlsx"
databázi Northwind navíc nejsou zahrnuty v systému Office 2007 ve výchozím nastavení. Databáze Northwind však můžete stáhnout z webu Microsoft Office Online.

Přenos dat buňku buňce použít automatizaci

S automatizaci, můžete přenést data do jedné buňky listu najednou:
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object

   'Start a new workbook in Excel
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add


   'Add data to cells of the first worksheet in the new workbook
   Set oSheet = oBook.Worksheets(1)
   oSheet.Range("A1").Value = "Last Name"
   oSheet.Range("B1").Value = "First Name"
   oSheet.Range("A1:B1").Font.Bold = True
   oSheet.Range("A2").Value = "Doe"
   oSheet.Range("B2").Value = "John"

   'Save the Workbook and Quit Excel
   oBook.SaveAs "C:\Book1.xls"
   oExcel.Quit
přenos dat buňku buňce může být přesné přijatelné přístup, pokud je malé množství dat. Máte flexibilitu dat kdekoli v sešitu a můžete formátovat buňky podmíněně v době spuštění. Tento přístup je však není doporučeno, pokud máte velké množství dat k přenosu do sešitu aplikace Excel. Každý objekt rozsah, získat v době spuštění výsledky v požadavku rozhraní tak, aby přenosu dat tímto způsobem může být pomalé. Navíc Microsoft Windows 95 a Windows 98 mít omezení 64 kB na rozhraní žádosti. Pokud nedostanete nebo překročit toto omezení 64 kB na rozhraní žádosti, Automation server (Excel) může přestat reagovat nebo obdržet chyby označující nedostatek paměti. Toto omezení pro Windows 95 a Windows 98 je popsána v následujícím článku znalostní báze Knowledge Base:
216400Automatizace procesu křížek COM může přestat reagovat aplikace klienta v systému Windows 95 a 98
Přenos dat buňku buňce je jednou více přijatelný pro malé množství dat. Pokud potřebujete k přenosu velkých sad dat Excel, měli byste zvážit řešení prezentovány později.

Další ukázkový kód pro automatizaci Excel naleznete v následujícím článku databáze Microsoft Knowledge Base:
219151Jak automatizovat uzavřený z jazyka

Pomocí automatizace přenést matici data oblast na listu

Pole dat lze převést oblast buněk více najednou:
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object

   'Start a new workbook in Excel
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add

   'Create an array with 3 columns and 100 rows
   Dim DataArray(1 To 100, 1 To 3) As Variant
   Dim r As Integer
   For r = 1 To 100
      DataArray(r, 1) = "ORD" & Format(r, "0000")
      DataArray(r, 2) = Rnd() * 1000
      DataArray(r, 3) = DataArray(r, 2) * 0.7
   Next

   'Add headers to the worksheet on row 1
   Set oSheet = oBook.Worksheets(1)
   oSheet.Range("A1:C1").Value = Array("Order ID", "Amount", "Tax")

   'Transfer the array to the worksheet starting at cell A2
   oSheet.Range("A2").Resize(100, 3).Value = DataArray
   
   'Save the Workbook and Quit Excel
   oBook.SaveAs "C:\Book1.xls"
   oExcel.Quit
Pokud přenos dat pomocí matice než buňku po buňce může realizovat zisku mimořádně velké výkonu s velké množství dat. Zvažte tento řádek z výše uvedených kód, který přenáší data 300 buňky v listu:
   oSheet.Range("A2").Resize(100, 3).Value = DataArray
tento řádek představuje dva požadavky rozhraní (jedna u objektu rozsah, vrátí metoda rozsah) a jiný pro objekt rozsah, vrátí metoda velikost. Na druhou stranu přenosu dat buňku buňce musel požadavky pro 300 rozhraní rozsah objekty. Je to možné, můžete těžit z přenosu dat hromadně a snížení počtu požadavků rozhraní provedete.

Pomocí automatizace přenést sadu záznamů ADO oblast listu

Excel 2000 zavedeny CopyFromRecordset metodu, která umožňuje přenos záznamů ADO (nebo DAO) na oblast na listu. Následující kód ilustruje by Jak automatizovat Excel 2000, Excel 2002 nebo Office Excel 2003 a přenést obsah tabulky objednávky v ukázkové databáze Northwind pomocí metody CopyFromRecordset.
   'Create a Recordset from all the records in the Orders table
   Dim sNWind As String
   Dim conn As New ADODB.Connection
   Dim rs As ADODB.Recordset
   sNWind = _
      "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb"
   conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";"
   conn.CursorLocation = adUseClient
   Set rs = conn.Execute("Orders", , adCmdTable)
   
   'Create a new workbook in Excel
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   Set oSheet = oBook.Worksheets(1)
   
   'Transfer the data to Excel
   oSheet.Range("A1").CopyFromRecordset rs
   
   'Save the Workbook and Quit Excel
   oBook.SaveAs "C:\Book1.xls"
   oExcel.Quit
   
   'Close the connection
   rs.Close
   conn.Close
Poznámka Pokud používáte verzi Office 2007 databázi Northwind, musíte nahradit následující řádek kódu v example:
conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _ sNWind & ";"
Tento řádek kódu nahraďte následující řádek code:
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _ sNWind & ";"
Excel 97 také poskytuje metodu CopyFromRecordset ale použít pouze u sady záznamů DAO. CopyFromRecordset aplikaci Excel 97 nepodporuje ADO.

Další informace o použití ADO a metoda CopyFromRecordset naleznete v následujícím článku databáze Microsoft Knowledge Base:
246335Jak přenést data z sadu záznamů ADO Excel s automatizace

Vytvoření tabulky dotazu na listu použít automatizace

Tabulka sestaven z dat vrácených z externího zdroje dat představuje objektu tabulky dotazu. Při automatizaci aplikace Excel můžete vytvořit tabulky dotazu jednoduše poskytnutím řetězec připojení OLEDB nebo ODBC zdroje dat spolu s řetězec SQL. Excel předpokládá zodpovědnost za generování sadu záznamů a vkládání do listu zadáte umístění. Pomocí QueryTables nabízí oproti metoda CopyFromRecordset několik výhod:
  • Aplikace Excel zpracovává vytvoření sady záznamů a jeho umístění do listu.
  • Dotaz může být uloženo s tabulky dotazu tak, aby aktualizovány později získat aktualizované záznamů.
  • Nové tabulky dotazu je přidán do listu, můžete určit, že data již existující buňky na listu být posunuty přizpůsobená nová data (viz vlastnost RefreshStyle podrobnosti).
Následující kód demonstruje, jak by automatizovat Excel 2000, Excel 2002 nebo Office Excel 2003 vytvořit nové tabulky dotazu v listu aplikace Excel pomocí dat z ukázkové databáze Northwind:
   'Create a new workbook in Excel
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   Set oSheet = oBook.Worksheets(1)
   
   'Create the QueryTable
   Dim sNWind As String
   sNWind = _
      "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb"
   Dim oQryTable As Object
   Set oQryTable = oSheet.QueryTables.Add( _
   "OLEDB;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";", oSheet.Range("A1"), "Select * from Orders")
   oQryTable.RefreshStyle = xlInsertEntireRows
   oQryTable.Refresh False
   
   'Save the Workbook and Quit Excel
   oBook.SaveAs "C:\Book1.xls"
   oExcel.Quit

Pomocí schránky

Schránky systému Windows lze také použít jako mechanismus přenosu dat do listu. Vložit data do více buněk na listu, můžete kopírovat řetězec sloupců jsou odděleny znaky tabulátoru a řádky jsou odděleny konce. Jak jazyka jeho schránka objekt slouží k přenosu dat Excel ilustruje následující kód:
   'Copy a string to the clipboard
   Dim sData As String
   sData = "FirstName" & vbTab & "LastName" & vbTab & "Birthdate" & vbCr _
           & "Bill" & vbTab & "Brown" & vbTab & "2/5/85" & vbCr _
           & "Joe" & vbTab & "Thomas" & vbTab & "1/1/91"
   Clipboard.Clear

   Clipboard.SetText sData
   
   'Create a new workbook in Excel
   Dim oExcel As Object
   Dim oBook As Object
   Set oExcel = CreateObject("Excel.Application")
   Set oBook = oExcel.Workbooks.Add
   

   'Paste the data
   oBook.Worksheets(1).Range("A1").Select
   oBook.Worksheets(1).Paste
   
   'Save the Workbook and Quit Excel
   oBook.SaveAs "C:\Book1.xls"
   oExcel.Quit

Vytvořit soubor s oddělovači, který může analyzovat Excel do řádků a sloupců

Aplikace Excel můžete otevřít soubory s čárkami nebo tabulátory jako oddělovači a správně analyzovat data do buněk. Když chcete přenést velké množství dat na listu při použití automatizace málo, můžete využít výhod této funkce. Může to být dobré přístup aplikace klient server, protože textový soubor může být generované straně serveru. Potom můžete otevřít textový soubor na straně klienta pomocí automatizace, kde je odpovídající.

Vytvoření souboru text oddělený čárkami z sadu záznamů ADO ilustruje následující kód:
   'Create a Recordset from all the records in the Orders table
   Dim sNWind As String
   Dim conn As New ADODB.Connection
   Dim rs As ADODB.Recordset
   Dim sData As String
   sNWind = _
      "C:\Program Files\Microsoft Office\Office\Samples\Northwind.mdb"
   conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";"
   conn.CursorLocation = adUseClient
   Set rs = conn.Execute("Orders", , adCmdTable)
   
   'Save the recordset as a tab-delimited file
   sData = rs.GetString(adClipString, , vbTab, vbCr, vbNullString)
   Open "C:\Test.txt" For Output As #1
   Print #1, sData
   Close #1
    
   'Close the connection
   rs.Close
   conn.Close
   
   'Open the new text file in Excel
   Shell "C:\Program Files\Microsoft Office\Office\Excel.exe " & _
      Chr(34) & "C:\Test.txt" & Chr(34), vbMaximizedFocus
Poznámka Pokud používáte verzi Office 2007 databázi Northwind, musíte nahradit následující řádek kódu v example:
 conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      sNWind & ";"
Tento řádek kódu nahraďte následující řádek code:
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & _
      sNWind & ";"
Pokud textový soubor s příponou CSV, Excel otevře soubor bez zobrazení Průvodce importem textu a automaticky předpokládá, že je soubor oddělený čárkami. Podobně pokud váš soubor má příponu .txt, Excel automaticky analyzovat soubor pomocí oddělovačů kartu.

V předchozí ukázce kódu Excel byla spuštěna pomocí příkazu Shell a název souboru byl použit jako argument příkazového řádku. V předchozí ukázce byla použita žádná automatizace. Však podle potřeby tak, můžete použít minimální částka automatizace otevřít textový soubor a uložit ve formátu sešitu aplikace Excel:
   'Create a new instance of Excel
   Dim oExcel As Object
   Dim oBook As Object
   Dim oSheet As Object
   Set oExcel = CreateObject("Excel.Application")
       
   'Open the text file
   Set oBook = oExcel.Workbooks.Open("C:\Test.txt")
   
   'Save as Excel workbook and Quit Excel
   oBook.SaveAs "C:\Book1.xls", xlWorkbookNormal
   oExcel.Quit
Další informace o použití souboru I/O z aplikace Visual Basic naleznete následujícím článku databáze Microsoft Knowledge Base:
172267RECEDIT.VBP znázorňuje souboru I/O jazyka

Přenos dat do listu pomocí ADO

Pomocí Microsoft Jet OLE DB Provider můžete přidat záznamy do tabulky v existující sešit. "Tabulky" v aplikaci Excel je pouze oblast s definovaným názvem. První řádek oblasti musí obsahovat záhlaví (nebo názvy polí) a všechny následné řádky obsahují záznamy. Následující kroky ukazují, vytvořit sešit s prázdnou tabulkou nazvanou MojeTabulka.
Aplikace Excel 97, Excel 2000 a Excel 2003
  1. Spusťte nový sešit v aplikaci Excel.
  2. Přidat buňky A1:B1 List1 následující záhlaví:

    A1: Jméno B1: příjmení
  3. Formát buňky B1 jako zarovnaný vpravo.
  4. Vyberte A1:B1.
  5. V nabídce Vložit vyberte jména a vyberte definovat. Zadejte název MojeTabulka a klepněte na tlačítko OK.
  6. Nový sešit uložit jako C:\Book1.xls a ukončete aplikaci Excel.
Chcete-li přidat záznamy MojeTabulka pomocí ADO, můžete použít kód podobný následujícímu:
   'Create a new connection object for Book1.xls
   Dim conn As New ADODB.Connection
   conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=C:\Book1.xls;Extended Properties=Excel 8.0;"
   conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Bill', 'Brown')"
   conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Joe', 'Thomas')"
   conn.Close
Excel 2007
  1. Spusťte nový sešit v aplikaci Excel 2007.
  2. Přidat buňky A1:B1 List1 následující záhlaví:

    A1: Jméno B1: příjmení
  3. Formát buňky B1 jako zarovnaný vpravo.
  4. Vyberte A1:B1.
  5. Na pásu klepněte na kartu vzorce a potom klepněte na tlačítko Definovat název. Zadejte název MojeTabulka a potom klepněte na tlačítko OK.
  6. Nový sešit uložit jako C:\Book1.xlsx a ukončete aplikaci Excel.
Přidat záznamy do tabulky MojeTabulka pomocí ADO použít kód podobná následující příklad kódu.
   'Create a new connection object for Book1.xls
   Dim conn As New ADODB.Connection
   conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;" & _
      "Data Source=C:\Book1.xlsx;Extended Properties=Excel 12.0;"
   conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Scott', 'Brown')"
   conn.Execute "Insert into MyTable (FirstName, LastName)" & _
      " values ('Jane', 'Dow')"
   conn.Close
při přidat záznamy do tabulky tímto způsobem je zachována formátování v sešitu. V předchozím příkladu jsou formátovány nová pole přidán sloupec B se zarovnáním vpravo. Každý záznam je přidán řádek borrows formát z řádku nad ní.

Měli byste si poznamenat, že při přidání záznamu na buňku nebo buňky v listu přepíše všechna data dříve v těchto buněk; jinými slovy, řádky v listu není "posune" při jsou přidány nové záznamy. Jste měli Toto mějte na mysli při navrhování rozložení dat listy.

Poznámka: Metoda aktualizace dat v listu aplikace Excel ADO nebo DAO nefunguje v aplikaci Visual Basic pro aplikace prostředí aplikace Access po instalaci Office 2003 Service Pack 2 (SP2) nebo po instalaci aktualizace pro aplikaci Access 2002, která je součástí článku znalostní báze Microsoft Knowledge Base 904018. Metoda funguje dobře v jazyka prostředí aplikací z jiných aplikací Office, jako například Word, Excel a Outlook. Další informace naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:
904953Nelze změnit, přidat nebo odstranit data v tabulkách propojených sešit aplikace Office Access 2003 nebo Access 2002
904018Popis aktualizace pro aplikaci Access 2002: 18. října 2005 (Tento článek může obsahovat odkazy na anglický obsah (dosud nepřeložený).)

Další informace o použití ADO přístup k sešitu aplikace Excel naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:
195951Jak dotaz a aktualizace dat aplikace Excel pomocí ADO z ASP

Přenos dat Excel používání DDE

DDE je alternativou k automatizaci jako prostředek pro komunikaci s aplikací Excel a přenosu dat; s nástup automatizace a COM, DDE je však již upřednostňovaný způsob pro komunikaci s jinými aplikacemi a by měla být používána pouze pokud je k dispozici žádné řešení.

K přenosu dat do aplikace Excel pomocí DDE můžete:
  • Poke dat konkrétní oblast buněk, použijte metodu LinkPoke

    Nebo
  • Použijte metodu LinkExecute odeslat příkazy Excel provede.
Následující příklad kódu ukazuje, jak navázat DDE konverzace s Excel tak, aby poke data buněk na listu a provádět příkazy. Pomocí této ukázkové pro konverzaci DDE lze úspěšně navázat Excel|MyBook.xls LinkTopic sešitu s názvem MyBook.xls musí již otevřen v spuštěné instance aplikace Excel.

Poznámka: Při použití aplikace Excel 2007 můžete použít nový formát souboru XLSX uložte sešity. Zkontrolujte, zda aktualizovat název souboru v následujícím příkladu kódu.

Poznámka: V tomto příkladu představuje Text1 ovládací prvek Textové pole ve formuláři jazyka:
   'Initiate a DDE communication with Excel
   Text1.LinkMode = 0
   Text1.LinkTopic = "Excel|MyBook.xls"
   Text1.LinkItem = "R1C1:R2C3"
   Text1.LinkMode = 1
   
   'Poke the text in Text1 to the R1C1:R2C3 in MyBook.xls
   Text1.Text = "one" & vbTab & "two" & vbTab & "three" & vbCr & _
                "four" & vbTab & "five" & vbTab & "six"
   Text1.LinkPoke
   
   'Execute commands to select cell A1 (same as R1C1) and change the font
   'format
   Text1.LinkExecute "[SELECT(""R1C1"")]"
   Text1.LinkExecute "[FONT.PROPERTIES(""Times New Roman"",""Bold"",10)]"
   
   'Terminate the DDE communication
   Text1.LinkMode = 0
při použití s aplikací Excel LinkPoke, zadáte rozsah v notaci řádek sloupce (R1C1) pro LinkItem. Pokud jsou vyvrtání data do více buněk, můžete použít řetězec sloupce jsou odděleny tabulátory a řádky jsou odděleny konce.

Při použití LinkExecute požádat Excel provedení příkazu je třeba přidělit Excel příkazu v syntaxi Excel makra Language (XLM). Dokumentace XLM není součástí verze aplikace Excel 97 a novější. Další informace o jak získat dokumentaci XLM naleznete v následujícím článku databáze Microsoft Knowledge Base:
143466Macro97.exe soubor k dispozici na služby online
DDE není doporučená řešení pro komunikaci s aplikací Excel. Automatizace poskytuje největší pružnost a poskytuje další přístup k nové funkce aplikace Excel má nabízejí.

Odkazy

Další informace naleznete následujícím článku znalostní databáze Microsoft Knowledge Base:
306022Jak přenést data do sešitu aplikace Excel pomocí jazyka .NET

Vlastnosti

ID článku: 247412 - Poslední aktualizace: 15. února 2007 - Revize: 8.1
Informace v tomto článku jsou určeny pro produkt:
  • 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 for Applications 5.0
  • Microsoft Visual Basic for Applications 6.0
  • Microsoft Visual Basic Enterprise Edition for Windows 6.0
  • Microsoft Visual Basic 6.0 Professional Edition
Klíčová slova: 
kbmt kbautomation kbdde kbinfo KB247412 KbMtcs
Strojově přeložený článek
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:247412

Dejte nám zpětnou vazbu

 

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