Я использую Google Sheets API v4 из Java-клиента. Я пытаюсь получить формат из класса Cell. Все идет хорошо.
Мне удалось получить элемент TextRotation с установленным свойством Vertical, но свойство угла никогда не устанавливалось, что бы я ни помещал в исходный документ Google Sheets.
Независимо от значения угла, выбранного в приложении Google Sheet, свойство угла никогда не устанавливается.
Я попытался проверить возвращенный JSON, чтобы узнать, не связана ли проблема с Java-клиентом. Но JSON REST API также никогда не возвращает это свойство.
Текущий результат:
.
Ожидаемый результат:
Когда я увидел CellFormat официального документа , я подумал, что значение textRotation
можно получить по полям sheets(data(rowData(values(userEnteredFormat(textRotation)))))
при использовании метода "spreadsheets.get". Но когда я проверял это, значения не возвращались. Вот я и подумал, что это может быть баг. И когда я искал это в системе отслеживания проблем Google, я нашел https://issuetracker.google.com/issues/146274218. Из этой ситуации на текущем этапе кажется, что значения textRotation
не могут быть получены методом «spreadsheets.get» API листов.
Если вы хотите получить значение textRotation
с помощью скрипта в качестве текущего обходного пути, вы можете добиться этого, используя веб-приложения, созданные скриптом Google Apps, в качестве оболочки. В этом ответе я хотел бы предложить обходной путь.
Когда этот обходной путь отражается в потоке для вашей ситуации, он становится следующим.
Пример сценария веб-приложений — это сценарий Google Apps. Поэтому, пожалуйста, создайте проект Google Apps Script.
Если вы хотите создать его напрямую, зайдите на https://script.new/. В этом случае, если вы не вошли в систему Google, открывается экран входа в систему. Поэтому, пожалуйста, войдите в Google. При этом открывается редактор сценариев Google Apps Script.
Скопируйте и вставьте следующий скрипт (скрипт Google Apps) в редактор скриптов. Этот сценарий предназначен для веб-приложений. Это веб-приложение используется в качестве API.
Сторона сервера: скрипт Google Apps
function doGet(e) {
const key = "sampleKey";
const id = e.parameter.spreadsheetId;
const sheetName = e.parameter.sheetName;
if (e.parameter.key != key || !id || !sheetName) {
return ContentService.createTextOutput(JSON.stringify({message: "Error."})).setMimeType(ContentService.MimeType.JSON);
}
const sheet = SpreadsheetApp.openById(id).getSheetByName(sheetName);
const textRotations = sheet.getDataRange().getTextRotations().map(r => r.map(c => ({angle: c.getDegrees(), vertical: c.isVertical()})));
return ContentService.createTextOutput(JSON.stringify(textRotations)).setMimeType(ContentService.MimeType.JSON);
}
https://script.google.com/macros/s/###/exec
.
В качестве простого теста, когда он запрашивает веб-приложения с помощью команды curl, он выглядит следующим образом. Укажите идентификатор электронной таблицы и имя листа. Когда веб-приложения развернуты правильно, значения возвращаются.
$ curl -L "https://script.google.com/macros/s/###/exec?spreadsheetId=###&sheetName=Sheet1&key=sampleKey"
Result:
Диапазон данных используется для получения значений. Так, например, когда значения установлены для ячеек «A1:C3» в «Лист1», возвращается следующий результат.
[
[{"angle":30,"vertical":false},{"angle":0,"vertical":true},{"angle":0,"vertical":false}],
[{"angle":30,"vertical":false},{"angle":30,"vertical":false},{"angle":0,"vertical":false}]
]
Большое спасибо за этот полный ответ. Но в моем случае я не могу использовать этот обходной путь — с точки зрения производительности я не могу запустить 2 разных API для парсинга одного файла. особенно из того, что я знаю о производительности сценариев приложений Google.. - Мне нужно проанализировать много файлов листов Google, и я не могу объявить сценарий приложения для каждого из них. И с точки зрения архитектуры мне пришлось бы создать патч для gsheet java api client для связи с этим конкретным скриптом приложения. Не очень легкий и ясный
@Damien C Спасибо за ответ. Во-первых, я глубоко извиняюсь за мой плохой навык. На текущем этапе ваша цель не может быть достигнута напрямую с помощью проблемы, которая может быть ошибкой. Поэтому я предложил обходной путь. Но из вашего ответа я понял, что мое предложение не подходит для вашей ситуации. Я глубоко извиняюсь за это. Но я подумал, что этот обходной путь может быть полезен для других пользователей. Так что в этом случае я хотел бы оставить свой ответ. Если вы позволите это, я буду рад.
Конечно. Со своей стороны я написал небольшую библиотеку js
Наконец, я написал JS-библиотеку: screen-rotation.js для управления всем этим.
screenorientation().change(function(){
// My event management
});
Он поддерживает iOS, Android и настольные браузеры.
То же самое здесь.