Excel не може скоротити URL за допомогою формули. WEBSERVICE надсилає GET-запит без заголовків і тіла, а сучасному API сервісу скорочення потрібен POST-запит із заголовком Authorization і JSON. До того ж ця функція працює лише у Windows. Кожен посібник зі скорочення на основі формули, який ви знайдете, побудований на сервісі, що приймав довгий URL як параметр запиту, а таких сервісів більше немає.
Отже, справжнє питання полягає в тому, який із трьох робочих способів підходить вашій таблиці: Office Script, потік Power Automate чи масовий імпорт із копіюванням і вставленням. Відповідь майже повністю залежить від того, як часто потрібно запускати таблицю.
Спосіб 1: Office Script
Office Scripts виконують TypeScript для книги та можуть викликати зовнішній API за допомогою fetch. Це спосіб для таблиці, яку ви відкриваєте й запускаєте вручну.
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);
}
}
Ось три обмеження, які послідовно даються взнаки.
Найважливіше: зовнішні виклики fetch працюють, коли скрипт запускається в Excel, і не працюють, коли його запускає Power Automate. Скрипт, який чудово працює з вкладки Automate, завершується помилкою fetch is not defined, щойно його запускає потік, і через цю несподіванку багато хто втратив цілий день.
Сховища секретів і потоку OAuth немає, тому ключ зберігається у скрипті або клітинці. Читати його з аркуша Config, як вище, трохи краще, бо скрипт можна поширити без ключа, але сама книга тепер є обліковими даними.
Цільовий API також має дозволяти виклик із джерела скрипту. У документації Office Scripts зазначено вимогу CORS для зовнішніх ресурсів, якій відповідає більшість публічних API, але не деякі внутрішні.
Рядок if (rows[i][1]) continue робить скрипт безпечним для повторного запуску: рядки, у яких уже є коротке посилання, пропускаються, а ключ ідемпотентності захищає решту.
Спосіб 2: потік Power Automate
Для всього, що виконується за розкладом, потік є чесною відповіддю, адже він працює незалежно від того, чи відкрив хтось книгу.
Схема така: повторюваний запуск або тригер файлу, List rows present in a table із конектора Excel, цикл apply-to-each із дією HTTP, яка надсилає POST-запит до кінцевої точки посилань, а потім Update a row, що записує коротке посилання назад.
Перед створенням потоку потрібно знати дві речі. Загальна дія HTTP є платним конектором, тому цей спосіб залежить від вашої ліцензії, а не від навичок. Потік може зберігати ключ API у захищеному вводі або отримувати його з Azure Key Vault, і це справжнє покращення порівняно з Office Script: облікові дані більше не живуть у файлі, який люди надсилають одне одному.
Якщо потік оброблятиме сотні рядків, додайте обмеження паралельності для apply-to-each. Стандартне розгалуження достатньо широке, щоб спровокувати перевищення ліміту API, а виправленням буде одне налаштування, а не перебудова.
Спосіб 3: експорт, масовий імпорт, вставлення назад
Для одноразового завдання цей спосіб швидший за обидва попередні за часом до готового результату. Експортуйте стовпець із призначеннями у CSV, пропустіть його через масовий імпорт сервісу скорочення, завантажте результат і вставте короткі посилання поруч з оригіналами.
Без платного конектора, ключа в книзі чи скрипту, який потрібно підтримувати. Посібник із масового імпорту з Google Sheets описує формат файлу, однаковий незалежно від таблиці, з якої його створено, а масова генерація QR-кодів охоплює варіант, де кожному рядку також потрібен код для друку.
Правило вибору просте. Один раз - вставлення. Щопонеділка - потік. Кожного разу, коли хтось відкриває книгу, - Office Script.
Хочете спочатку спробувати спосіб із вставленням? Створіть обліковий запис на безкоштовному плані, імпортуйте CSV із п'ятьма рядками й перевірте, чи варта автоматизація зусиль на її створення.
Чому формула все одно була б неправильним рішенням
Припустімо, WEBSERVICE міг би виконувати POST-запити. Це все одно був би неправильний інструмент, бо формули перераховуються за розкладом Excel, а не за вашим. Відкрийте книгу - і кожен рядок знову надсилає свій запит. Без ключа ідемпотентності це створює дублікат посилання для кожного рядка під час кожного відкриття; з ключем це лише потік безглуздого трафіку, який витрачає ваш ліміт запитів.
Усе, що створює ресурс, має належати коду, який запускається за вашою командою, а не клітинці, що перераховується, коли застосунок цього захотів. Це варто усвідомити й поза межами цього випадку: з тієї самої причини люди зазнають проблем, додаючи RAND() або NOW() до таблиці, яка живить звіт.
Як повернути результат у таблицю
Який би спосіб ви не обрали, створіть чотири стовпці, а не два: початковий URL, коротке посилання, слаг і статус або повідомлення про помилку. Тоді частково завершений запуск буде очевидним і його можна буде повторити, а не отримати стовпець із непомітними пропусками.
Збережіть файл. Коли через три місяці хтось запитає, яке посилання потрапило до якого листа, відповідь буде в таблиці, а відновлювати її з дашборду складніше, ніж просто зберегти. Якщо для цих самих посилань потрібні дані про кліки, як відстежувати кліки за посиланнями описує експорт.
Читайте основну серію
Ця стаття входить до інженерного кластера. Почніть із посібника з безкоштовного API сервісу скорочення URL, щоб ознайомитися з форматом запиту, а потім прочитайте про ліміти запитів та ідемпотентність, щоб коректно працювати в циклі. Версію того самого завдання з CSV для PowerShell дивіться у статті як скоротити URL у PowerShell.
Пов'язані статті в блозі
Поширені запитання
Чи можна скоротити URL за допомогою формули Excel?
Не за допомогою сучасного API сервісу скорочення. WEBSERVICE надсилає GET-запит без заголовків, тому не може автентифікуватися або надіслати тіло JSON, і працює лише у Windows. Будь-який посібник зі скорочення на основі формули використовує старий сервіс, який приймав довгий URL як параметр запиту. Таких сервісів більше немає.
Як тоді скорочувати URL в Excel?
Працюють три способи: Office Script із fetch для одноразового запуску всередині застосунку, потік Power Automate з дією HTTP для всього запланованого або експорт стовпця в CSV із подальшим масовим імпортом. Обирайте за частотою запуску таблиці, а не за тим, що виглядає найхитромудріше.
Чому fetch не працює в моєму Office Script, коли його запускає Power Automate?
Тому що зовнішні виклики fetch недоступні в середовищі виконання Power Automate, а працюють лише коли скрипт запускається безпосередньо в Excel. Скрипт, який чудово працює з вкладки Automate у застосунку, завершується помилкою fetch is not defined, щойно його запускає потік, і це найпоширеніший несподіваний нюанс цього способу.
Чи підтримує Office Scripts OAuth або сховище секретів?
Ні. Тут немає потоку входу чи сховища секретів, тому ключ доводиться жорстко вбудовувати у скрипт або читати з клітинки. Вважайте будь-яку книгу зі скриптом обліковими даними: не поширюйте її без потреби та використовуйте ключ, обмежений створенням посилань.
Як уникнути створення дублікатів посилань під час кожного перерахунку таблиці?
Надсилайте ключ ідемпотентності, похідний від URL призначення, щоб повторний запит повертав наявне посилання, а не створював нове. Саме тому формула була б неправильним інструментом, навіть якби могла виконувати POST-запити: формули перераховуються за власним розкладом і щоразу створювали б посилання.
Як найшвидше один раз скоротити кілька сотень рядків?
Експортуйте стовпець у CSV і скористайтеся масовим імпортом сервісу скорочення, а потім вставте отримані короткі посилання поруч з оригіналами. Без коду, платного конектора, і це займає кілька хвилин. Автоматизуйте лише тоді, коли те саме завдання повторюється за розкладом.
Спробуйте Elido
Вставте URL - отримайте коротке посилання
Без реєстрації. Посилання живе 30 днів. Зареєструйтесь, щоб зберегти назавжди.
Безкоштовно, без реєстрації · 2 на день