我正在尝试使用此网页中的以下代码在我的应用程序中实现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时都会应用的规则。这取决于您要如何处理。

09-06 05:51