如何在不影响现有公式的情况下向Google电子表格添加新行

时间:2012-10-16 05:11:25

标签: google-apps-script google-sheets

我在谷歌电子表格中使用此脚本添加新行:

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

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

=A$2

变为

=A$3

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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:-1)

我最近在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);

对我来说效果很好。希望它可以帮到你。