Примеры таблиц
В этих примерах демонстрируются распространенные взаимодействия с таблицами Excel.
Создание отсортированных таблиц
Этот пример создает таблицу из используемого диапазона текущего листа, а затем сортирует ее по первому столбцу.
function main(workbook: ExcelScript.Workbook) {
// Get the current worksheet.
const selectedSheet = workbook.getActiveWorksheet();
// Create a table with the used cells.
const usedRange = selectedSheet.getUsedRange();
const newTable = selectedSheet.addTable(usedRange, true);
// Sort the table using the first column.
newTable.getSort().apply([{ key: 0, ascending: true }]);
}
Фильтрация таблицы
Этот пример фильтрует существующую таблицу, используя значения в одном из столбцов.
function main(workbook: ExcelScript.Workbook) {
// Get the table in the workbook named "StationTable".
const table = workbook.getTable("StationTable");
// Get the "Station" table column for the filter.
const stationColumn = table.getColumnByName("Station");
// Apply a filter to the table that will only show rows
// with a value of "Station-1" in the "Station" column.
stationColumn.getFilter().applyValuesFilter(["Station-1"]);
}
Отфильтровать одно значение
В предыдущем примере таблица фильтруется по списку включенных значений. Чтобы исключить определенное значение из таблицы, необходимо предоставить список всех остальных значений в столбце. В этом примере используется функция columnToSet
для преобразования столбца в набор уникальных значений. В этом наборе удалено исключенное значение ("Station-1").
function main(workbook: ExcelScript.Workbook) {
// Get the table in the workbook named "StationTable".
const table = workbook.getTable("StationTable");
// Get the "Station" table column for the filter.
const stationColumn = table.getColumnByName("Station");
// Get a list of unique values in the station column.
const stationSet = columnToSet(stationColumn);
// Apply a filter to the table that will only show rows
// that don't have a value of "Station-1" in the "Station" column.
stationColumn.getFilter().applyValuesFilter(stationSet.filter((value) => {
return value !== "Station-1";
}));
}
/**
* Convert a column into a set so it only contains unique values.
*/
function columnToSet(column: ExcelScript.TableColumn): string[] {
const range = column.getRangeBetweenHeaderAndTotal().getValues() as string[][];
const columnSet: string[] = [];
range.forEach((value) => {
if (!columnSet.includes(value[0])) {
columnSet.push(value[0]);
}
});
return columnSet;
}
Удалить фильтры столбцов таблицы
В этом примере фильтры удаляются из столбца таблицы на основе расположения активной ячейки. Скрипт определяет, является ли ячейка частью таблицы, определяет столбец таблицы и очищает все примененные к ней фильтры.
Скачайте table-with-filter.xlsx для готовой к использованию книги. Добавьте следующий скрипт, чтобы попробовать пример самостоятельно!
function main(workbook: ExcelScript.Workbook) {
// Get the active cell.
const cell = workbook.getActiveCell();
// Get the tables associated with that cell.
// Since tables can't overlap, this will be one table at most.
const currentTable = cell.getTables()[0];
// If there's no table on the selection, end the script.
if (!currentTable) {
console.log("The selection is not in a table.");
return;
}
// Get the table header above the current cell by referencing its column.
const entireColumn = cell.getEntireColumn();
const intersect = entireColumn.getIntersection(currentTable.getRange());
const headerCellValue = intersect.getCell(0, 0).getValue() as string;
// Get the TableColumn object matching that header.
const tableColumn = currentTable.getColumnByName(headerCellValue);
// Clear the filters on that table column.
tableColumn.getFilter().clear();
}
Перед очисткой фильтра столбцов (обратите внимание на активную ячейку)
После очистки фильтра столбцов
Совет
Дополнительные сведения о сохранении фильтра перед его очисткой (и повторном применении позже) см. в статье Перемещение строк между таблицами путем сохранения фильтров. Более сложный пример.
Динамические ссылки на табличные значения
Этот скрипт использует синтаксис @COLUMN_NAME для задания формул в столбце таблицы. Имена столбцов в таблице можно изменить, не изменяя этот скрипт.
function main(workbook: ExcelScript.Workbook) {
// Get the current worksheet.
const table = workbook.getTable("Profits");
// Get the column names for columns 2 and 3.
// Note that these are 1-based indices.
const nameOfColumn2 = table.getColumn(2).getName();
const nameOfColumn3 = table.getColumn(3).getName();
// Set the formula of the fourth column to be the product of the values found
// in that row's second and third columns.
const combinedColumn = table.getColumn(4).getRangeBetweenHeaderAndTotal();
combinedColumn.setFormula(`=[@[${nameOfColumn2}]]*[@[${nameOfColumn3}]]`);
}
Перед скриптом
Month | ЦЕНА | Проданные единицы | Всего |
---|---|---|---|
Янв | 45 | 5 | |
Фев | 45 | 3 | |
Портить | 45 | 6 |
После скрипта
Month | ЦЕНА | Проданные единицы | Всего |
---|---|---|---|
Янв | 45 | 5 | 225 |
Фев | 45 | 3 | 135 |
Портить | 45 | 6 | 270 |
Office Scripts