Centrum skryptów - Microsoft Office

Jak skopiować dane z programu Excel do programu PowerPoint?

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 skopiować dane z programu Excel do programu PowerPoint?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! W ramach prezentacji, jakie robię dość często, chcę otworzyć arkusz kalkulacyjny programu Excel, skopiować wszystkie informacje znajdujące się w arkuszu 1, a następnie wkleić te dane do nowego slajdu programu PowerPoint. Jak to zrobić, używając skryptu?

-- JG

Cześć Skrypciarze! Odpowiedź

Cześć, JG. Jesień jest piękna. Każdy to powie. Co jednak nie jest w jesieni piękne to sposób, w jaki na mnie czasem wpływa. Dzisiaj jest jeden z takich dni, kiedy kompletnie na nic nie mam ochoty i gdybym mógł, nie wychodziłbym dziś w ogóle z domu. Nic mi się nie chce, jestem smutny, senny i łatwo mnie zdenerwować. Nie cieszy mnie nawet mecz, który obejrzę po pracy. Niedobrze. Aż się boje pomyśleć, co będzie w zimie. Dlaczego o tym w ogóle mówię? Im więcej o tym mówię, tym lżej mi na duchu, a kiedy ktoś jeszcze powie mi, że ma tak samo jak ja to, działa na mnie prawie jak lekarstwo. Prawie, bo działa krótko i dlatego muszę o tym często mówić, a że właśnie nie mam się do kogo odezwać, to o tym piszę.

Dobra, już mi lepiej. Niezależnie od tego, jak się czuję, nikt nie będzie za mnie pracował. Ech…

W jaki sposób skrypt może skopiować dane z arkusza kalkulacyjnego programu Microsoft Excel i wkleić je do slajdu programu Microsoft PowerPoint? Już wiem:

Const ppPasteOLEObject = 10

Const ppLayoutBlank = 12



Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = True



Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls")



Set objWorksheet = objWorkbook.Worksheets(1)

objWorksheet.Activate



Set objRange = objWorkSheet.UsedRange

objRange.Copy



Set objPPT = CreateObject("PowerPoint.Application")

objPPT.Visible = True



Set objPresentation = objPPT.Presentations.Add

Set objSlide = objPresentation.Slides.Add(1,1)



objPresentation.Slides(1).Layout = ppLayoutBlank

objPPT.Windows(1).View.PasteSpecial ppPasteOLEObject



objExcel.Quit

Zobaczmy, jak ten skrypt działa (Cóż innego mi pozostało…) Na początek definiujemy parę stałych, ppPasteOLEObject oraz ppLayoutBlank. Dzięki stałej ppPasteOLEObject skrypt będzie wiedział, że w schowku znajdują się dane OLE; przy pomocy stałej ppLayoutBlank utworzymy pusty slajd (czyli taki, w którym nic nie ma).

Po zdefiniowaniu tych stałych tworzymy wystąpienie obiektu Excel.Application i ustawiamy wartość właściwości Visible na True; dzięki temu otrzymamy działające wystąpienie programu Microsoft Excel widoczne na ekranie. Następnie stosujemy metodę Open w celu otwarcia pliku file C:\Scripts\Test.xls i stosujemy poniższe dwa wiersze kodu w celu połączenia się z pierwszym arkuszem w pliku i jego aktywacji:

Set objWorksheet = objWorkbook.Worksheets(1)

objWorksheet.Activate

Po utworzeniu połączenia z arkuszem kopiujemy wszystkie informacje (zarówno dane, jak i formatowanie) do schowka. Możecie wierzyć lub nie, ale do tego wystarczą dwa poniższe wiersze kodu:

Set objRange = objWorkSheet.UsedRange

objRange.Copy

Za pomocą pierwszego wiersza tworzymy wystąpienie obiektu Range programu Excel – zakresu, który obejmuje wszystkie dane z arkusza. Skąd wiemy, że ten zakres obejmuje wszystkie dane w arkuszu? To proste: przecież ustawiliśmy zakres jako równy właściwości UsedRange arkusza. Jak być może pamiętacie z poprzednich rubryk, zakres UsedRange rozpoczyna się od pierwszej komórki zawierającej dane, a kończy na ostatniej komórce zawierającej dane i obejmuje wszystkie komórki znajdujące się pomiędzy tymi dwoma punktami.

Innymi słowy, cały zakres komórek wykorzystanych do przechowywania danych.

Po zdefiniowaniu zakresu wywołujemy metodę Copy w celu skopiowania tych danych do schowka.

Teraz zajmiemy się programem PowerPoint. Na początek tworzymy wystąpienie obiektu PowerPoint.Application i nadajemy jego właściwości Visible wartość True; w tym momencie mamy już działające wystąpienia obu programów – PowerPoint oraz Excel, działające na ekranie. Następnie stosujemy poniższe dwa wiersze kodu w celu utworzenia nowej prezentacji i dodania do niej nowego slajdu:

Set objPresentation = objPPT.Presentations.Add

Set objSlide = objPresentation.Slides.Add(1,1)

Ponieważ zdecydowaliśmy uczynić pierwszy slajd pustym, stosujemy poniższy wiersz kodu w celu nadania właściwości Layout slajdu wartości równej stałej ppLayoutBlank:

objPresentation.Slides(1).Layout = ppLayoutBlank

Teraz musimy tylko wywołać metodę PasteSpecial, a po niej stałą ppPasteOLEObject:

objPPT.Windows(1).View.PasteSpecial ppPasteOLEObject

Uwaga. Zauważmy, że metoda PasteSpecial należy do obiektu View będącego obiektem podrzędnym kolekcji Windows, która z kolei jest obiektem podrzędnym obiektu PowerPoint Application. (Wow!) Dlatego zastosowaliśmy składnię objPPT.Windows(1).View.PasteSpecial.

A tak na wypadek, gdyby ktoś się zastanawiał, 1 oznacza po prostu, że mamy na myśli pierwsze (i w tym skrypcie jedyne) okno programu PowerPoint.

Po wklejeniu danych wywołujemy metodę Quit w celu zamknięcia wystąpienia programu Excel. Dobrze jest nie zamykać programu Excel, dopóki nie wkleimy danych; w przeciwnym wypadku moglibyśmy napotkać komunikat o błędzie mówiący, że w schowku nie ma żadnych danych.

Nawiasem mówiąc, ten skrypt wkleja dane z programu Excel jako osadzony obiekt OLE, jak wskazuje sama nazwa stałej ppPasteOLEObject. (Dwukrotne kliknięcie na wklejone dane spowoduje uruchomienie wystąpienia programu Excel w środku prezentacji.) Jeżeli chcemy mieć dane bez dynamicznego łącza do programu Excel, wystarczy opuścić ten parametr podczas wywoływania metody PasteSpecial:

objPPT.Windows(1).View.PasteSpecial

Wypróbujcie oba sposoby i zobaczcie, który jest lepszy.

A wracając do mojego narzekania, nie martwcie się o mnie. Każdy czasem musi trochę posmęcić. Ja robię to po prostu częściej niż inni.

 Do początku strony Do początku strony

Centrum skryptów - Microsoft Office