Top
Photo by Towfiqu barbhuiya on Unsplash

Odblokowywanie i blokowanie pliku Excel używając Office Script


Ostatnio próbowałem używać Power Automate do zapisywania danych w arkuszu kalkulacyjnym Excela, gdy zorientowałem się, że plik jest chroniony hasłem. Próbowałem znaleźć jakąkolwiek akcję, która pozwoliłaby mi go odblokować, ale niestety nie udało mi się to. Po dłuższych poszukiwaniach zdałem sobie sprawę, że można to zrobić za pomocą potęgi Office Scripts!

Jak używać Office Script

Gdy jesteś w dokumencie Excel Online (lub aplikacji na pulpicie), przejdź do karty „Automatyzacja” (Automate):

Create an office script in Excel

Bezpośrednio stamtąd możesz użyć opcji „NRecord Actions” lub napisać „New Script” samodzielnie. Dowiedz się więcej o pisaniu Office Scripts tutaj.

Odblokowanie pliku Excel

Istnieją dwie możliwe metody odblokowania pliku Excel, w zależności od scenariusza:

  1. Unprotect – aby wyłączyć zabezpieczenia (źródło);
  2. Pause protection – aby tymczasowo wyłączyć zabezpieczenia, tylko dla bieżącej sesji (źródło 1, źródło 2).

Uwaga: Jeśli planujesz odblokować plik Excel, aby później można było użyć akcji w Power Automate do manipulowania nim, jedyną opcją jest jego trwałe odblokowanie (unprotect). Jeśli jednak planujesz uruchomić większy skrypt Office, gdzie wyłączenie zabezpieczeń to tylko jeden z kroków, lepszą opcją jest jedynie wstrzymanie zabezpieczeń.

Kod do odblokowania arkusza (i skoroszytu) wygląda następująco:

function main(workbook: ExcelScript.Workbook, password: string) {
    workbook.getProtection().unprotect(password);

    workbook.getWorksheets().forEach(sheet => {
        sheet.getProtection().unprotect(password);
    });
}

Jak widać, skrypt najpierw odblokowuje skoroszyt, a następnie przechodzi przez dostępne arkusze, aby wyłączyć zabezpieczenia dla każdego z nich. Oczywiście możesz chcieć odblokować tylko bieżący arkusz, na przykład, wybierając go za pomocą jego nazwy:

 let currentSheet = workbook.getWorksheet("{WORKSHEET NAME}");

Blokowanie pliku Excel

Aby zablokować plik, musisz wywołać odpowiednią funkcję „lock”, która albo zabezpiecza skoroszyt (źródło), albo wznawia ochronę (źródło). Kod do zabezpieczenia skoroszytu, a następnie każdego arkusza osobno, wygląda następująco:

function main(workbook: ExcelScript.Workbook, password: string) {
    workbook.getProtection().protect(password);

    workbook.getWorksheets().forEach(sheet => {
        sheet.getProtection().protect({
            allowAutoFilter: true,
            allowSort: true,
            allowFormatCells: true, 
            selectionMode: ExcelScript.ProtectionSelectionMode.normal
        }, password);
    });
}

Zwróć uwagę na opcje! Pierwszy parametr funkcji definiuje zakres ochrony i uprawnienia użytkowników:

Available options when protecting a worksheet.

Wszystkie opcje muszą być przekazane jako prawidłowy JSON. Dostępna lista opcji znajduje się tutaj.

Użycie w Power Automate

Ostatnią częścią jest integracja z Power Automate. Zapisz skrypty, dodaj je do skoroszytu (aby wszyscy posiadający uprawnienia do skoroszytu mogli również ich używać):

Add an office script to a workbook.

A następnie użyj akcji „Uruchom skrypt” (lub innej, w zależności od tego, gdzie jest on przechowywany), aby go wykonać:

Run office script from Power Automate

Dowiedz się więcej o integrowaniu Office Scripts z Power Automate tutaj.

I to wszystko! Mam nadzieję, że to ci pomoże! 🙂


Tomasz Poszytek

Cześć! Nazywam się Tomasz. Jestem ekspertem w dziedzinie automatyzacji procesów i budowaniu rozwiązań dla biznesu z użyciem Power Platform. Jestem Microsoft MVP i Nintex vTE.

Brak komentarzy

Wyślij komentarz

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.