簡體   English   中英

插入行而不覆蓋數據

[英]Insert row without overwritting data

我從Google那里得到很多幫助,自從我開始嘗試為自己制作一個Android應用程序以來,我感到很沮喪,因為v4 API並不是很有幫助。 我已經在這里搜索了,但是還沒有看到可以回答我的問題的答案。

我有一個預算電子表格。 我的應用程序將從工作表中獲取數據並將其過濾到我當前的發薪周。 因此,我可以查看所有當前和將來的交易,以便知道我還有多少錢可以花。 然后,我只想能夠從該應用程序中插入新的牽引力,比如說,如果我有氣,我希望能夠在幾次單擊中添加它,而不是花幾分鍾來在表格應用程序中編輯表格。 后來,我計划為要放入的單元格自定義公式,然后將其復制到該單元格的北部和南部,以便進行數學計算。

我使用Android快速入門能夠輕松讀取數據。 從那以后,我進行了調整,以過濾工作表數據以過濾我的數據。 我什至竭盡全力使其能夠將數據寫入工作表。 問題是我無法在Java / android中找到任何與快速入門相同樣式的示例,以了解如何在表格中間插入一行而不是覆蓋單元格。 我假設我必須在某個地方使用INSERTDATAOPTION = INSERT_ROWS,但找不到任何地方可以添加它。 文檔建議我使用sheetssheets.values.append,但.append永遠不會顯示為選項。 我只得到BatchGet,BatchUpdate,Get,Update。

我是一個初學者,我確定自己的代碼很笨拙,在經過數小時的谷歌搜索之后,我將它們拼湊在一起,但是我確定我只是缺少一些簡單的東西。 任何幫助,將不勝感激。

 private List<String> PostDataForApi() throws IOException { String spreadsheetID = getResources().getString(R.string.my_google_spreadsheet_id); Integer sheetID = getResources().getInteger(R.integer.my_google_sheet_id); List<RowData> rowData = new ArrayList<RowData>(); List<CellData> cellData = new ArrayList<CellData>(); String value = "test"; String formula = "=IF(COUNTBLANK(C510) = 2,\\"\\",Sum(B511+(SUM(C510))))"; String value2 = "999"; CellData cell = new CellData(); cell.setUserEnteredValue(new ExtendedValue().setStringValue(value)); CellData cell2 = new CellData(); cell2.setUserEnteredValue(new ExtendedValue().setFormulaValue(formula)); CellData cell3 = new CellData(); cell3.setUserEnteredValue(new ExtendedValue().setStringValue(value2)); cellData.add(cell); cellData.add(cell2); cellData.add(cell3); rowData.add(new RowData().setValues(cellData)); BatchUpdateSpreadsheetRequest batchRequests = new BatchUpdateSpreadsheetRequest(); BatchUpdateSpreadsheetResponse response; List<Request> requests = new ArrayList<Request>(); AppendCellsRequest appendCellReq = new AppendCellsRequest(); appendCellReq.setSheetId(sheetID); appendCellReq.setRows( rowData ); appendCellReq.setFields("userEnteredValue"); requests = new ArrayList<Request>(); requests.add( new Request().setAppendCells(appendCellReq)); batchRequests = new BatchUpdateSpreadsheetRequest(); batchRequests.setRequests( requests ); response = this.mService.spreadsheets().batchUpdate(spreadsheetID, batchRequests).execute(); System.out.println(response.toPrettyString()); return null; } 

我有些麻木地把東西扔到牆上,看看有什么東西粘住了,然后我想出了。 我必須分兩步來做。 第一步將在第32行的工作表中插入一行,這樣您將獲得33行的空白。然后第二個區域將值插入該空白行。 我希望這對以后的人有所幫助。

 String spreadsheetID = getResources().getString(R.string.my_google_spreadsheet_id); Integer sheetID = getResources().getInteger(R.integer.my_google_sheet_id); BatchUpdateSpreadsheetResponse response; BatchUpdateSpreadsheetRequest batchRequests = new BatchUpdateSpreadsheetRequest(); List<Request> requests = new ArrayList<Request>(); InsertDimensionRequest insertDimensionRequest = new InsertDimensionRequest(); DimensionRange dimRange = new DimensionRange(); dimRange.setStartIndex(32); dimRange.setEndIndex(33); dimRange.setSheetId(sheetID); dimRange.setDimension("ROWS"); insertDimensionRequest.setRange(dimRange); insertDimensionRequest.setInheritFromBefore(false); requests.add( new Request().setInsertDimension(insertDimensionRequest)); batchRequests = new BatchUpdateSpreadsheetRequest(); batchRequests.setRequests( requests ); response = this.mService.spreadsheets().batchUpdate(spreadsheetID, batchRequests).execute(); System.out.println(response.toPrettyString()); List<List<Object>> argData = getData(entryTitle, entryValue); ValueRange vRange = new ValueRange(); vRange.setRange("2016!A33"); vRange.setValues(argData); List<ValueRange> vList = new ArrayList<>(); vList.add(vRange); BatchUpdateValuesRequest batchRequest = new BatchUpdateValuesRequest(); batchRequest.setValueInputOption("USER-ENTERED"); batchRequest.setData(vList); this.mService.spreadsheets().values().batchUpdate(spreadsheetID, batchRequest).execute(); 

我一直在使用v4 Google表格api帶來太多不必要的麻煩,這太荒謬了。 因此,我恢復使用gdata(v3)api,它更容易理解,並且也有更好的文檔記錄。

這是設置鏈接,以及一些示例https://developers.google.com/google-apps/spreadsheets/

唯一缺少的是這些說明中的授權過程,這很麻煩,但是經過一番挖掘之后,我能夠獲得授權代碼庫,如下所示。

public class YourClass {
    // Application name
    private static final String APPLICATION_NAME = "Your-Application-Name";

// account info and p12
private static final String ACCOUNT_P12_ID = "Get-the-details-developer-console-google";
private static final File P12FILE = new File("D:/path/Drive API Test-bf290e0ee314.p12");

// scopes
private static final List<String> SCOPES = Arrays.asList(
        "https://docs.google.com/feeds",
        "https://spreadsheets.google.com/feeds");

// Spreadsheet API URL
private static final String SPREADSHEET_URL = "https://spreadsheets.google.com/feeds/spreadsheets/private/full";

private static final URL SPREADSHEET_FEED_URL;

static {
    try {
        SPREADSHEET_FEED_URL = new URL(SPREADSHEET_URL);
    } catch (MalformedURLException e) {
        throw new RuntimeException(e);
    }
}
// Authorize
private static Credential authorize() throws Exception {
    System.out.println("authorize in");

    HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
    JsonFactory jsonFactory = new JacksonFactory();

    GoogleCredential credential = new GoogleCredential.Builder()
            .setTransport(httpTransport)
            .setJsonFactory(jsonFactory)
            .setServiceAccountId(ACCOUNT_P12_ID)
            .setServiceAccountPrivateKeyFromP12File(P12FILE)
            .setServiceAccountScopes(SCOPES)
            .build();

    boolean ret = credential.refreshToken();
    // debug dump
    System.out.println("refreshToken:" + ret);

    // debug dump
    if (credential != null) {
        System.out.println("AccessToken:" + credential.getAccessToken());
    }

    System.out.println("authorize out");

    return credential;
}

//    Get service
private static SpreadsheetService getService() throws Exception {
    System.out.println("service in");

    SpreadsheetService service = new SpreadsheetService(APPLICATION_NAME);
    service.setProtocolVersion(SpreadsheetService.Versions.V3);

    Credential credential = authorize();
    service.setOAuth2Credentials(credential);

    // debug dump
    System.out.println("Schema: " + service.getSchema().toString());
    System.out.println("Protocol: " + service.getProtocolVersion().getVersionString());
    System.out.println("ServiceVersion: " + service.getServiceVersion());

    System.out.println("service out");

    return service;
}

從那時起,我就可以進行許多插入和追加到工作表中,而沒有任何大的麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM