使用应用程序脚本在谷歌工作表中自动编号



我目前正在与Google Forms和Appsheet合作,为我的公司创建一个投诉跟踪应用程序。该项目要求通过谷歌表单提交的每个投诉都有一个ComplaintID。该投诉ID的格式是当前年份,然后是投诉编号(例如,2020-001将是2020年收到的第一个投诉(。根据这个项目的规范,前导零是必需的。时间戳捕获年份,因此所有必要的数据都存在。

这是我在howtogoogleapps.com上找到的一个似乎几乎可以工作的脚本:

function addAutoNumber() {
var sheet = SpreadsheetApp.getActive().getSheetByName("Form responses 1");
// Get the last row that has content.
var LastRow = sheet.getLastRow();
// Set the first Auto Number
var AutoNumberStart="2020-001";

//---- First run ------------

//Check if the first column is Timestamp
if (sheet.getRange(1, 1).getValue() == "Timestamp") {
// insert a column to the left and the text "ComplaintID" in the first row
sheet.insertColumnBefore(1);
sheet.getRange(1, 1).setValue("ComplaintID");
// Fix for (probably) a bug that formats the new column 
// with the same format of the column used to insert it,
// in this case the column gets the date format like the Timestamp column.
// So we set the format to number
sheet.getRange("A2:A").setNumberFormat(0); 
// check if there are already form responses and add numbers for them
if (LastRow>1) {
for(var ii=2; ii <= LastRow; ii++) {
sheet.getRange(ii, 1).setValue(AutoNumberStart);
AutoNumberStart="2020-"+ (parseInt(AutoNumberStart.substr(5,3)+1));
}
}
}

// ---- Add new Auto Number ----------

// Check if there is a Number in the AutoNumber column 
// for the last Form Submission
if (sheet.getRange(LastRow, 1).isBlank()) {
// Check if it is the first Form submission and set the AutoNumberStart
if (LastRow == 2) {
sheet.getRange(LastRow, 1).setValue(AutoNumberStart);
} else {
// Get the Last AutoNumber from the previous row
var LastAutoNumber = sheet.getRange(LastRow-1, 1).getValue();
// Set the next AutoNumber
sheet.getRange(LastRow, 1).setValue("2020-"+ (parseInt(LastAutoNumber.substr(5,3)+1)));
}
}
}

然而,返回的是2020-001、2020-11、2020-111、2020-1111、2020-1110等。这不完全是我需要的。如果你能帮我解决这个问题,我将永远感激!

在这种情况下,我认为parseInt需要用于AutoNumberStart.substr(5, 3)。因为AutoNumberStart.substr(5, 3)是字符串类型。因此,当使用parseInt(AutoNumberStart.substr(5,3)+1)时,1被添加到AutoNumberStart.substr(5,3)作为字符串。我认为这就是你问题的原因。因此,为了避免这种情况,我想提出以下修改。

发件人:

AutoNumberStart="2020-"+ (parseInt(AutoNumberStart.substr(5,3)+1));

收件人:

AutoNumberStart = "2020-"+ ("00" + (parseInt(AutoNumberStart.substr(5, 3), 10) + 1)).slice(-3);
  • AutoNumberStart2020-001时,在该修改中,parseInt(AutoNumberStart.substr(5, 3), 10)是编号的1。而CCD_ 11就是CCD_

测试:

const AutoNumberStart1 = "2020-001";
const res1 = "2020-"+ ("00" + (parseInt(AutoNumberStart1.substr(5, 3), 10) + 1)).slice(-3);
console.log(res1)
const AutoNumberStart2 = "2020-099";
const res2 = "2020-"+ ("00" + (parseInt(AutoNumberStart2.substr(5, 3), 10) + 1)).slice(-3);
console.log(res2)

注:

  • 当你想使用超过1000(超过4位(的数字时,下面的修改如何?在这种情况下,返回2020-1000

    const AutoNumberStart = "2020-999";
    const value = (parseInt(AutoNumberStart.substr(5, 3), 10) + 1).toString();
    const res = "2020-"+ ("00" + value).slice(-(value.length > 3 ? value.length : 3));
    console.log(res)
    

参考文献:

  • parseInt((
  • 切片((

相关内容

  • 没有找到相关文章

最新更新