【问题标题】:Google Sheets API v4 dot Net Deleting a rowGoogle Sheets API v4 dot Net 删除一行
【发布时间】:2016-11-14 21:52:16
【问题描述】:

我正在构建一个与 Google 表格相关联的界面。它的工作方式是将电子表格中的所有记录拉到我界面上的网格视图中。然后这个界面上有一个按钮,提供编辑、删除等选项。

我的删除方法有问题。它的工作方式是将我的所有记录拉入该方法,然后使用 for 循环遍历结果并将结果中的 ID 字段与传递给该方法的 ID 进行比较。当有匹配时,那是要删除的。所有这些工作,一切顺利进行,但由于某种原因,该记录没有从我的谷歌表中删除。下面是我的 Google Sheets API v4 的 dot NET 包装器的代码。如果有人可以帮助我,将不胜感激。几个小时以来,我一直盯着文档和拼凑其他语言的部分内容,但我的大脑并没有想出任何新东西,哈哈。

if (ID.ToString() == WHVACRMembers[i][0].ToString()) // IF INCOMING ID MATCHES ID OF CURRENT ROW BEING LOOPED OVER
{
    //DELETE THIS ROW
    Request RequestBody = new Request() { 
        DeleteDimension = new DeleteDimensionRequest() { 
            Range = new DimensionRange() { 
                SheetId = 0, 
                Dimension = "ROWS", 
                StartIndex = Convert.ToInt32(i), 
                EndIndex = Convert.ToInt32(i) 
            } 
        } 
    };

    List<Request> RequestContainer = new List<Request>();
    RequestContainer.Add(RequestBody);

    BatchUpdateSpreadsheetRequest DeleteRequest = new BatchUpdateSpreadsheetRequest();
    DeleteRequest.Requests = RequestContainer;

    service.Spreadsheets.BatchUpdate(DeleteRequest, SpreadsheetID);

}

【问题讨论】:

    标签: c# google-sheets google-sheets-api


    【解决方案1】:

    我刚刚发现了问题。而不是:

    service.Spreadsheets.BatchUpdate(DeleteRequest, SpreadsheetID);
    

    我需要:

    SpreadsheetsResource.BatchUpdateRequest Deletion = new SpreadsheetsResource.BatchUpdateRequest(service, DeleteRequest, SpreadsheetID);
    Deletion.Execute();
    

    当我弄清楚这一点后,一切都顺利进行。只是我在查看文档和对象浏览器时没有专注于正确的事情。

    【讨论】:

      【解决方案2】:

      对 StartIndex 和 EndIndex 使用相同的数字并没有为我删除行,我必须在 EndIndex 中加 1:

                  StartIndex = Convert.ToInt32(i), 
                  EndIndex = Convert.ToInt32(i + 1) 
      

      【讨论】:

        【解决方案3】:

        请注意代码是 Java,所以请转换,这只是为了向您展示我的方法。

        我不确定我的方法是否是最好的,但它可以达到目的,所以我会解释我做了什么。

        1. 在您要保存的工作表中保留一列(比如 ROWNUM) 数据。

        2. 每次在此列中写入相同的字符串“=ROW()” 您正在发布数据,它将为该行生成行 ID

        3. 那就用下面的方法,希望对你有帮助!

          public void deleteRows (String range, String textToBeDeleted) {//textToBeDeleted is cell value which will be find in the column and that row will be deleted
          
          try {
              Sheets sheetsService = createSheetsService();
              ValueRange response = sheetsService.spreadsheets().values()
                      .get(spreadsheetId, range)
                      .execute(); //Getting all the data of the sheet
          
              List<Request> requests = new ArrayList<>();
              List<List<Object>> allData = response.getValues();
              List<Integer> rowsToBeDeleted = new ArrayList<>();
          
              for (List<Object> row : allData) {
                  if (row.get(0).toString().equalsIgnoreCase(textToBeDeleted)) { //0 is the column value based on which I'll be deleting the row
                      rowsToBeDeleted.add(Integer.parseInt(row.get(23).toString())); //23 is the RowNumber column in my case
                  }
              }
          
              BatchUpdateSpreadsheetRequest requestBody = new BatchUpdateSpreadsheetRequest();
              for (int i = rowsToBeDeleted.size() - 1; i >= 0; i--) { //Reverse loop while deleting so that wrong index doesn't get deleted
                  Request request = new Request();
                  request.setDeleteDimension(new DeleteDimensionRequest()
                          .setRange(new DimensionRange()
                                  .setSheetId(sheetid)
                                  .setDimension("ROWS")
                                  .setStartIndex(rowsToBeDeleted.get(i) - 1)
                                  .setEndIndex(rowsToBeDeleted.get(i))
                          )
                  );
                  requests.add(request);
              }
              requestBody.setRequests(requests);
          
              Sheets.Spreadsheets.BatchUpdate deleteRequest =
                      sheetsService.spreadsheets().batchUpdate(spreadsheetId, requestBody);
          
              BatchUpdateSpreadsheetResponse deleteResponse = deleteRequest.execute();
          
              System.out.println(deleteResponse);
          
          } catch (Exception e) {
              System.out.println(e.getStackTrace());
          }}
          

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-15
          • 1970-01-01
          • 2016-10-13
          • 2018-11-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多