使用Google Java API设置单元格背景颜色和文本大小

时间:2016-12-30 08:30:25

标签: java google-sheets google-spreadsheet-api

我想设置电子表格单元格背景颜色和文字大小。我使用这个Java代码将文本设置为单元格,但我找不到如何设置样式的解决方案。

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

有没有解决方案?

5 个答案:

答案 0 :(得分:4)

AFAIK这在Java Spreadsheet API中是不可能的,您必须使用Apps脚本; https://developers.google.com/apps-script/reference/spreadsheet/

从他们的文档中how to set the background;

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

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

how to set the font size;

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

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

<强>更新 See flo5783's answer below,v4现在提供了执行此操作的功能。

答案 1 :(得分: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);

答案 2 :(得分:1)

我不得不经历一些无用的答案,但这对我有用。你走了:

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("*")
                )
        );

答案 3 :(得分:1)

// 对于处理单个单元格,您可以这样做,其中 j 和 k 是 g sheet 中的行和列。

CellData setUserEnteredValue =new CellData()
                .setUserEnteredValue(new ExtendedValue()
                        .setStringValue(maxs));
    List<CellData> values1.add(setUserEnteredValue);
        requests.add(new Request()
                .setUpdateCells(new UpdateCellsRequest()
                        .setStart(new GridCoordinate()
                                .setRowIndex(j)
                                .setColumnIndex(k))
                        .setRows(Arrays.asList(
                                new RowData().setValues(values1)))
                        .setFields("userEnteredValue,userEnteredFormat.backgroundColor")));
        

        CellFormat myFormat = new CellFormat();
        myFormat.setBackgroundColor(new Color().setRed(Float.valueOf("1"))); // red background
        setUserEnteredValue.setUserEnteredFormat(myFormat);

答案 4 :(得分:0)

您无法更改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");          
    }
  }
}