4

我正在使用 python 来更新谷歌电子表格。用于电子表格的 google python 库允许您使用 InsertRow api 在电子表格中插入一行。

这是一个例子:

gd_client.InsertRow(myDict, spreadSheetKey, workSheetKey)

myDictionary 是您要插入的字典, spreadsheetKey 是电子表格的键,worksheetKey 是工作表的键。但是,我想插入电子表格中间的特定行。此 API 仅在末尾插入。

任何人都知道,如果有任何方法可以做到这一点?

谢谢。

4

2 回答 2

4

An easy way is to have two sheets in the same spreadsheet. One is the raw data as it is inserted from the outside, and the second is the calculated one (sorting, functions...) that is based on that raw data.

For example if you want the data to be sorted by the second column, you can put in the second sheet:

=EXPAND(SORT(Sheet1!A:D,2,1))

This separation is also good as if you want to update the data from the outside. It will conflict with operations that you might have on your data, as adding calculated columns to the data rows.

于 2012-02-06T08:33:40.267 回答
1

如何* 通过 API/OAuth将一行 * 插入到谷歌电子表格的中间 ..... 困难重重。(我认为没有简单的方法,因为有一个将其添加到 API 的功能请求)。

          Pattern cellRefPattern = Pattern.compile("R(\\[?)([-0-9]+)\\]?C(\\[?)([-0-9]*)\\]?");
              worksheet.setRowCount(worksheet.getRowCount()+1);
              worksheet.update();
              CellFeed batchRequest = new CellFeed();
              for (AppCell cellAddr : cellAddresses.values()) {

                  // create a copy of the cell to replace
                  CellEntry batchEntry = new CellEntry(cellAddr.row, cellAddr.col, cellAddr.reference);

                  String updateReference = cellAddr.inputValue; 

                  if(updateReference.startsWith("=")) {
                      String removeReferenceBug = updateReference.replace( (CharSequence) "C:R", (CharSequence) "C[0]:R");
                      Matcher referenceMatcher = cellRefPattern.matcher(removeReferenceBug);
                      StringBuffer restultBuffer = new StringBuffer();
                      while (referenceMatcher.find()) {
                          try {
                              if(referenceMatcher.group(1).equals("[")) {
                                  int rowOffset = Integer.parseInt(referenceMatcher.group(2));
                                  int topRowOfSpan;
                                  int bottomRowOfSpan;                                
                                  int incSize = 1;
                                  if(rowOffset > 0) {
                                      topRowOfSpan = cellAddr.row;
                                      bottomRowOfSpan = cellAddr.row + rowOffset;
                                  } else {
                                      topRowOfSpan = cellAddr.row + rowOffset;
                                      bottomRowOfSpan = cellAddr.row ;      
                                      incSize = -1;
                                  }                               
                                  //System.out.println("move down: reference:"+cellAddr.reference+" topRowOfSpan:"+topRowOfSpan+
                                    //    " insertLocationRow:"+insertLocationRow+" bottomRowOfSpan:"+bottomRowOfSpan);
                                  if(topRowOfSpan <= insertLocationRow && bottomRowOfSpan > insertLocationRow) rowOffset += incSize;
                                  if(referenceMatcher.group(3).equals("[")) {
                                      referenceMatcher.appendReplacement(restultBuffer, "R["+rowOffset+"]C["+referenceMatcher.group(4)+"]");                                      

                                  } else {
                                      int colOffset = 0;                                          
                                      String col = referenceMatcher.group(4);                                         
                                      if(col != null && "".equals(col) == false) {
                                          colOffset = Integer.parseInt(col) - cellAddr.col;
                                      }                                       
                                      referenceMatcher.appendReplacement(restultBuffer, "R["+rowOffset+"]C["+colOffset+"]");                                                                              
                                  }                                   
                              } else {
                                  int absoluteRow = Integer.parseInt(referenceMatcher.group(2));
                                  if(absoluteRow >= insertLocationRow ) absoluteRow ++;
                                  if(referenceMatcher.group(3).equals("[")) {
                                      referenceMatcher.appendReplacement(restultBuffer, "R"+absoluteRow+"C["+referenceMatcher.group(4)+"]");                                                                                                              
                                  } else {
                                      referenceMatcher.appendReplacement(restultBuffer, "R"+absoluteRow+"C"+referenceMatcher.group(4));                                                                                                                                                   
                                  }

                              }
                          } catch(NumberFormatException nfe) {}
                      }
                      referenceMatcher.appendTail(restultBuffer);
                      updateReference = restultBuffer.toString();                                                                         

                  }


                  batchEntry.setId(String.format("%s/%s", worksheet.getCellFeedUrl().toString(), cellAddr.reference));              
                  batchEntry.changeInputValueLocal(updateReference);
                  BatchUtils.setBatchId(batchEntry, cellAddr.reference);
                  BatchUtils.setBatchOperationType(batchEntry, BatchOperationType.UPDATE);

                  // add the copy to the batch list
                  batchRequest.getEntries().add(batchEntry);
              }


              // Submit the update
              Link batchLink = cellFeed.getLink(Link.Rel.FEED_BATCH, Link.Type.ATOM);
              service.setHeader("If-Match", "*");
              CellFeed batchResponse = service.batch(new URL(batchLink.getHref()), batchRequest);
              service.setHeader("If-Match", null);

https://developers.google.com/google-apps/spreadsheets/#updating_multiple_cells_with_a_batch_request的修改版

问题:不检查公式中的字符串

AppCell 包含:行、列和参考

于 2013-01-22T05:58:32.903 回答