2016-09-22 10 views
0

私はここでGoogleから多くの人になり、自分でAndroidアプリケーションを作成しようとして以来、v4 APIはあまり役に立たないので、私は困惑しています。私はここで検索しましたが、私の質問に答える答えは見ませんでした。データを上書きせずに行を挿入する

私は予算スプレッドシートを持っています。私のアプリは、シートからデータを取得し、それを現在の給与にフィルターします。だから私は現在のすべての取引と将来の取引を見ることができるので、どれくらい余計に使うことができるか分かります。それから私はちょうど私がガスを得る場合、シートアプリでシートを編集するために数分を費やそうとするのではなく、数回のクリックでそれを追加できるようにするために、アプリケーションから新しい牽引を挿入できるようにしたい。後で、私はそれを置いているセルの数式をカスタマイズし、それを北と南のセルにコピーして、数学が動くようにする予定です。

私はthe Android Quickstartを使用して、データを簡単に読み取ることができました。その後、データをフィルタリングするためにシートデータをフィルタリングするためにそれを調整しました。私はそれまでシートにデータを書き込めるようになった。問題は、セルを上書きするのではなく、シートの中央に行を挿入する方法を知っているクイックスタートと同じスタイルのjava/androidのサンプルを見つけることができないということです。私はどこかでINSERTDATAOPTION = INSERT_ROWSを使用する必要があると仮定していますが、どこにも追加できません。 documentationは私がspreadsheets.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; 
 
     }

+0

回答を回答として投稿してください。元の質問の編集を参照する回答を投稿しないでください。 – zero298

+0

私は両方を編集しました。ありがとう。 – Stormcrow

答えて

2

私はいくつかの心が壁に投げる事を麻痺した後、それを考え出したとスティックものを参照してください。私は2つのステップでそれをしなければならなかった。最初のステップでは、行32でシートに行が挿入されるので、空白の行33が表示されます。次に、2番目の領域でその空白の行に値が挿入されます。私はこれが将来誰かを助けることを願っています。

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();

0

私はそれはばかげたことを、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; 
} 

これ以降、私はいくつかの重要な煩わしさを伴わずに、多数の挿入を行い、シートに追加することができました。

関連する問題