Centrum Skryptów - Microsoft Office

Jak odczytać niestandardowe właściwości podsumowania w pliku programu Excel?

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 odczytać niestandardowe właściwości podsumowania w pliku programu Excel?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! Dodaliśmy kilka właściwości niestandardowych do naszych plików Excel. Jak uzyskać dostęp do tych właściwości za pomocą skryptu?

-- UR

Cześć Skrypciarze! Pytanie

Cześć, UR! O mały włos nie napisałbym dzisiejszego artykułu, a to dlatego, że ostatnimi czasy ostro przemyśliwam zmianę kariery – zamiast pisać artykuły, mógłbym brać udział w Skrypciarskiej Olimpiadzie Zimowej (przypominam po raz stutysięczny, że tegoroczna edycja rusza 15. lutego).

Denerwuje mnie bowiem fakt, że jako pracownik firmy Microsoft nie mam prawa do nagród, które naprawdę są super. Teraz dodatkowe nagrody chce dołożyć zespół Windows PowerShell – wczoraj otrzymałem widomość e-mail od samego Jeffreya Snowera – architekta programu PowerShell.

Uwaga: Nie wierzycie nam, że znamy samego Jeffreya Snowera? Otóż tak się składa, że Jeffrey Snower oraz piszący to Skrypciarz są bliskimi przyjaciółmi. No dobra, przyznajemy się – czasem Jeffrey pozwala nam umyć swój samochód, co za super facet…

Oprócz umycia własnego samochodu, Jeffrey zezwolił nam na użycie programu Windows PowerShell 2.0 (j.ang.) w naszej Olimpiadzie Skrypciarskiej. Nie zgodziliśmy się jednak na to. Nie to, żebyśmy mieli jakieś zastrzeżenia do tego programu, nie mamy. Cały szkopuł w tym, że PowerShell 2.0 jest nadal na etapie testowym. Dlatego też zdecydowaliśmy się na wersję PowerShell 1.0 jako oficjalną platformę naszych zimowych rozgrywek. Jeżeli jednak wolicie używać PowerShell 2.0, proszę bardzo, wybór należy do Was.

To nie wszystko. Dzięki hojności brygady PowerShell, oprócz zgody na korzystanie z wersji 2.0, dostaliśmy koszulki dla wszystkich śmiałków, którzy w swoich rozwiązaniach pokuszą się o użycie właśnie tej wersji. Ponadto jeżeli chcecie umieścić dane w siatce, nie w oknie konsoli, to też na to oficjalnie zezwalamy (bez obaw, nie trzeba nam w zamian za to myć samochodów). Za każde poprawne użycie nowych cech programu PowerShell 2.0 w Waszych wpisach do zdarzeń programu PowerShell dostajecie koszulkę PowerShell. Proste?

Uwaga: Są tu oczywiście ograniczenia typu jedna koszulka na jednego śmiałka. Jeżeli interesują Was pozostałe reguły, na pewno umieścimy wszystkie szczegóły przed rozpoczęciem naszej skryptoolimpiady.

Wyobraźcie sobie teraz, że jedną z konkurencji jest odczytanie niestandardowej właściwości dodanej do arkusza podsumowania informacji o pliku Microsoft Excel. Co byście zrobili? Pewnie coś takiego:

Set objExcel = CreateObject("Excel.Application")

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



For Each strProperty in objWorkbook.CustomDocumentProperties

    Wscript.Echo strProperty.Name & " – " & strProperty.Value

Next



objExcel.Quit

Jak widać, to dość mało skomplikowany skrypt, i o to właśnie chodzi. Pamiętajcie, że w skryptach chodzi (oprócz dobrego humoru) przede wszystkim o prostotę (przypominamy, że w trakcie Olimpiady trzeba napisać przynajmniej 10 skryptów).

W obecnym skrypcie zaczynamy od utworzenia wystąpienia obiektu Excel.Application; gdy mamy go już na podorędziu, za pomocą metody Open otwieramy plik C:\Scripts\Test.xls:

Set objWorkbook = objExcel.Workbooks.Open("C:\Scripts\Test.xls")
Uwaga: Jak zapewne zauważyliście, nie ustawiamy tu właściwości Visible na True. To dlatego, że po prostu nie widzimy potrzeby, żeby uwidaczniać obiekt Excel. Podczas pobierania informacji z podsumowania nie musimy widzieć niczego w oknie. Jeżeli jednak koniecznie chcemy oglądać nasze czary-mary, to proszę bardzo, użyjcie tylko polecenia objExcel.Visible = True w drugim wierszu.

Gdy arkusz jest już otwarty, ustawiamy pętlę For Each, przechodzącą przez wszystkie właściwości niestandardowe, które zostały dodane do strony podsumowania. Dobre pytanie – czym jest strona podsumowania? Znajdziecie ją, gdy klikniecie prawym przyciskiem myszki na plik .XLS i wybierzecie polecenie Właściwości:

W dzisiejszym artykule zajmujemy się tylko właściwościami niestandardowymi.

Ustawiamy teraz pętlę For Each, która przechodzi przez wszystkie wartości w kolekcji CustomDocumentProperties. Dla każdej właściwości niestandardowej dodanej do dokumentu używamy następującego wiersza kodu w celu uzyskania informacji zwrotnej na temat właściwości Name oraz Value:

Wscript.Echo strProperty.Name & " – " & strProperty.Value

Teraz wywołujemy metodę Quit, która kończy zarówno pracę wystąpienia Excel, jak i cały skrypt.

Myślicie, że ten skrypt dałby nam tytuł mistrza Skrypciarskiej Olimpiady?

Macie rację, mogliśmy się bardziej postarać. Powyższy skrypt pobiera wartości niestandardowych wszystkich właściwości dodanych do pliku .XLS. (Uwaga: Oczywiście zadziała on również dla pliku .XLSX, czyli w programie Excel 2007). Co zrobić, jeżeli potrzebna Wam wartość tylko jednej właściwości? Jeżeli znacie jej nazwę, to za pomocą poniższego kodu możecie pobrać wartość tej jednej właściwości. Poniższy skrypt przywołuje echo wartości niestandardowej o nazwie TestProperty (i tylko tej wartości):

Set objExcel = CreateObject("Excel.Application")

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



Wscript.Echo objWorkbook.CustomDocumentProperties("TestProperty")



objExcel.Quit

Jak widać gołym okiem w tym skrypcie nie korzystamy z pętli For Each, która przechodzi nam przez wszystkie właściwości niestandardowe dodane do pliku. Zamiast tego używamy następującego wiersza kodu, który przywołuje nam echo właściwości TestProperty:

Wscript.Echo objWorkbook.CustomDocumentProperties("TestProperty")

Super, nie? Oprócz pobierana jakiejś wartości możemy także modyfikować wartość danej właściwości. Następujący skrypt zmienia wartość właściwości TestProperty:

Set objExcel = CreateObject("Excel.Application")

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



objWorkbook.CustomDocumentProperties("TestProperty").Value = "My updated value."



objWorkbook.Save

objExcel.Quit

Robimy tu dwie rzeczy. Po pierwsze przypisujemy nową wartość właściwości Value naszej właściwości (spróbujcie to powtórzyć ze trzy razy pod rząd!).

objWorkbook.CustomDocumentProperties("TestProperty").Value = "My updated value."

Następnie, z uwagi na to, że dokonaliśmy zmian w pliku, musimy skorzystać z metody Save w celu zapisania zmian w arkuszu przed zamknięciem go:

objWorkbook.Save

Powinno wystarczyć i to ze sporym naddatkiem UR! Co do moich planów rozwodowych z firmą Microsoft, to są coraz bardziej realne, bo z dnia na dzień przybywa nagród w naszej Skrypciarskiej Olimpiadzie Zimowej i coraz bardziej zaczyna działać mi na nerwy niemożność ich zdobycia…

Uwaga: Ostatnimi czasy szerzą się plotki, że w edycji 2009 nagrodą główną będzie serwis Yahoo (ale to tak tylko między nami). Na razie jesteśmy w 100 proc. pewni, że można otrzymać laleczkę Dra Scripto, czyli chyba lepiej niż Yahoo, nie?
 Do początku strony Do początku strony

Centrum Skryptów - Microsoft Office