google-apps-script - 检查单元格是否有值如果没有提示对话框错误中止脚本如果值然后运行脚本
问题描述
我已经在很多论坛上搜索过,但找不到这个问题。
我有一个脚本,将一行从表 1 移动到表 2。
我想要实现的是,当表格 1 中的特定单元格被遗忘并留空时。
当我运行
moverows()
脚本时,我想检查该行是否有任何空单元格,并通过对话框提示仍有空白单元格,moverows()
如果所有单元格都不为空,则中止脚本。然后在没有对话框的情况下继续。
我希望你能指出一个方向或有类似问题的线程。
我没有足够的知识将对话框提示与检查结合起来,将其与我现在所拥有的结合起来:
function Moverows5() {
var ss = SpreadsheetApp.openById('sheetID');
var sourceSheet = ss.getSheetByName("sheetname1");
var targetSheet = ss.getSheetByName("sheetname 2");
var values = sourceSheet.getRange("B8:T43").getValues();
var range0 = sourceSheet.getRange("C8:K43");
var range1 = sourceSheet.getRange("Q8:T43");
var range2 = sourceSheet.getRange("P2");
var range3 = sourceSheet.getRange("R2");
var firstFreeRow = goToFirstRowAfterLastRowWithData(targetSheet, "A:AD");
//check column to whatever column you want to check
targetSheet.getRange(firstFreeRow, 1, values.length, values[0].length) .setValues(values);
range0.clearContent();
range1.clearContent();
range2.clearContent();
range3.clearContent();
createPdf()//function gets started
} //end of first function
function goToFirstRowAfterLastRowWithData(sheet, range) {
var v = sheet.getRange(range).getValues(),l = v.length,r;
while (l > 0) {
if (v[l] && v[l][0].toString().length > 0) {
r = (l + 2);
break;
} else {
l--;
}
}
return r ? r : 'no data found';
}
解决方案
复制前检查空白范围
此函数检查值数组中的空白。如果发现空白,它会提醒用户,识别空白单元格并终止该功能。否则,它会进行传输并清除一些范围。
function Moverows5() {
var ss=SpreadsheetApp.getActive();
var sourceSheet=ss.getSheetByName("Sheet1");
var targetSheet=ss.getSheetByName("Sheet2");
var sourceRange=sourceSheet.getRange("B8:T43");
var values=sourceRange.getValues();
var range0=sourceSheet.getRange("C8:K43");
var range1=sourceSheet.getRange("Q8:T43");
var range2=sourceSheet.getRange("P2");
var range3=sourceSheet.getRange("R2");
var firstFreeRow=targetSheet.getLastRow() + 1;
var noBlanks=true;
var bA=[];
var ro=sourceRange.getRow();
var co=sourceRange.getColumn();
for(var ri=0;ri<values.length;ri++) {
for(var ci=0;ci<values[ri].length;ci++) {
if(!values[ri][ci]) {
noBlanks=false;
bA.push(sourceSheet.getRange(ri+ro,ci+co).getA1Notation());
}
}
}
if(noBlanks) {
targetSheet.getRange(firstFreeRow,1,values.length,values[0].length).setValues(values);
range0.clearContent();
range1.clearContent();
range2.clearContent();
range3.clearContent();
//createPdf()//function gets started
}else{
SpreadsheetApp.getUi().alert('Sorry there are blanks in the following cells: ' + bA.join(', '));
return;
}
}
如果您愿意,可以在对有价值的电子表格进行测试之前使用此功能创建一些测试数据。
function createTestData() {
var m=1;//0 for random column positions >0 for fixed position
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
sh.clearContents();
var cols=30;//number of columns
var rows=50;//number of rows
var hpref='hdr';
var hA=[];
var hdrA=[];
var cA=[];
for(var i=0;i<cols;i++) {hA.push(i+1);};
for(var i=0;i<cols;i++) {
if(m==0) {
var index=Math.floor(Math.random() * hA.length);
}else{
var index=i;
}
var hnum=hA[index];
hdrA.push(hpref + hnum);
cA.push(hnum);
if(m==0) {
hA.splice(index,1);
}
}
sh.getRange(1,1,1,hdrA.length).setValues([hdrA]);
var rg=sh.getRange(2,1,rows,cols);
var vA=rg.getValues();
for(var i=0;i<rows;i++) {
for(var j=0;j<cols;j++) {
vA[i][j]=Number(i+1) + ',' + cA[j];
}
}
rg.setValues(vA);
sh.getRange("B8:T43").setBackground('#ff00ff');
}
推荐阅读
- node.js - Azure 函数和 Azure 存储 - 实体已存在 - nodeJS
- mysql - 为什么 UPDATE 语句影响的行数比 SELECT 少
- android - 如何在 android 中使用 kotlin 在按钮中添加网站链接
- react-native - 按钮单击后反应原生平面列表 setValue
- amazon-web-services - 如何在 AWS 中对“tag:UntagResources”操作应用拒绝策略
- excel - 带有条件的 Excel 公式 Vlookup
- c# - 错误 MySql.Data.MySqlClient.MySqlException
- javascript - discord.js 你能记录 Bot 每个 DM 获得的消息吗?
- powershell - 在 Powershell 中创建类 Unix 连续管道的最简单方法
- mysql - 带有like查询的MySql计数响应非常慢