У меня есть лист Google со списком (раскрывающийся список или проверка данных - список из диапазонов, как это называют Google Таблицы), например:
Представьте, что в списке у меня есть 4 значения для выбора. Моя цель — получить не только все табличные значения, но и все значения, составляющие список ["Пиво","Вино","Ром","Мартини"].
Я пробовал 2 разных способа получить информацию и список:
а) С помощью Sheets.spreadsheets.values.get я получаю значения таблицы в удобоваримой форме, но не содержимое раскрывающегося списка. Вместо этого ячейка становится пустой ("") [Комментарий: в сценарии приложений вы получите эту информацию]
б) С помощью Sheets.spreadsheets.getByDataFilter я получаю гораздо больше, чем мне нужно, и в ужасном формате. Однако я получаю выпадающее содержимое не в виде массива (как хотелось бы), а в виде ссылки: (userEnteredValue: "=Input!$F$5:$F$7")
Вопрос в том, как мне получить только таблицу, включая выпадающее содержимое в виде массива? Я знаю, что это возможно и легко сделать в скрипте Google Apps (я его реализовал), но не в Node.
Ниже код в качестве ссылки для других программистов.
var {google} = require("googleapis");
let privatekey = require("./client_secret.json");
// configure a JWT auth client
let jwtClient = new google.auth.JWT(
privatekey.client_email,
null,
privatekey.private_key,
['https://www.googleapis.com/auth/spreadsheets',
]);
//authenticate request
jwtClient.authorize(function (err, tokens) {
if (err) {
console.info(err);
return;
} else {
console.info("Successfully connected!");
}
});
//Google Sheets API
let spreadsheetId = '<SPREADSHEET ID>';
let sheetName = 'Input!A1:B4'
let sheets = google.sheets('v4');
exports.fetch = (req, res) => {
sheets.spreadsheets.values.get({
auth: jwtClient,
spreadsheetId: spreadsheetId,
range: sheetName,
}, function (err, response) {
if (err) {
console.info('The API returned an error: ' + err);
} else {
res.json(response);
}
});
// OR
sheets.spreadsheets.getByDataFilter({
auth: jwtClient,
spreadsheetId: spreadsheetId,
"includeGridData": true,
}, function (err, response) {
if (err) {
console.info('The API returned an error: ' + err);
} else {
res.json(response);
}
});
}
Спасибо, что нашли время, @Tanaike! Я отредактировал тему (под таблицей) и попытался уточнить дальше. Пожалуйста, дайте мне знать, если теперь яснее? Но в основном я хочу весь контент, также внутри списка
Спасибо за ответ. Я должен извиниться за мое плохое знание английского еще раз. К сожалению, из вашего обновленного вопроса я все еще не могу понять вашу текущую проблему и вашу цель. 1. Что такое [List]
я за столом? 2. Чтобы правильно понять ваш вопрос, можете ли вы предоставить образец электронной таблицы, включая образцы входных значений? А также, можете ли вы предоставить образцы выходных значений, которые вы ожидаете? Этим я хотел бы попытаться понять ваш вопрос.
Я также не понимаю, что вы имеете в виду под списком. Вы имеете в виду выпадающее меню? Можете ли вы предоставить скриншот содержимого ячейки?
Спасибо всем - 2 не понял, так что это явно на мне. Я положил картинку, чтобы объяснить лучше. Да, это раскрывающийся список. Листы называют это «Списком из диапазона», и он находится на вкладке проверки данных.
Для того, чтобы получить его, вы можете использовать метод Spreadsheets.get, установив параметр fields
в sheets/data/rowData/values/dataValidation
List of items
, ответ будет выглядеть так:{
"sheets": [
{
"data": [
{
"rowData": [
{
"values": [
{
"dataValidation": {
"condition": {
"type": "ONE_OF_LIST",
"values": [
{
"userEnteredValue": "Beer"
},
{
"userEnteredValue": "Wine"
},
{
"userEnteredValue": "Martini"
}
]
},
"showCustomUi": true
}
}
]
}
]
}
]
}
]
}
List form a range
, ответ будет выглядеть так:{
"sheets": [
{
"data": [
{
"rowData": [
{
"values": [
{
{
"dataValidation": {
"condition": {
"type": "ONE_OF_RANGE",
"values": [
{
"userEnteredValue": "=Sheet1!$B$1:$B$3"
}
]
},
"showCustomUi": true
}
}
]
}
]
}
]
}
]
}
В последнем случае вам нужно будет впоследствии вызвать метод Spreadsheets.values.get для =Sheet1!$B$1:$B$3
— это диапазон, возвращаемый как userEnteredValue
внутри объекта values
, вложенного в объект dataValidation
.
Спасибо ziganotschka. Отстой, однако, что Google не поддерживает в своем API те же типы объектов, что и в Script. Вы должны прогибаться назад, чтобы получить простую информацию. Но это то, что есть.
Apps Script имеет больше методов, однако имейте в виду, что API-интерфейсы обычно работают быстрее, даже если вначале они потенциально менее интуитивно понятны.
Я не могу понять насчёт
get only the table, including the list content as an array
. Прошу прощения за это. Могу я спросить вас о деталях вашей цели?