5 min czytaniaInżynieria

Jak skracać adresy URL w Excelu: cztery działające sposoby

Formuła WEBSERVICE w Excelu nie potrafi wysyłać żądań POST, więc skracanie linków wymaga Office Scripts, Power Automate albo importu zbiorczego. Który sposób pasuje do częstotliwości działania arkusza.

Marius Voß
DevRel · edge infra
Jak skracać adresy URL w Excelu: formuła WEBSERVICE ograniczona do żądań GET obok sposobów z Office Scripts i Power Automate, które mogą wysyłać żądania POST

Excel nie może skrócić adresu URL za pomocą formuły. WEBSERVICE wysyła żądanie GET bez nagłówków i treści, a nowoczesne API skracacza wymaga żądania POST z nagłówkiem Authorization i formatem JSON. Do tego działa tylko w systemie Windows. Każdy poradnik oparty na formule, który znajdziesz, korzysta z usługi przyjmującej długi adres URL jako parametr zapytania, a te usługi już nie działają.

Prawdziwe pytanie brzmi więc: który z trzech działających sposobów pasuje do Twojego arkusza - Office Script, przepływ Power Automate czy import zbiorczy z kopiowaniem i wklejaniem? Odpowiedź zależy niemal wyłącznie od tego, jak często arkusz musi działać.

Cztery sposoby dodawania krótkich linków do arkusza Excela i ograniczenie każdego z nich: formuła WEBSERVICE, Office Scripts, akcja HTTP Power Automate i import zbiorczy

Sposób pierwszy: Office Script

Office Scripts uruchamiają kod TypeScript dla skoroszytu i mogą wywoływać zewnętrzne API za pomocą fetch. To sposób dla arkusza, który otwierasz i uruchamiasz ręcznie.

async function main(workbook: ExcelScript.Workbook) {
  const sheet = workbook.getActiveWorksheet();
  const rows = sheet.getUsedRange().getValues();

  for (let i = 1; i < rows.length; i++) {
    const destination = String(rows[i][0]);
    if (!destination || rows[i][1]) continue; // skip blanks and already-done rows

    const response = await fetch("https://api.elido.app/v1/links", {
      method: "POST",
      headers: {
        Authorization:
          "Bearer " + workbook.getWorksheet("Config").getRange("B1").getText(),
        "Content-Type": "application/json",
        "Idempotency-Key": destination, // stable per row, so a re-run creates nothing
      },
      body: JSON.stringify({ destination_url: destination }),
    });

    const link = (await response.json()) as { short_url: string };
    sheet.getCell(i, 1).setValue(link.short_url);
  }
}

Są trzy ograniczenia, które ujawniają się po kolei.

Najważniejsze: zewnętrzne wywołania fetch działają, gdy skrypt uruchamia się w Excelu, i nie działają, gdy uruchamia je Power Automate. Skrypt, który działa bez zarzutu z karty Automatyzuj, kończy się błędem fetch is not defined, gdy tylko wywoła go przepływ, a ta niespodzianka kosztowała już wiele osób całe popołudnie.

Nie ma magazynu sekretów ani przepływu OAuth, więc klucz znajduje się w skrypcie albo w komórce. Odczytywanie go z arkusza Config, jak wyżej, jest nieco lepsze, bo skrypt można udostępnić bez klucza, ale sam skoroszyt staje się teraz danymi uwierzytelniającymi.

Docelowe API musi też zezwalać na wywołanie z originu skryptu. Dokumentacja Office Scripts opisuje wymaganie CORS dotyczące zasobów zewnętrznych, które spełnia większość publicznych API, ale niektóre wewnętrzne już nie.

To wiersz if (rows[i][1]) continue, dzięki któremu skrypt można bezpiecznie uruchomić dwa razy: wiersze, które mają już krótki link, są pomijane, a klucz idempotencji zabezpiecza pozostałe.

Sposób drugi: przepływ Power Automate

W przypadku wszystkiego, co ma działać według harmonogramu, uczciwą odpowiedzią jest przepływ, ponieważ uruchamia się niezależnie od tego, czy ktoś ma otwarty skoroszyt.

Schemat wygląda tak: wyzwalacz cykliczny albo wyzwalacz pliku, List rows present in a table z konektora Excel, pętla apply-to-each z akcją HTTP wysyłającą żądanie POST do endpointu linków, a następnie Update a row, które zapisuje krótki link z powrotem.

Przed zbudowaniem przepływu trzeba wiedzieć dwie rzeczy. Ogólna akcja HTTP jest płatnym konektorem, więc ten sposób zależy od Twojej licencji, a nie od umiejętności. Przepływ może przechowywać klucz API w bezpiecznym wejściu albo pobierać go z Azure Key Vault, co jest prawdziwą poprawą względem Office Script: dane uwierzytelniające przestają mieszkać w pliku, który ludzie przesyłają sobie pocztą elektroniczną.

Jeśli przepływ będzie przetwarzać setki wierszy, ustaw limit współbieżności dla pętli apply-to-each. Domyślne rozgałęzienie jest na tyle szerokie, że może wywołać limit szybkości API, a rozwiązaniem jest jedno ustawienie, nie przeprojektowanie całości.

Sposób trzeci: eksport, import zbiorczy, wklejenie z powrotem

Próba skracania linków za pomocą formuły Excela w porównaniu z potokiem skryptowym, zestawiająca WEBSERVICE ograniczone do GET z prawdziwym żądaniem POST z nagłówkami i idempotencją

W przypadku jednorazowego zadania ten sposób wygrywa z oboma powyższymi pod względem czasu do ukończenia. Wyeksportuj kolumnę z miejscami docelowymi do CSV, przepuść ją przez import zbiorczy skracacza, pobierz wynik i wklej krótkie linki obok oryginałów.

Bez płatnego konektora, bez klucza w skoroszycie, bez skryptu do utrzymania. Przewodnik po imporcie zbiorczym z Google Sheets opisuje format pliku, który jest taki sam niezależnie od tego, jaki arkusz go utworzył, a zbiorcze generowanie kodów QR omawia wariant, w którym każdy wiersz potrzebuje także kodu do wydrukowania.

Zasada wyboru jest prosta. Raz - kopiowanie i wklejanie. W każdy poniedziałek - przepływ. Przy każdym otwarciu skoroszytu - Office Script.

Chcesz najpierw wypróbować sposób z wklejaniem? Utwórz konto w bezpłatnym planie, zaimportuj pięciowierszowy plik CSV i sprawdź, czy w ogóle warto budować automatyzację.

Dlaczego formuła nadal byłaby niewłaściwa

Załóżmy, że WEBSERVICE mogłoby wysyłać żądania POST. Nadal byłoby niewłaściwym narzędziem, ponieważ formuły przeliczają się według harmonogramu Excela, a nie Twojego. Otwórz skoroszyt, a każdy wiersz ponownie wyśle swoje żądanie. Bez klucza idempotencji utworzy to duplikat linku dla każdego wiersza przy każdym otwarciu, a z nim będzie tylko serią niepotrzebnego ruchu, który zużywa limit szybkości.

Wszystko, co tworzy zasób, powinno należeć do kodu uruchamianego wtedy, gdy mu każesz, a nie do komórki przeliczającej się, kiedy aplikacja ma na to ochotę. Warto zapamiętać tę zasadę także poza tym przypadkiem: z tego samego powodu ludzie mają problemy, gdy umieszczają RAND() albo NOW() w arkuszu zasilającym raport.

Wprowadzanie wyniku z powrotem do arkusza

Niezależnie od wybranego sposobu zapisuj cztery kolumny, nie dwie: oryginalny adres URL, krótki link, slug oraz status albo komunikat o błędzie. Wtedy przerwane w połowie działanie jest oczywiste i można je ponownie uruchomić, zamiast mieć kolumnę z cichymi brakami.

Zachowaj plik. Gdy za trzy miesiące ktoś zapyta, który link trafił do której wiadomości, arkusz będzie odpowiedzią, a odtwarzanie go z dashboardu zajmie więcej pracy niż zachowanie. Jeśli obok tych linków potrzebujesz danych o kliknięciach, artykuł jak śledzić kliknięcia linków opisuje stronę eksportu.

Przeczytaj serię artykułów filarowych

Ten artykuł należy do klastra engineering. Zacznij od bezpłatnego przewodnika po API skracacza URL, który opisuje kształt żądania, a następnie przeczytaj limity szybkości i idempotencję, aby prawidłowo działać w pętli. Wersję tego samego zadania w PowerShellu znajdziesz w artykule jak skrócić adres URL w PowerShellu.

Powiązane na blogu

Najczęściej zadawane pytania

Czy mogę skrócić adres URL za pomocą formuły Excela?

Nie w przypadku nowoczesnego API skracacza. WEBSERVICE wysyła żądanie GET bez nagłówków, więc nie może się uwierzytelnić ani wysłać treści JSON, a do tego działa tylko w systemie Windows. Każdy poradnik pokazujący skracacz oparty na formule korzysta ze starej usługi, która przyjmowała długi adres URL jako parametr zapytania.

Jak więc skracać adresy URL w Excelu?

Działają trzy sposoby: Office Script z fetch do jednorazowego uruchomienia wewnątrz aplikacji, przepływ Power Automate z akcją HTTP dla zadań zaplanowanych albo eksport kolumny do CSV i import zbiorczy. Wybierz sposób według tego, jak często arkusz musi działać, a nie według tego, który wygląda najsprytniej.

Dlaczego fetch nie działa w moim Office Script, gdy uruchamia go Power Automate?

Ponieważ zewnętrzne wywołania fetch są dostępne tylko wtedy, gdy skrypt działa w samym Excelu, a nie w środowisku uruchomieniowym Power Automate. Skrypt działający z karty Automatyzuj w aplikacji kończy się błędem fetch is not defined, gdy wywołuje go przepływ, i właśnie to najczęściej zaskakuje użytkowników.

Czy Office Scripts obsługuje OAuth albo przechowywanie sekretów?

Nie. Nie ma tu przepływu logowania ani magazynu sekretów, więc klucz trzeba wpisać na stałe do skryptu albo odczytywać z komórki. Traktuj każdy skoroszyt zawierający taki skrypt jak dane uwierzytelniające: nie udostępniaj go szeroko i używaj klucza ograniczonego do tworzenia linków.

Jak uniknąć tworzenia duplikatów linków przy każdym ponownym przeliczeniu arkusza?

Wysyłaj klucz idempotencji wyprowadzony z docelowego adresu URL, aby ponowne żądanie zwracało istniejący link zamiast tworzyć nowy. To także powód, dla którego formuła byłaby niewłaściwym narzędziem nawet wtedy, gdyby mogła wysyłać żądania POST: formuły przeliczają się według własnego harmonogramu i za każdym razem tworzyłyby linki.

Jaki jest najszybszy sposób na jednorazowe skrócenie kilkuset wierszy?

Wyeksportuj kolumnę do CSV i użyj importu zbiorczego skracacza, a następnie wklej zwrócone krótkie linki obok oryginałów. Bez kodu, bez płatnego konektora i w kilka minut. Automatyzuj tylko wtedy, gdy to samo zadanie powtarza się według harmonogramu.

Wypróbuj Elido

Wklej URL, otrzymaj krótki link

Bez rejestracji. Link działa 30 dni. Zarejestruj się, aby zachować go na zawsze.

Za darmo, bez rejestracji · 2 dziennie

Wypróbuj Elido

Skracarka URL hostowana w UE: własne domeny, głęboka analityka i otwarte API. Darmowy plan - bez karty kredytowej.

Tagi
how to shorten urls in excel
excel url shortener
webservice function excel
office scripts fetch api
power automate http request
bulk shorten urls spreadsheet

Czytaj dalej