Диапазон сортировки в веб-браузере Excel 365 без элементов управления VBA или ленты - PullRequest
0 голосов
/ 24 марта 2020

В настоящее время я разрабатываю только электронные таблицы на стороне клиента. Они не нормальные простыни. Новая рабочая книга создается еженедельно, каждый день имеет 2 вкладки. Недавно мы перешли с Google Sheets на Office 365. У всех есть лицензия E1, для которой я создаю, у меня есть лицензия E3 без прав администратора. Скрытые различия между Sheets & Excel вызвали некоторые проблемы с перестройкой для другой платформы.

Моя проблема в том, что я создаю электронные таблицы для полутехнических неграмотных, которым для запуска базовых c функций нужны кнопка или выпадающий триггер. Я не могу позволить им сортировать диапазон, используя стандартные функции сортировки на ленте, поскольку они будут и всегда делать это неправильно, вызывая сбои в формулах. У меня все исправлено, кроме кнопки сортировки для каждой страницы.

С Sheets я использовал Scripts, который работал отлично. В Excel я не могу использовать VBA / Macros, потому что обычный пользователь имеет доступ к Excel через веб-браузер только по лицензии E1. Javascript в Excel - это либо не вариант (я пытаюсь заставить ИТ предоставить мне Office. js Автоматизировать вкладку), либо я использую Visual Basi c, который может создавать невероятно мощные функции, но я не могу ' t понять, как сделать простую функцию диапазона сортировки, указав c для одной электронной таблицы, которая будет работать, когда лист копируется и переименовывается без повторного развертывания каждую неделю.

Должно быть простое решение для автоматизации сортировки одного и того же диапазона ячеек на тех же страницах в Excel, что и Google Script, которое будет работать в браузерной версии Excel с простым триггером.

У кого-нибудь есть идеи, или я уже перечислил свои варианты? Это кажется настолько безумным, что Excel может делать так много вещей, но я не могу найти что-то столь же простое, как «кнопка сортировки для Интернета».

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Я не уверен, что понимаю ваш сквозной сценарий, но если вы хотите отсортировать диапазон, вы можете использовать range.sort API. Документ можно найти https://docs.microsoft.com/zh-cn/javascript/api/excel/excel.rangesort?view=excel-js-preview

const header = range.find(criteria, {});
header.load("rowIndex");
await context.sync();

range.sort.apply(
  [
    {
      key: header.rowIndex,
      sortOn: Excel.SortOn.value
    }
  ],
  false /*matchCase*/,
  true /*hasHeaders*/,
  Excel.SortOrientation.columns
);
await context.sync();

У нас также есть событие сортировки листа. Worksheet.onRowSorted, будет срабатывать, когда сортировка завершена. документ можно найти по адресу https://docs.microsoft.com/zh-cn/javascript/api/excel/excel.worksheet?view=excel-js-preview#onrowsorted

Вот пример кода:

await Excel.run(async (context) => {
    console.log("Adding row handler");
    const sheet = context.workbook.worksheets.getActiveWorksheet();

    // This will fire whenever a row has been moved as the result of a sort action.
    sheet.onRowSorted.add((event) => {
        return Excel.run((context) => {
            console.log("Row sorted: " + event.address);
            const sheet = context.workbook.worksheets.getActiveWorksheet();

            // Clear formatting for section, then highlight the sorted area.
            sheet.getRange("A1:E5").format.fill.clear();
            if (event.address !== "") {
                sheet.getRanges(event.address).format.fill.color = "yellow";
            }

            return context.sync();
        });
    });
});
0 голосов
/ 24 марта 2020

Если вам не нужно сортировать этот диапазон на месте, другой альтернативой будет использование сводной таблицы.

Эта сводная таблица будет ссылаться на диапазон, который вы хотите отсортировать (с полем в области строк или столбцов в зависимости от ориентации). А после сортировки конечному пользователю просто нужно будет щелкнуть правой кнопкой мыши на сводной таблице и выбрать Refre sh для таблицы, которая будет обновлена ​​с отсортированным диапазоном.

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...