Centrum skryptów - Microsoft Office

Jak eksportuje się tabelę HTA do 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 eksportuje się tabelę HTA do programu Excel?

Cześć Skrypciarze! Pytanie

Cześć, Skrypciarze! W jaki sposób dodać do aplikacji HTA przycisk, umożliwiający wyeksportowanie tabeli HTML do programu Excel?

-- DW

Cześć Skrypciarze! Odpowiedź

Cześć, DW. Zapewne bardzo interesuje Cię, co Skrypciarze robili wczorajszego wieczoru. Aby zaspokoić tę ciekawość donoszę, że niektórzy z nich stwierdzili, iż skoro zbliża się konferencja TechEd 2007, najwyższy czas pójść do fryzjera (co prawda podczas drogi zastanawiali się, czy aby lepszą inwestycją nie byłoby udanie się do chirurga plastycznego). Ale mniejsza o fryzjera. Co zaintrygowało piszącego ten zawiły wywód to napis, jaki zastał na szybie jednej z restauracji:

SOUP-FREE

Tu nastąpiła swego rodzaju refleksja lingwistyczna. Czy chodzi o to, że zupa jest gratis, czy też o to, że w owej restauracji nie podaje się zup w żadnej formie (ostatnio w chińskiej restauracji kelnerka zaserwowała nam ryż z kurczakiem na płaskim talerzu i wmawiała, że to jest właśnie zupa)? To oznaczałoby, że osoby, które cierpią na fobię przed zupami (po owej przygodzie do tych osób zalicza się również i autor) mogą czuć się w stu procentach bezpiecznie.

Zatem jeżeli i Wy cierpicie na fobię przed zupami, zapewniamy, że i u Skrypciarzy możecie czuć się w stu procentach bezpiecznie. Nie będzie już ani słowa o zupie, będzie ich natomiast dość wiele o eksportowaniu tabel HTML do programu Excel. Najprostszym (i najbardziej odkrywczym) rozwiązaniem zdaje się być skopiowanie i wklejenie jej do programu Excel. Robi się to w sposób następujący:

<Script Language="VBScript">

    Sub RunScript

        strCopy = MyTable.InnerHTML

        document.parentwindow.clipboardData.SetData "text", strCopy



        Set objExcel = CreateObject("Excel.Application")

        objExcel.Visible = True

    

        Set objWorkbook = objExcel.Workbooks.Add()

        Set objWorksheet = objWorkbook.Worksheets(1)

        objWorksheet.Paste

    End Sub

</Script>

<body>

    <span id=MyTable>

        <table border="1" width="100%" id="table1">

    <tr>

<td>Cell 1</td>

<td>Cell 2</td>

<td>Cell 3</td>

    </tr>

    <tr>

<td>Cell 4</td>

<td>Cell 5</td>

<td>Cell 6</td>

    </tr>

    <tr>

<td>Cell 7</td>

<td>Cell 8</td>

<td>Cell 9</td>

    </tr>

        </table>

    </span>

    <br />

    <input id=runbutton type="button" value="Run Button" onClick="RunScript" />

</body>

Mamy tu następującą tabelę HTA:

Jak widać, większość aplikacji HTA zajmuje właśnie tabela, w tym przypadku dziewięciokomórkowa (3 wiersze na 3 kolumny) . Zgodnie z tym, co przeczytaliśmy w e-mailu DW, umieściliśmy te tabelę wewnątrz znacznika <SPAN> z identyfikatorem MyTable. Oto kod, dzięki któremu można utworzyć <SPAN> i który tworzy tabelę:

<span id=MyTable>

    <table border="1" width="100%" id="table1">

Dla tych, którzy jeszcze nie są dobrze zaznajomieni z nowymi znacznikami HTML, <SPAN> to po prostu nazwany obszar danego dokumentu. Dany obszar można najpierw zdefiniować, a potem umieścić w nim co nam się żywnie podoba (w tym wypadku jest to tabela). Najlepsze jest to, że jeżeli tylko nadamy danej jednostce <SPAN> identyfikator (ID), możemy ją dowolnie modyfikować programistycznie. Może to oznaczać np. zmiany dynamiczne w danej sekcji aplikacji HTA. Lub, jak tutaj, po prostu pobranie informacji zapisanych w danej jednostce <SPAN>.

Zatem w aplikacji HTA mamy tabelę oraz mechanizm umożliwiający jej zaznaczenie i pracę z nią.

Wewnątrz aplikacji HTA pozostał jeszcze jeden element, mianowicie przycisk o nazwie RedButton, który po kliknięciu uruchamia podprogram o nazwie RunScript:

<input id=runbutton type="button" value="Run Button" onClick="RunScript">

Jak zapewne nietrudno się domyślić, RunScript to podprogram, który pobiera kopię tabeli i w cudowny sposób kopiuje ją do arkusza programu Excel. W jaki to cudowny sposób dokonuje tego dzieła? Zaraz spróbujemy wyjaśnić.

Najpierw łączymy się z jednostką <SPAN> MyTable i przypisujemy wartość właściwości InnerHTML l do zmiennej strCopy,korzystając z poniższego wiersza kodu:

strCopy = MyTable.InnerHTML

Czym jest właściwość InnerHTML? Ująwszy to najprościej, to wszystko, co mieści się pomiędzy znacznikiem początkowym <SPAN> a końcowym </SPAN> i zawiera zarówno dane z tabeli, jak i znaczniki HTML użyte do utworzenia i sformatowania tabeli. Innymi słowy, mamy teraz wszystkie potrzebne nam informacje do odtworzenia tabeli przechowywanej w zmiennej strCopy. Potem, aby skopiować wszystko do schowka, używamy już tylko poniższego wiersza kodu:

document.parentwindow.clipboardData.SetData "text", strCopy

Używamy do tego metody SetData, która należy do obiektu clipboardData. Tym samym przekazujemy dodatkowo metodzie SetData 2 parametry:

  • "text" - wskazujący typ danych kopiowanych do schowka,
  • strCopy - dane, które chcemy skopiować do schowka.

Jak się zapewne domyśliliście, po wywołaniu SetData nasza tabela zostanie skopiowana do schowka, możemy ją więc wkleić do programu Excel. W tym celu tworzymy wpierw wystąpienie obiektu Excel.Application, po czym ustawiamy jego właściwość Visible na True, dzięki czemu będziemy mieli okno programu Excel widoczne na ekranie:

Set objExcel = CreateObject("Excel.Application")

objExcel.Visible = True

Następnie używając tego wystąpienia programu Excel, tworzymy nowy zeszyt i łączymy się z jego pierwszym arkuszem:

Set objWorkbook = objExcel.Workbooks.Add()

Set objWorksheet = objWorkbook.Worksheets(1)

Wklejamy oczywiście wywołując metodę Paste:

objWorksheet.Paste

Uważamy, że jest to zagadnienie o wiele mniej skomplikowane niż kwestia wspomnianej zupy. Zobaczcie sami:

Mamy nadzieję, że nasza odpowiedź jest wyczerpująca.

Prawdę powiedziawszy to dziecinnie proste, trzeba się tylko trochę wyćwiczyć. I od teraz już samemu, ponieważ na nas czeka już kolejne zajmujące zagadnienie naszej skrypciarskiej serii, mianowicie:

SCRIPT-FREE

Czy oznacza to, że skrypty są serwowane Wam zupełnie za darmo, czy też, wprost przeciwnie, że pod karą grzywny staramy się nie wspominać ani słowem o skryptach? Fascynujące pytanie… Chociaż coraz trudniej nam znaleźć tu miejsce na skrypty, nie mówiąc już o zupach, fryzurach, itp.

 Do początku strony Do początku strony

Centrum skryptów - Microsoft Office