Как указать весь лист как диапазон в Google Sheets?

27

Лучший обходной путь, который я нашел до сих пор:

worksheet_name!$A$1:$YY

но в идеале я хотел бы иметь возможность просто написать, например:

worksheet_name!

Итак, кто-нибудь знает: есть ли синтаксис для определения целого листа в качестве диапазона?

sampablokuper
источник

Ответы:

10

Я создал небольшой фрагмент Google Apps Script (GAS), чтобы сделать эту работу за вас.

Код

function sheetRange(targetName,int) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var asName = ss.getActiveSheet().getSheetName();
  var tgSheet = ss.getSheetByName(targetName);
  var output;

  if(targetName == asName) {
    output = "Error: target sheet is active sheet !!";
  } else {
    switch(int) {
      case 1: 
        output = tgSheet.getDataRange().getValues();
        break;
      case 2:
        output = tgSheet.getSheetValues(1, 1, tgSheet.getMaxRows(),  
          tgSheet.getMaxColumns());
        break;
      default:
        output = "Choose int to be 1 or 2 !!";
    }
  }
  return output;
}

В меню электронной таблицы выберите «Инструменты»> «Редактор сценариев» и добавьте код. Убедитесь, что нажали кнопку ошибки:
введите описание изображения здесь

использование

=sheetRange("sheetName",int)

Используйте intопцию, как описано в примечаниях.

пример

Я создал файл примера, который вы вам: Лист как диапазон

замечания

В этом случае существует два способа определения диапазона в электронной таблице с помощью GAS:

  1. int=1; С помощью getDataRangeметода. Это позволит получить диапазон, в котором последний столбец содержит данные. То же самое касается количества строк. Обычно это самый простой маршрут. Смотрите второй лист в файле примера.
  2. int=2; С помощью getSheetValuesметода. Это восстановит диапазон "WYSIWYG". Смотрите третий лист в файле примера.
  3. Частота обновления этих типов пользовательских функций не является немедленной, поэтому, пожалуйста, будьте терпеливы. Обновление данных может занять несколько часов.

Ссылки

Джейкоб Ян Туинстра
источник
Зачем этой функции показывать обновленные данные несколько часов? Я думал, что смысл использования такой функции - всегда иметь точный диапазон?
ClearCloud8
1
Решение с использованием getSheetValues ​​() на 20% быстрее, чем с помощью getDataRange () с getValues ​​(). Протестировано с листом, содержащим 38 тыс. Клеток.
Марк Витчак
11

Вы можете использовать A: Z или A: AB или A: XX (где XX - последний столбец вашей страницы):

Снимок экрана с использованием этого для применения условного форматирования к строкам на основе значения отдельной ячейки

Стефан Денк
источник
1
Ist умирает: "Денк Мал Neu"? Как это отвечает на вопрос?
Джейкоб Ян Туинстра
1
Все здесь знают, как указать диапазон. Это был не вопрос.
3

В Google Sheets нет синтаксиса диапазона для всего диапазона листов.

Следующая формула вернет адрес диапазона всего листа с именем Sheet1

="Sheet1!"&ADDRESS(1,1,,TRUE)&":"&ADDRESS(ROWS(Sheet1!A:A),COLUMNS(Sheet1!1:1),,TRUE)

Чтобы использовать это как ссылку, поместите это в НЕПОСРЕДСТВЕННО. Следующая формула вернет массив всех значений в Sheet1.

= ArrayFormula (
  КОСВЕННЫЕ (
    «Лист1!»
    & АДРЕС (1,1,, TRUE),
    & ":"
    & АДРЕС (РЯДЫ (Лист1! A: A), КОЛОННЫ (Лист1 1: 1) ,, TRUE)
    ,
    ПРАВДА
  )
)
Рубена
источник
1

Я не знаю конкретной, но я думаю, что вы можете использовать некоторые формулы, если вы не знаете количество строк / столбцов:

indirect("Sheet!1:"&countif(Sheet!A:A,"<>@")+countif(Sheet!A:A,"=@"))

Здесь Sheetваше имя листа, и @это произвольная строка. Если выбранный вами лист находится @в одной ячейке, он не будет работать. Вы можете заменить его другим символом, если когда-либо лист содержит такую ​​ячейку.

COUNITFЗдесь подсчитывает количество строк в колонке А: А , не содержащий @, который должен быть все , если нет клетки , содержащие его, и INDIRECTпреобразования Sheet!1:###(где ###это число строк) в фактический выбранный диапазон.

Джерри
источник
Я ценю эти усилия, но, насколько я могу судить, ваше предложение не дает никаких преимуществ по сравнению с обходным путем, о котором я говорил в своем вопросе, но имеет недостатки, заключающиеся в том, что он более многословен и требует от пользователя ввода символа, которого никогда не будет. в листе.
Сампаблокупер
@sampablokuper Из-за того, что это было многословно, я не думаю, что смогу найти решение для этого, что касается второй части, я упустил что-то, что теперь добавил в свой ответ. Кроме того, насколько я вижу, преимущество, которое он имеет по сравнению с вашим текущим решением, заключается в том, что вам не нужно знать, сколько строк или столбцов имеет лист. Но да, это так далеко :( Возможно, можно создать функцию из сценария VBA.
Джерри
Спасибо, но мой текущий обходной путь не требует, чтобы кто-то знал, сколько строк у листа, или сколько столбцов у него, если у него <676 столбцов.
Сампаблокупер
1

Наилучшие ответы уже были даны для тех, кто работает в приложении, но если кто-то там работает в Google Sheets, то вот подход, который может удовлетворить ваши потребности:

"worksheet_name!1:" & ROWS(worksheet_name!A:A)

Объяснение : * По сути, вы задаете диапазон через строку, которая объединяется с количеством строк в файле имя-листа!

Некоторые преимущества этого подхода : * Это 'динамический' ... если вы добавляете строки внизу, диапазон будет корректироваться соответствующим образом * Легкий вес - вы можете добавить это в функцию importrange / query

Недостатки : * Не пробовал во всех случаях, поэтому может работать только для конкретных случаев использования. * Лично я предпочитаю делать вещи динамичными / чистыми, чтобы своего рода пользовательская функция была бы хорошим промежуточным звеном между appscript и этим облегченным подходом.

JTopsalot
источник
1

Это работает для меня:

var ss = SpreadsheetApp.getActive();
var sh = ss.getSheets()[0];
var rg = sh.getName() +"!"+ sh.getDataRange().getA1Notation();

Используемый в связанном скрипте, объедините имя листа с "!" а затем получить обозначение A1 диапазона данных на выбранном листе

Метрическая Крыса
источник
0

Я смог выбрать весь лист, назвав диапазон без листа с восклицательным знаком.

У меня была вкладка с именем data. Вместо использования данных! или данные! A1: ZZ.

ajon
источник
Когда мы присваиваем имя именованному диапазону, должна быть указана ссылка на диапазон. Какой эталонный диапазон вы использовали?
Рубен
-1

Чтобы указать весь лист как диапазон, используйте:

worksheet_name!A1:ZZ

Вы можете попробовать это здесь: https://developers.google.com/sheets/api/reference/rest/v4/spreadsheets.values/clear

или если вы используете Java (чтобы очистить все в Sheet1):

Sheets service = getSheetsService(credential);
service.spreadsheets().values().clear(REPORT_WARNINGS_LATAM_FILEID, "Sheet1!A1:ZZ", new ClearValuesRequest()).execute();

или если вы хотите просто использовать его в формуле (например, SUM) на другом листе (например, Sheet2), вы можете использовать следующую ссылку:

=SUM(Sheet1!A1:ZZ)

^ это суммирует все существующие ячейки на Sheet1 и помещает значение в ячейку на Sheet2. Вы можете найти пример здесь: https://docs.google.com/spreadsheets/d/1rP3YCl3ErlYjlYGT_Q-xFvkVr7yKw6WQfHklbohL1NM/edit?usp=sharing . В этом примере у нас есть 3 столбца и 5 строк на Sheet1, поэтому эта формула = SUM (Sheet1! A1: ZZ) выбирает все из них. Вы можете добавить строки или столбцы на Sheet1, и это решение все равно выберет все ячейки.

PS: если вы проголосуете против моего ответа - объясните, пожалуйста, почему.

Максим Овсяников
источник
-2

Предполагая, что вы знаете количество строк, вы можете назвать весь лист как «имя листа»:

ШАГИ:

  1. Выберите весь лист
  2. Нажмите «Данные» -> «Именованные и защищенные диапазоны».
  3. Введите «worksheet_name», чтобы назвать выбор, и нажмите «Готово».

Теперь каждый раз, когда вы используете «worksheet_name» в функции, она будет ссылаться на весь рабочий лист.

TheJKFever
источник
4
Ваш метод приведет к диапазону «снимка». Добавление обоих столбцов или строк не изменит именованный диапазон !!
Джейкоб Ян Туинстра