Можно ли ускорить копирование данных из одних столбцов в другие в Google таблицах?

Ссылка скопирована
1 ответ

Мне нужно было получить значение последней строки столбцов K, M, N, O, V, где значение L = e и вставить в столбцы B:F после последних данных.

function copyValues(e) {   var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();   var lastRow = sheet.getLastRow();   var values = [];    for (var i = lastRow; i > 0; i--) {     if (sheet.getRange("L" + i).getValue() == e) {       var sourceRange = sheet.getRange("K" + i + ":V" + i);       values = sourceRange.getValues()[0];       break;     }   }    // Вставить значения в ячейки   var lastFill = getLastFill("B:B");   yourFunction(lastFill);   var targetRange = sheet.getRange("B" + (lastFill + 1) + ":F" + (lastFill + 1));    targetRange.setValues([[values[0], values[2], values[3], values[4], values[11]]]); }  function getLastFill(e) {   var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();   var column = sheet.getRange(e).getValues();      for (var i = column.length - 1; i >= 0; i--) {     if (column[i][0] !== "") {       return i + 1; // Возвращаем номер строки (+1 для приведения к номерации Google Таблиц)     }   } }

function copyValues(e) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var lastRow = sheet.getLastRow(); var values = []; for (var i = lastRow; i > 0; i--) { if (sheet.getRange("L" + i).getValue() == e) { var sourceRange = sheet.getRange("K" + i + ":V" + i); values = sourceRange.getValues()[0]; break; } } // Вставить значения в ячейки var lastFill = getLastFill("B:B"); yourFunction(lastFill); var targetRange = sheet.getRange("B" + (lastFill + 1) + ":F" + (lastFill + 1)); targetRange.setValues([[values[0], values[2], values[3], values[4], values[11]]]); } function getLastFill(e) { var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet(); var column = sheet.getRange(e).getValues(); for (var i = column.length - 1; i >= 0; i--) { if (column[i][0] !== "") { return i + 1; // Возвращаем номер строки (+1 для приведения к номерации Google Таблиц) } } }

Данный код работает, но выполняет запрос в течении ~7 секунд. Можно ли как-нибудь увеличить скорость?

Дополнительно:

Без примера данных даже думать лень. Будьте более эмпатичны. Просьба отладки сама по себе - нарушение правил.

Не задавайте вопросы без примера!

Зачем вы делаете все те манипуляции - не понятно. Это последствия Excel?

Занимает доли секунды

/* exported userActionCopyValues */ function userActionCopyValues() {   copyValues_('rg'); }  function copyValues_(e) {   const sheet = SpreadsheetApp.getActive().getSheetByName('Ускорить работу скрипта');   const dataRange = sheet.getDataRange();   const values = dataRange.getValues();    const lastValKMNOV = values.findLast((row) => row[11] === e);    if (!lastValKMNOV) {     console.warn(`lastValKMNOV ${lastValKMNOV}`);     return;   }    const lastIndexBF = values.findLastIndex((row) => row.slice(1, 1 + 5).join(''));    if (lastIndexBF === -1) {     console.warn(`lastIndexBF ${lastIndexBF}`);     return;   }    sheet     .getRange(lastIndexBF + 2, 2, 1, 5)     .setValues([[lastValKMNOV[10], lastValKMNOV[11], lastValKMNOV[12], lastValKMNOV[13], lastValKMNOV[21]]]); }

/* exported userActionCopyValues */ function userActionCopyValues() { copyValues_('rg'); } function copyValues_(e) { const sheet = SpreadsheetApp.getActive().getSheetByName('Ускорить работу скрипта'); const dataRange = sheet.getDataRange(); const values = dataRange.getValues(); const lastValKMNOV = values.findLast((row) => row[11] === e); if (!lastValKMNOV) { console.warn(`lastValKMNOV ${lastValKMNOV}`); return; } const lastIndexBF = values.findLastIndex((row) => row.slice(1, 1 + 5).join('')); if (lastIndexBF === -1) { console.warn(`lastIndexBF ${lastIndexBF}`); return; } sheet .getRange(lastIndexBF + 2, 2, 1, 5) .setValues([[lastValKMNOV[10], lastValKMNOV[11], lastValKMNOV[12], lastValKMNOV[13], lastValKMNOV[21]]]); }

Можно ли ускорить копирование данных из одних столбцов в другие в Google таблицах?

Пример в Таблице https://docs.google.com/spreadsheets/d/1KN2SuXbHN5...

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

Да, можно ускорить копирование данных из одних столбцов в другие в Google таблицах, используя формулы или функции. Вот несколько способов, которые могут помочь вам ускорить этот процесс:

1. Использование функции ARRAYFORMULA: Если вы хотите скопировать данные из одного столбца в другой, вы можете использовать функцию ARRAYFORMULA. Например, если у вас есть данные в столбце A и вы хотите скопировать их в столбец B, вы можете использовать следующую формулу:

=ARRAYFORMULA(A:A)

=ARRAYFORMULA(A:A)

Эта формула скопирует все данные из столбца A в столбец B автоматически.

2. Использование функции QUERY: Если вы хотите скопировать данные из нескольких столбцов в другие столбцы, вы можете использовать функцию QUERY. Например, если у вас есть данные в столбцах A и B, и вы хотите скопировать их в столбцы C и D, вы можете использовать следующую формулу:

=QUERY(A:B, "select A, B")

=QUERY(A:B, "select A, B")

Эта формула скопирует данные из столбцов A и B в столбцы C и D.

3. Использование автозаполнения: Google Таблицы также позволяют использовать автозаполнение для быстрого копирования данных. Например, если вы хотите скопировать данные из одной ячейки в другую, просто выделите ячейку с данными, затем нажмите на маленький квадрат в правом нижнем углу ячейки и перетащите его в нужное место.

4. Использование скриптов: Если вам нужно скопировать большое количество данных или выполнить сложные операции, вы можете написать скрипт на языке Google Apps Script. С помощью скриптов вы можете автоматизировать процессы копирования данных и ускорить выполнение задач.

Надеюсь, эти советы помогут вам ускорить копирование данных из одних столбцов в другие в Google таблицах. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно