我能够操纵第一张纸上的数据,但不能操纵第二张纸上的数据。在API页面上,它指出范围必须指示工作表标签名称。所以我做到了,它可以编译并运行,但是它将数据输入到Sheet1而不是Sheet 2。

选项卡如下所示:

java - Google Sheet API:仅在第一张纸上打印-Java-LMLPHP

非常感谢您的任何帮助,在此先感谢您

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.sheets.v4.SheetsScopes;
import com.google.api.services.sheets.v4.model.*;
import com.google.api.services.sheets.v4.Sheets;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;


public class SheetsQuickstart {
private static final String APPLICATION_NAME = "CSC131";
private static final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".credentials//sheets.googleapis.com-java-quickstart.json");
private static FileDataStoreFactory DATA_STORE_FACTORY;
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static HttpTransport HTTP_TRANSPORT;
private static final List<String> SCOPES = Arrays.asList( SheetsScopes.SPREADSHEETS );
private static String spreadsheetId = "1BLt5iz1udvdrbxPAoHbgxNtpqgKmV_fvvAKGWPJekyM";

static {
    try {
        HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
        DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
    } catch (Throwable t) {
        t.printStackTrace();
        System.exit(1);
    }
}

public static Credential authorize() throws IOException {
    InputStream in = new FileInputStream("client_secret.json");
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(DATA_STORE_FACTORY)
            .setAccessType("offline")
            .build();
    Credential credential = new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
    System.out.println("Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
    return credential;
}


public static Sheets getSheetsService() throws IOException {
    Credential credential = authorize();
    return new Sheets.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
            .setApplicationName(APPLICATION_NAME)
            .build();
}


/********************* Stores comment in cell *****************/
public static void inputComment(int col, String Comment, String ID)throws IOException{
    Sheets service = getSheetsService();
    final String range = "Sheet Two!C2:C26";
    ValueRange response = service.spreadsheets().values().get(spreadsheetId, range).execute();
    List<List<Object>> element = response.getValues();
    int cellRow = 0;
    for (List row : element) {
        cellRow++;
        if(ID.equals(row.get(0))){
            printInfo(cellRow,col,Comment);
            break;
        }
    }
}



/********************* Prints everything *****************/
public static void printInfo(int row, int count, String Date) throws IOException{
    Sheets service = getSheetsService();
    List<Request> requests = new ArrayList<>();

    List<CellData> values = new ArrayList<>();
    values.add(new CellData().setUserEnteredValue(new ExtendedValue().setStringValue((Date))));
    requests.add(new Request()
        .setUpdateCells(new UpdateCellsRequest()
        .setStart(new GridCoordinate().setSheetId(0).setRowIndex(row).setColumnIndex(count+6))
        .setRows(Arrays.asList(new RowData().setValues(values)))
        .setFields("userEnteredValue,userEnteredFormat.backgroundColor")));
    BatchUpdateSpreadsheetRequest batchUpdateRequest = new BatchUpdateSpreadsheetRequest().setRequests(requests);
    service.spreadsheets().batchUpdate(spreadsheetId, batchUpdateRequest).execute();
}


}

最佳答案

看来问题出在printInfo()中-请注意new GridCoordinate().setSheetId(0)

如有疑问,sheetId来自SheetProperties-例如来自Spreadsheet.getSheets()....getProperties()

关于java - Google Sheet API:仅在第一张纸上打印-Java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50995202/

10-11 21:19