我正在尝试使用此网页中的以下代码在我的应用程序中实现Google Sheets API编写功能,但无法弄清楚如何以及如何为ValueRange变量分配值。
public class SheetsExample {
public static void main(String args[]) throws IOException,
GeneralSecurityException {
// The ID of the spreadsheet to update.
String spreadsheetId = "my-spreadsheet-id"; // TODO: Update placeholder value.
//The A1 notation of the values to update.
String range = "my-range"; // TODO: Update placeholder value.
// TODO: Assign values to desired fields of `requestBody`. All existing
// fields will be replaced:
ValueRange requestBody = new ValueRange();
Sheets sheetsService = createSheetsService();
Sheets.Spreadsheets.Values.Update request =
sheetsService.spreadsheets().values().update(spreadsheetId, range, requestBody);
UpdateValuesResponse response = request.execute();
// TODO: Change code below to process the `response` object:
System.out.println(response);
}
public static Sheets createSheetsService() throws IOException, GeneralSecurityException {
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();
// TODO: Change placeholder below to generate authentication credentials. See
// https://developers.google.com/sheets/quickstart/java#step_3_set_up_the_sample
//
// Authorize using one of the following scopes:
// "https://www.googleapis.com/auth/drive"
// "https://www.googleapis.com/auth/drive.file"
// "https://www.googleapis.com/auth/spreadsheets"
GoogleCredential credential = null;
return new Sheets.Builder(httpTransport, jsonFactory, credential)
.setApplicationName("Google-SheetsSample/0.1")
.build();
}
}
最佳答案
请参阅API指南Google Sheets API v4
首先,您需要创建一个ValueRange
实例。您可以通过ValueRange.setValues()
方法执行此操作。
如@Ben在其答案中所示,您可以通过以下方式创建ValueRange实例。 https://stackoverflow.com/a/46171564/2999358
ValueRange requestBody = new ValueRange();
requestBody.setValues(
Arrays.asList(
Arrays.asList("Row 1 Cell 1", "Row 1 Cell 2", "Row 1 Cell 3"),
Arrays.asList("Row 2 Cell 1", "Row 2 Cell 2", "Row 2 Cell 3")));
如您在《 API指南》中所见,
setValues()
需要一个数组数组public ValueRange setValues(java.util.List<java.util.List<java.lang.Object>>
values)
外部列表代表所有数据(基本上是整个电子表格),而内部列表代表ROWS。这些列表中的每个项目都代表一个CELL。
设置要写入电子表格的值之后,可以使用
ValueRange
对象(在您的情况下为requestBody变量)来更新电子表格。如果您遵循https://developers.google.com/sheets/api/quickstart/android快速入门指南,请对该代码进行以下更改。由于该代码仅向您展示如何从电子表格中获取数据。
更改以下行,
private static final String[] SCOPES = { SheetsScopes.SPREADSHEETS_READONLY };
为此,
private static final String[] SCOPES = { SheetsScopes.SPREADSHEETS };
这样,您就可以在Google云端硬盘中查看和管理电子表格。
在本指南的
getDataFromAPI()
方法中,包含以下代码,ValueRange response = this.mService.spreadsheets().values()
.get(spreadsheetId, range)
.execute();
用于从电子表格中获取数据。更改为以下,
ValueRange response = this.mService.spreadsheets().values()
.update(spreadsheetId, range, valueRange)
.setValueInputOption("RAW")
.execute();
将ValueInputOption设置为“ RAW”将使您输入的值保持原样存储。如果您使用“ USER_ENTERED”,则当您从Google Spreadsheet UI向单元格输入值时,将解析输入的值。它将进行字符串到数字,日期等的转换。基本上,所有使用Google电子表格UI时都会应用的规则。这取决于您要如何处理。