What is the fastest way to update a google spreadsheet with a lot of data through the spreadsheet api?

前端 未结 3 1887
我寻月下人不归
我寻月下人不归 2020-12-03 13:19

I am using the Google Spreadsheet API to update a spreadsheet with a lot of data (hundreds of rows and around twenty columns).

I have tested making a batch call to u

3条回答
  •  盖世英雄少女心
    2020-12-03 13:24

    Speedup: posted by David Tolioupov - it works. Some extra info that helped.

    Example of how to use the CellFeed, see CellDemo.java http://gdata-java-client.googlecode.com/svn-history/r51/trunk/java/sample/spreadsheet/cell/CellDemo.java

    The example has details, enough detail that it helped me optimize my code.

    As stated by David Tolioupov, create the CellEntry this way:

    CellEntry batchEntry = new CellEntry(cellAddr.row, cellAddr.col, cellAddr.idString);
    batchEntry.setId(String.format("%s/%s", cellFeedUrl.toString(), cellAddr.idString)); 
    

    From the example:

    /**
     * Returns a CellEntry with batch id and operation type that will tell the
     * server to update the specified cell with the given value. The entry is
     * fetched from the server in order to get the current edit link (for
     * optimistic concurrency).
     * 
     * @param row the row number of the cell to operate on
     * @param col the column number of the cell to operate on
     * @param value the value to set in case of an update the cell to operate on
     * 
     * @throws ServiceException when the request causes an error in the Google
     *         Spreadsheets service.
     * @throws IOException when an error occurs in communication with the Google
     *         Spreadsheets service.
     */
    private CellEntry createUpdateOperation(int row, int col, String value)
        throws ServiceException, IOException {
      String batchId = "R" + row + "C" + col;
      URL entryUrl = new URL(cellFeedUrl.toString() + "/" + batchId);
      CellEntry entry = service.getEntry(entryUrl, CellEntry.class);
      entry.changeInputValueLocal(value);
      BatchUtils.setBatchId(entry, batchId);
      BatchUtils.setBatchOperationType(entry, BatchOperationType.UPDATE);
    
      return entry;
    }
    

    All that is required is the cellFeedUrl, then create the request and send it.

提交回复
热议问题