我想设置电子表格单元格背景颜色和文字大小。我使用这个Java代码将文本设置为单元格,但我找不到如何设置样式的解决方案。
CellData setUserEnteredValue = new CellData()
.setUserEnteredValue(new ExtendedValue()
.setStringValue("cell text"));
有没有解决方案?
答案 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");
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");
}
}
}