作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含很多行的谷歌表格。为了更好地查看工作表,我希望在单元格 A 中有数据的每一行之前添加一个空白行。
我想我需要使用 insertRowsBefore。
function Insert() {
var ss = SpreadsheetApp.getActiveSpreadsheet();
var s = ss.getActiveSheet();
s.insertRowsBefore(2, 1); // add 1 row before the 2nd
}
当然,这个函数只适用于第二行,我没有找到一个好的解决方案来对 A 中的每一行数据执行此操作。
有人有解决方案或提示来帮助我吗?
:3
最佳答案
从您的问题和评论中,我可以理解,对于 [["value1"], ["value2"], ["value3"]]
,您想要插入空白行,例如 [["value1"], [""], ["value2"], [""], ["value3"]]
,每个空行是 A 列到最后一列。如果我的理解是正确的,那么这个修改怎么样?
insertRowsBefore()
by for 循环作为脚本插入行。但在这种情况下,当行数较多时,处理速度会有点慢。所以我想建议使用Sheets API。这样,您只需调用一次 API 即可实现。当您使用此修改后的脚本时,请在高级 Google 服务和 API 控制台中启用 Sheets API,如下所示。
如果您现在打开脚本编辑器,其中包含使用 Sheets API 的脚本,您可以通过访问此 URL https://console.cloud.google.com/apis/library/sheets.googleapis.com/ 为项目启用 Sheets API。
function Insert() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues(); // Retrieve values of column A.
var sheetId = sheet.getSheetId();
var requests = [];
var count = 0;
var adjustment = 0;
values.forEach(function(e, i) { // Create requests for batchUpdate.
if (e[0]) {
count++;
requests.push({
"insertRange": {
"shiftDimension": "ROWS",
"range": {
"sheetId": sheetId,
"startRowIndex": i + count - adjustment,
"endRowIndex": i + count + 1 - adjustment
}
}
});
} else {
adjustment++;
requests.pop();
}
});
Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId()); // Using Sheets API.
}
if (e[0]) {
和 } else { adjustment++; requests.pop();}
.如果我误解了你的问题,我很抱歉。
我更改了创建 BatchUpdate 请求的方法。通过从最后一行创建请求,修改后的脚本变得更简单。我认为这样,脚本就可以满足你想要的输出了。
function Insert() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
var sheetId = sheet.getSheetId();
var offset = 1; // For header
var requests = [];
for (var i = values.length - 1; i > offset + 1; i--) {
if (values[i][0]) {
requests.push({
"insertRange": {
"shiftDimension": "ROWS",
"range": {
"sheetId": sheetId,
"startRowIndex": i,
"endRowIndex": i + 1
}
}
});
}
};
Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId());
}
此修改后的脚本为添加的新空白行提供白色颜色。为此,repeatCell
已使用。
function Insert() {
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var values = sheet.getRange(1, 1, sheet.getLastRow(), 1).getValues();
var sheetId = sheet.getSheetId();
var offset = 1; // For header
var requests = [];
for (var i = values.length - 1; i > offset + 1; i--) {
if (values[i][0]) {
requests.push({
"insertRange": {
"shiftDimension": "ROWS",
"range": {
"sheetId": sheetId,
"startRowIndex": i,
"endRowIndex": i + 1
}
}
});
requests.push({ // Give color to new blank row.
"repeatCell": {
"cell": {
"userEnteredFormat": {
"backgroundColor": {
"red": 1,
"green": 1,
"blue": 1,
}
}
},
"range": {
"sheetId": sheetId,
"startRowIndex": i,
"endRowIndex": i + 1
},
"fields": "*"
}
});
}
};
Sheets.Spreadsheets.batchUpdate({"requests": requests}, spreadsheet.getId());
}
关于javascript - 在谷歌表格中的行前插入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50178526/
我是一名优秀的程序员,十分优秀!