Установите цвет фона и размер текста ячейки с помощью API Google Java

Я хочу установить цвет фона и размер текста ячейки таблицы. Я использую этот Java-код для установки текста в ячейку, но я не могу найти решение, как установить стиль.

CellData setUserEnteredValue = new CellData()
            .setUserEnteredValue(new ExtendedValue()
                .setStringValue("cell text"));

Есть ли какое-либо решение?

Ответ 1

AFAIK это невозможно в API Java Spreadsheet, вместо этого вы должны использовать Приложения Script; https://developers.google.com/apps-script/reference/spreadsheet/

Из их документации как установить фон;

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var range = sheet.getRange("B2:D5");
range.setBackground("red");

и как установить размер шрифта;

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var cell = sheet.getRange("B2");
cell.setFontSize(20);

Обновление См. ниже приведенный ниже ответ на вопрос flo5783. Теперь v4 предлагает возможность сделать это.

Ответ 2

Похоже, есть класс, разработанный именно для этого: CellFormat

В частности, следующие методы:

public CellFormat setBackgroundColor( Color backgroundColor)

и

public CellFormat setTextFormat( TextFormat textFormat)

Я не кодировал в Java в возрасте, поэтому я не буду пытаться дать вам пример рабочего кода, но я думаю, что вы сможете легко понять это.

РЕДАКТИРОВАТЬ: Вот базовый пример, начинающийся с вашего кода:

CellData setUserEnteredValue = new CellData()
            .setUserEnteredValue(new ExtendedValue()
                .setStringValue("cell text"));

CellFormat myFormat = new CellFormat();
myFormat.setBackgroundColor(new Color().setRed(1)); // red background
myFormat.setTextFormat(new TextFormat().setFontSize(16)); // 16pt font

setUserEnteredValue.setUserEnteredFormat(myFormat);

Ответ 3

Мне пришлось пройти через бесполезные ответы, но это сработало для меня. Ну вот:

requests.add(new Request()
                .setRepeatCell(new RepeatCellRequest()
                        .setCell(new CellData()
                                .setUserEnteredValue( new ExtendedValue().setStringValue("cell text"))
                                .setUserEnteredFormat(new CellFormat()
                                        .setBackgroundColor(new Color()
                                                .setRed(Float.valueOf("1"))
                                                .setGreen(Float.valueOf("0"))
                                                .setBlue(Float.valueOf("0"))
                                        )
                                        .setTextFormat(new TextFormat()
                                                .setFontSize(15)
                                                .setBold(Boolean.TRUE)
                                        )
                                )
                        )
                        .setRange(new GridRange()
                                .setSheetId(sheetID)
                                .setStartRowIndex(1)
                                .setEndRowIndex(0)
                                .setStartColumnIndex(0)
                                .setEndColumnIndex(1)
                        )
                        .setFields("*")
                )
        );

Ответ 4

Вы не можете изменить цвет фона или размер шрифта на объекте CellData. Вместо этого вам нужно перебирать несколько диапазонов ячеек. Оттуда вы можете установить цвет фона на основе значения ячейки. Затем вы можете сделать свой код надежным, как двухэтапный процесс. Из другого ответа на SO:

//Sets the row color depending on the value in the "Status" column.
function setRowColors() {
  var range = SpreadsheetApp.getActiveSheet().getDataRange();
  var statusColumnOffset = getStatusColumnOffset();

  for (var i = range.getRow(); i < range.getLastRow(); i++) {
    rowRange = range.offset(i, 0, 1); //Play with this range to get your desired columns.
    status = rowRange.offset(0, statusColumnOffset).getValue(); //The text value we need to evaluate.
    if (status == 'Completed') {
      rowRange.setBackgroundColor("#99CC99");
    } else if (status == 'In Progress') {
      rowRange.setBackgroundColor("#FFDD88");    
    } else if (status == 'Not Started') {
      rowRange.setBackgroundColor("#CC6666");          
    }
  }
}