Centrum Skrypciarzy - Microsoft Office

Jak zapisać tabelę z bazy danych programu Access jako arkusz kalkulacyjny?

Udostępnij na: Facebook

Skrypciarze odpowiadają na Wasze pytania

Cześć Skrypciarze!

Witamy w rubryce TechNet, w której Skrypciarze z firmy Microsoft odpowiadają na częste pytania dotyczące używania skryptów w administracji systemu. Jeśli macie jakieś pytania z tej dziedziny, zachęcamy do wysłania e-maila na adres: scripter@microsoft.com. Nie możemy zagwarantować odpowiedzi na każde otrzymane pytanie, ale staramy się jak możemy.

Jak zapisać tabelę z bazy danych programu Access jako arkusz kalkulacyjny?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Jak zapisać tabelę z bazy danych programu Access jako arkusz kalkulacyjny programu Excel?

-- OT

Cześć Skrypciarze! Odpowiedź

Cześć, OT. Naprawdę doceniamy to pytanie, ale, z całym szacunkiem, wczoraj przydałoby się ono o wiele bardziej. Prawda wygląda następująco: ostatni tydzień był przerażająco nudny, przynajmniej dla niektórych Skrypciarzy. Nie mamy tu na myśli tych, którzy byczą się gdzieś na plaży w jakimś egzotycznym kraju i popijają drinka z parasolką pod palemką, ani tych, którzy na bosaka przemierzają górskie szlaki, ale tych, którzy w pracy cały tydzień układali pasjanse. Najbardziej emocjonującym przeżyciem tygodnia było to, że w kantynie serwowano brokuły z serem przez dwa dni pod rząd.

To naprawdę był długi tydzień.

Dlatego właśnie czekaliśmy na jakieś interesujące zapytanie cały zeszły tydzień. A mogło być tak pięknie. Teraz, kiedy wszyscy już powracali, wcale nie potrzebujemy tego zapytania. Sorki. Chociaż, prawdę mówiąc wcale nie jest tak ciekawie, jak można by się tego spodziewać. A co tam. Zobaczmy, czy uda nam się zapisać tabelę programu Access jako arkusz kalkulacyjny programu Excel. Cierpliwości, to może chwilę potrwać.

No i nie potrwało; okazuje się że nie było to takie trudne:

Const acExport = 1

Const acSpreadsheetTypeExcel9 = 8



Set objAccess = CreateObject("Access.Application")

objAccess.OpenCurrentDatabase "C:\Scripts\Test.mdb"



objAccess.DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _

    "Employees", "C:\Scripts\Employees.xls", True

Tak, to prawda: to wspaniałe, że to zadanie można wykonać, wykorzystując tylko kilka wierszy kodu. Jednak mieliśmy nadzieję, że potrwa to trochę dłużej, tak dla zabicia czasu; i co my mamy teraz ze sobą zrobić, co? Może wytłumaczyć, jak ten skrypt działa? Świetnie! Jesteśmy uratowani. Jak widać, zaczynamy od określenia stałej o nazwie acExport i nadania jej wartości 1; dzięki temu skrypt będzie wiedział, że chcemy wyeksportować dane. Czy to oznacza, że za pomocą podobnego skryptu można zaimportować dane? Prawdę mówiąc, tak. Zajmiemy się tym jutro. Następnie określamy drugą stałą – acSpreadsheetTypeExcel9 – i nadajemy jej wartość 8; to powie skryptowi, jakiego rodzaju arkusz chcemy utworzyć. Stała acSpreadsheetTypeExcel9 tworzy arkusz programu Excel 2003; ewentualnie istnieje możliwość zapisania danych w innym formacie. Jeżeli tego właśnie chcemy, wykorzystujemy jedną z poniższych stałych oraz jej wartość:

StałaWartość
acSpreadsheetTypeExcel129
acSpreadsheetTypeExcel12Xml10
acSpreadsheetTypeExcel30
acSpreadsheetTypeExcel46
acSpreadsheetTypeExcel55
acSpreadsheetTypeExcel75
acSpreadsheetTypeExcel88
acSpreadsheetTypeExcel98
acSpreadsheetTypeLotusWJ24
acSpreadsheetTypeLotusWK12
acSpreadsheetTypeLotusWK33
acSpreadsheetTypeLotusWK47

To było całkiem proste, nieprawdaż? Ponadto, jak się zaraz przekonamy, to się wcale się nie zmieni. Po określeniu stałych, stosujemy poniższe dwa wiersze kodu w celu utworzenia wystąpienia obiektu Access.Application i otwarcia pliku C:\Scripts\Test.mdb (wyczyn, którego dokonamy, wywołując metodę OpenCurrentDatabase):

Set objAccess = CreateObject("Access.Application")

objAccess.OpenCurrentDatabase "C:\Scripts\Test.mdb"

W tym momencie brakuje nam tylko jednego polecenia do wyeksportowania danych w formie arkusza kalkulacyjnego programu Excel. Nawiasem mówiąc, chodzi właśnie o to polecenie:

objAccess.DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _

    "Employees", "C:\Scripts\Employees.xls", True

Używamy tutaj obiektu DoCmd (obiekt podrzędny Access.Application) do wywołania metody TransferSpreadsheet, która umożliwi nam wyeksportowanie lub zaimportowanie danych z arkusza kalkulacyjnego. Jak widzimy, wywołujemy metodę, podając pięć parametrów:

  • acExport, stała, która mówi o tym, że chodzi nam o eksport, a nie o import danych.
  • acSpreadsheetTypeExcel9, stała określająca format pliku eksportowanych danych.
  • “Employees”, nazwa tabeli w Test.mdb, która ma zostać wyeksportowana.
  • “C:\Scripts\Employees.xls”, pełna ścieżka to nowotworzonego pliku programu Excel.
  • True, parametr HasFieldNames, który wydaje skryptowi polecenie utworzenia pól nazw w tablicy w pierwszym wierszu w pliku arkusza kalkulacyjnego.

Wierzcie lub nie, ale to naprawdę wszystko, co mamy do zrobienia. Po uruchomieniu tego skryptu, w folderze C:\Scripts powinniśmy znaleźć nowy arkusz kalkulacyjny o nazwie Employees.xls. Może nie to samo, co brokuły z serem, ale prawie. Mamy nadzieję, że to w czymś pomoże, OT. Doceniamy troskę, ale naprawdę nie ma potrzeby przysyłania nam jutro nowego zapytania. Jutro jest Dzień Sałatkowy w kantynie, a to i tak jest jak dla Skrypciarzy nadmiar emocji na jeden dzień.

 Do początku strony Do początku strony

Zapisywanie tabeli programu Access jako arkusza kalkulacyjnego za pomocą powłoki Windows PowerShell

Dla zabawy, dodaliśmy do rubryki „Cześć, Skrypciarze!” nowy element: o ile tylko będzie to możliwe, postaramy się przedstawić rozwiązanie problemu za pomocą powłoki Windows PowerShell, a nie tylko skryptu VBScript. Nie będziemy mogli szczegółowo opisać tych skryptów, ale przynajmniej pokażemy gotowy kod.

Na przykład taki:

$acExport = 1

$acSpreadsheetTypeExcel9 = 8



$a = New-Object -Comobject Access.Application

$a.OpenCurrentDatabase("C:\Scripts\Test.mdb")



$a.DoCmd.TransferSpreadsheet($acExport, $acSpreadsheetTypeExcel9, "Employees", `

    "C:\Scripts\Employees.xls", $True)



$a.Quit()
 Do początku strony Do początku strony

Centrum Skrypciarzy - Microsoft Office