【问题标题】:How to add a new line to google spreadsheet without affecting existing formulas如何在不影响现有公式的情况下向谷歌电子表格添加新行
【发布时间】:2012-10-16 05:11:25
【问题描述】:

我在一个谷歌电子表格中使用这个脚本来添加一个新行:

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
sheet.insertRowAfter(1);

问题是任何引用行的公式都会更新,例如

=A$2

变成

=A$3

在行插入之后。有没有办法避免这种情况?
(通过更改论坛或脚本。)

我理解这种行为,电子表格希望所有公式都指向旧单元格 - 但它与我的总和混淆(这些总和应该总是从 a$2:a$999 总结整列(a1 是标题)。但是那些被更新然后总结 a$3:a$1000 (等等) 所以他们完全错过了新的行。

【问题讨论】:

    标签: google-apps-script google-sheets


    【解决方案1】:

    您可以使用=SUM(INDIRECT("A2"):INDIRECT("A999")) 对这些值求和。电子表格不会触及这些地址,因为它们是字符串。

    【讨论】:

      【解决方案2】:

      我最近在 Android 中完成了这项工作。

      service = new SpreadsheetService("Spreadsheet");
      service.setProtocolVersion(SpreadsheetService.Versions.V3);
      service.setUserCredentials("username", "password");
      
      URL metafeedUrl = new URL("https://spreadsheets.google.com/feeds/spreadsheets/private/full");
      feed = service.getFeed(metafeedUrl, SpreadsheetFeed.class);
      List<SpreadsheetEntry> spreadsheets = feed.getEntries(); //List of Spreadsheet
      worksheetFeed = service.getFeed(spreadsheets.get(0).getWorksheetFeedUrl(), WorksheetFeed.class); //Using the first spreadsheet from list
      List<WorksheetEntry> worksheets = worksheetFeed.getEntries();
      worksheet = worksheets.get(0);
      URL listFeedUrl = worksheet.getListFeedUrl();
      
      // Create a local representation of the new row.
      ListEntry row = new ListEntry();
      row.getCustomElements().setValueLocal("column_name", "value");
      row = service.insert(listFeedUrl, row);
      

      它对我很有效。希望对你有帮助。

      【讨论】:

      • 据我所知,这将(就像我的脚本被剪断一样)插入一个新行。 (此插入仍会触发电子表格中所有公式的更新。) - 谢谢,但它没有回答问题。
      猜你喜欢
      • 1970-01-01
      • 2021-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      相关资源
      最近更新 更多