Jak skopiować dane z programu Excel do programu PowerPoint?
Skrypciarze odpowiadają na Wasze pytania
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! 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ść, 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 |