Угол TextRotation никогда не устанавливается в API Google Sheet

Я использую Google Sheets API v4 из Java-клиента. Я пытаюсь получить формат из класса Cell. Все идет хорошо.

ПОВОРОТ ТЕКСТА

Мне удалось получить элемент TextRotation с установленным свойством Vertical, но свойство угла никогда не устанавливалось, что бы я ни помещал в исходный документ Google Sheets.

Независимо от значения угла, выбранного в приложении Google Sheet, свойство угла никогда не устанавливается.

Я попытался проверить возвращенный JSON, чтобы узнать, не связана ли проблема с Java-клиентом. Но JSON REST API также никогда не возвращает это свойство.

Текущий результат:
.
Ожидаемый результат:

То же самое здесь.

Mauricio 09.09.2021 21:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
1
196
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Проблема и обходной путь:

Когда я увидел CellFormat официального документа , я подумал, что значение textRotation можно получить по полям sheets(data(rowData(values(userEnteredFormat(textRotation))))) при использовании метода "spreadsheets.get". Но когда я проверял это, значения не возвращались. Вот я и подумал, что это может быть баг. И когда я искал это в системе отслеживания проблем Google, я нашел https://issuetracker.google.com/issues/146274218. Из этой ситуации на текущем этапе кажется, что значения textRotation не могут быть получены методом «spreadsheets.get» API листов.

Если вы хотите получить значение textRotation с помощью скрипта в качестве текущего обходного пути, вы можете добиться этого, используя веб-приложения, созданные скриптом Google Apps, в качестве оболочки. В этом ответе я хотел бы предложить обходной путь.

Когда этот обходной путь отражается в потоке для вашей ситуации, он становится следующим.

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

1. Создайте новый проект Google Apps Script.

Пример сценария веб-приложений — это сценарий Google Apps. Поэтому, пожалуйста, создайте проект Google Apps Script.

Если вы хотите создать его напрямую, зайдите на https://script.new/. В этом случае, если вы не вошли в систему Google, открывается экран входа в систему. Поэтому, пожалуйста, войдите в Google. При этом открывается редактор сценариев Google Apps Script.

2. Подготовьте сторону веб-приложений. (серверная сторона)

Скопируйте и вставьте следующий скрипт (скрипт 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);
}

3. Разверните веб-приложения.

  1. В редакторе сценариев откройте диалоговое окно, нажав «Опубликовать» -> «Развернуть как веб-приложение».
  2. Выберите «Я» для «Выполнить приложение как:».
    • При этом скрипт запускается как владелец.
  3. Выберите «Любой, даже анонимный» для «У кого есть доступ к приложению:».
  • Конечно, вы можете использовать токен доступа для этой ситуации. Но в данном случае в качестве простой настройки я использую ключ доступа вместо токена доступа.
  1. Нажмите кнопку «Развернуть» в качестве новой «версии проекта».
  2. Автоматически открывать диалоговое окно «Требуется авторизация».
    1. Нажмите «Просмотреть разрешения».
    2. Выберите собственную учетную запись.
    3. Нажмите «Дополнительно» в разделе «Это приложение не проверено».
    4. Нажмите «Перейти к ### имени проекта ### (небезопасно)».
    5. Нажмите кнопку «Разрешить».
  3. Нажмите «ОК».
  4. Скопируйте URL-адрес веб-приложений. Это как https://script.google.com/macros/s/###/exec.
    • Если вы изменили скрипт Google Apps, повторно разверните его как новую версию. При этом измененный скрипт отражается в веб-приложениях. Пожалуйста, будьте осторожны с этим.

3. Тестирование.

В качестве простого теста, когда он запрашивает веб-приложения с помощью команды 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}]
]
  • В этом случае ячейки «A1, A2, B2» имеют поворот текста на 30 градусов. Причем ячейка «B1» имеет вертикальное направление.

Примечание:

  • Когда вы изменили сценарий веб-приложений, повторно разверните веб-приложения как новую версию. При этом последний сценарий отражается в веб-приложениях. Пожалуйста, будьте осторожны с этим.

Использованная литература:

Большое спасибо за этот полный ответ. Но в моем случае я не могу использовать этот обходной путь — с точки зрения производительности я не могу запустить 2 разных API для парсинга одного файла. особенно из того, что я знаю о производительности сценариев приложений Google.. - Мне нужно проанализировать много файлов листов Google, и я не могу объявить сценарий приложения для каждого из них. И с точки зрения архитектуры мне пришлось бы создать патч для gsheet java api client для связи с этим конкретным скриптом приложения. Не очень легкий и ясный

Damien C 14.12.2020 05:43

@Damien C Спасибо за ответ. Во-первых, я глубоко извиняюсь за мой плохой навык. На текущем этапе ваша цель не может быть достигнута напрямую с помощью проблемы, которая может быть ошибкой. Поэтому я предложил обходной путь. Но из вашего ответа я понял, что мое предложение не подходит для вашей ситуации. Я глубоко извиняюсь за это. Но я подумал, что этот обходной путь может быть полезен для других пользователей. Так что в этом случае я хотел бы оставить свой ответ. Если вы позволите это, я буду рад.

Tanaike 14.12.2020 10:05

Конечно. Со своей стороны я написал небольшую библиотеку js

Damien C 14.09.2021 17:55
Ответ принят как подходящий

Наконец, я написал JS-библиотеку: screen-rotation.js для управления всем этим.

screenorientation().change(function(){
 // My event management
});

Он поддерживает iOS, Android и настольные браузеры.

Другие вопросы по теме