Google apps script 谷歌应用脚本子字符串
在我的电子表格中,我有一个存储在子文件夹中的图像的文件路径。图像是这样存储的,因为我正在使用appsheet.com为我的雇主制作一个应用程序。他们希望该应用程序使用AppSheet开发,AppSheet不允许将图像直接存储到用于构建这些应用程序的电子表格中 存储在电子表格中的数据也必须被提取并应用到模板中,我正在制作一个谷歌应用程序脚本来实现这一点。我有一个函数脚本,可以找到模板并提取用户选择的数据行,但我无法提取所需的图像 我一直在尝试创建文件路径的子字符串以获取文件名,但我无法做到这一点 在我试图创建子字符串的代码块中,我在Google apps script 谷歌应用脚本子字符串,google-apps-script,google-sheets,google-docs,Google Apps Script,Google Sheets,Google Docs,在我的电子表格中,我有一个存储在子文件夹中的图像的文件路径。图像是这样存储的,因为我正在使用appsheet.com为我的雇主制作一个应用程序。他们希望该应用程序使用AppSheet开发,AppSheet不允许将图像直接存储到用于构建这些应用程序的电子表格中 存储在电子表格中的数据也必须被提取并应用到模板中,我正在制作一个谷歌应用程序脚本来实现这一点。我有一个函数脚本,可以找到模板并提取用户选择的数据行,但我无法提取所需的图像 我一直在尝试创建文件路径的子字符串以获取文件名,但我无法做到这一点
sig=signature.getText()行上得到一个错误代码>。错误为TypeError:signature.getText不是函数(第176行,文件“code”)
这是文件路径看起来像的Signatures/FT101.Signed(%Signed%).103735.png
,我需要的子字符串看起来像这样FT101.Signed(%Signed%).103735.png
我尝试了多种方法,这些方法是由关于堆栈溢出的其他问题提供的,以及Google Apps脚本参考中可用的任何潜在方法
以下函数从提示符获取用户输入,并使用它查找所需的行号。然后,它从该行获取数据,并根据数据所属的类别将其应用于模板
var response = {};
var sign = "";
function chooseRowMethod(templateId){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
var data = sheet.getRange(2, 2, 11, 18).getValues();//starting with row 2 and column 1 as our upper-left most column, get values from cells from 1 row down, and 15 columns along - hence (2,1,1,15)
var docTitle = sheet.getRange(2, 2, 11, 1).getValues();//this is grabbing the data in field B2
var docTitleTagNumber = sheet.getRange(2, 3, 11, 1).getValues();
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1;
var yyyy = today.getFullYear();
today = dd + '/' + mm + '/' + yyyy;
for(var i = 0; i < values.length; i++){
for(var j = 0; j < values[i].length; j++){
if(values[i][j] == response){
Logger.log(i);
var row = data[i - 1];
var docId = DriveApp.getFileById(templateId).makeCopy().getId();
var doc = DocumentApp.openById(docId);
var body = doc.getActiveSection();
body.replaceText("%SITEID%", row[0]);
body.replaceText("%TAG%", row[1]);
...
body.replaceText("%SAT%", row[14]);
var signature = sheet.getRange(2, 18, 11, 1).getValues();
var sig;
var sign = {};
for(var i = 0; i < values.length; i++){
for(var j = 0; j < values[i].length; j++){
if(values[i][j] == response){
sig = signature.getText();
sign[i][0] = sig.substring(sig.indexOf("/") + 1);
}
}
}
var sigFolder = DriveApp.getFolderById("1LiJKGjTbpvRZ5RrMTQoyTuAjrozA14FN");
var file = sigFolder.getFilesByName(sign);
var image = file.getId();
body.appendImage(image);
doc.saveAndClose();
var file = DriveApp.getFileById(doc.getId());
var newFolder = DriveApp.getFolderById("16wRGBVdV0OZ5YfKhqEQSFMsux-ekGCCa");
newFolder.addFile(file);
var newDocTitle = docTitle[i - 1][0];
var newDocTagNumber = docTitleTagNumber[i - 1][0];
doc.setName(newDocTitle + " " + newDocTagNumber + " " + today);
}
}
}
}
var-response={};
var符号=”;
函数选择器方法(templateId){
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var dataRange=sheet.getDataRange();
var values=dataRange.getValues();
var data=sheet.getRange(2,2,11,18).getValues();//从第2行和第1列开始,作为最左上方的列,从下1行和15列的单元格中获取值-因此(2,1,1,15)
var docTitle=sheet.getRange(2,2,11,1).getValues();//这是在抓取字段B2中的数据
var docTitleTagNumber=sheet.getRange(2,3,11,1).getValues();
var today=新日期();
var dd=today.getDate();
var mm=today.getMonth()+1;
var yyyy=today.getFullYear();
今天=dd+'/'+mm+'/'+yyyy;
对于(变量i=0;i
这就是我一直试图获得图像的地方
var signature = sheet.getRange(2, 18, 11, 1).getValues();
var sig;
var sign = {};
for(var i = 0; i < values.length; i++){
for(var j = 0; j < values[i].length; j++){
if(values[i][j] == response){
sig = signature.getText();
sign[i][0] = sig.substring(sig.indexOf("/") + 1);
}
}
}
var sigFolder = DriveApp.getFolderById("1LiJKGjTbpvRZ5RrMTQoyTuAjrozA14FN");
var file = sigFolder.getFilesByName(sign);
var image = file.getId();
body.appendImage(image);
var signature=sheet.getRange(2,18,11,1).getValues();
var-sig;
var符号={};
对于(变量i=0;i
下一个函数为用户提供提示并应用正确的模板
function chooseRow(){
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.prompt('Please enter the Tag number of the row you wish to print.', ui.ButtonSet.OK_CANCEL);
var button = result.getSelectedButton();
response = result.getResponseText();
if (button == ui.Button.OK) {
// User clicked "OK".
ui.alert('Your tag number is' + response + '.');
} else if (button == ui.Button.CANCEL) {
// User clicked X in the title bar.
ui.alert('You closed the dialog.');
return 'the end';
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var dataRange = sheet.getDataRange();
var values = dataRange.getValues();
var category = sheet.getRange(2, 4, 11, 1).getValues();
var templateId = {};
for(var i = 0; i < values.length; i++){
for(var j = 0; j < values[i].length; j++){
if(values[i][j] == response && category[i - 1][0] == "Instrument"){
templateId = "1cx2-6ju-o7DaRPnbuYxxdvVVFeGQzpTXaXV3wMuRpqo";
chooseRowMethod(templateId);
return "";
} else if(values[i][j] == response && category[i][0] == "Motor" || values[i][j] == response && category[i][0] == "Valve"){
templateId = "1sYx_JcoDHY-pzjEDlxMMa3dtdzOOE8CyyLGQk8WHg7s";
chooseRowMethod(templateId);
return "";
}
}
}
}
函数选择器w(){
var ui=SpreadsheetApp.getUi();//相同的变体。
var result=ui.prompt('请输入要打印的行的标记号',ui.ButtonSet.OK\u CANCEL);
var button=result.getSelectedButton();
response=result.getResponseText();
if(button==ui.button.OK){
//用户单击“确定”。
ui.alert('您的标签号为'+response+');
}else if(button==ui.button.CANCEL){
//用户单击了标题栏中的X。
ui.alert('您关闭了对话框');
返回“结束”;
}
var ss=SpreadsheetApp.getActiveSpreadsheet();
var sheet=ss.getActiveSheet();
var dataRange=sheet.getDataRange();
var values=dataRange.getValues();
var category=sheet.getRange(2,4,11,1).getValues();
var templateId={};
对于(变量i=0;i
预期结果是文件pa的子字符串
var file = sigFolder.getFilesByName(sign);
var image = file.getId();
body.appendImage(image);
doc.saveAndClose();
var files=sigFolder.getFilesByName(sign);
var n=0;
while(files.hasNext()) {
var file=files.next();
n++;
}
if(n>1)SpreadsheetApp.getUi().alert('There is more than one file with this name: ' + sign);
var image = file.getId();
body.appendImage(image);
doc.saveAndClose();
var files=sigFolder.getFilesByName(sign);
if(files.hasNext())var file=files.next()
if(files.hasNext())throw('You have more than one file with this name: ' + sign);
var image = file.getId();
body.appendImage(image);
doc.saveAndClose();
function chooseRow(){
var ui = SpreadsheetApp.getUi(); // Same variations.
var result = ui.prompt('Please enter the Tag number of the row you wish to print.', ui.ButtonSet.OK_CANCEL);
var button = result.getSelectedButton();
response = result.getResponseText();
if (button == ui.Button.OK) {
// User clicked "OK".
ui.alert('Your tag number is' + response + '.');
} else if (button == ui.Button.CANCEL) {
// User clicked X in the title bar.
ui.alert('You closed the dialog.');
return 'the end';
}
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var tags = sheet.getRange(2, 4, 11, 1).getValues();
var category = sheet.getRange(2, 3, 11, 1).getValues();
for(var i = 0; i < tags.length; i++){
if(tags[i][0] == response && category[i][0] == "Instrument"){
var templateId = "my_template_id";
chooseRowMethod(templateId, i);
return ""; // You don't need to return empty string, just return null
} else if(tags[i][0] == response && category[i][0] == "Motor" || tags[i][0] == response && category[i][0] == "Valve"){
var templateId = "my_template_id_bis";
chooseRowMethod(templateId, i);
return ""; // You don't need to return empty string, just return null
}
}
}
function chooseRowMethod(templateId, rowNumber){
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getActiveSheet();
var data = sheet.getRange(2, 2, 11, 18).getValues();
var today = new Date();
var dd = today.getDate();
var mm = today.getMonth() + 1;
var yyyy = today.getFullYear();
today = dd + '/' + mm + '/' + yyyy;
var row = data[rowNumber];
var docTitle = row[1];
var docTitleTagNumber = row[2];
var docId = DriveApp.getFileById(templateId).makeCopy().getId();
var doc = DocumentApp.openById(docId);
var body = doc.getActiveSection();
body.replaceText("%SITEID%", row[0]);
body.replaceText("%TAG%", row[1]);
// ...
body.replaceText("%SAT%", row[14]);
var signature = row[17];
var sign = signature.substring(signature.indexOf("/") + 1);
var sigFolder = DriveApp.getFolderById("my_sigfolder_id");
var files=sigFolder.getFilesByName(sign);
var n = 0;
while(files.hasNext()) {
var file=files.next();
n++;
} if(n>1) {
SpreadsheetApp.getUi().alert('There is more than one file with this name: ' + sign);
}
body.appendImage(file);
doc.saveAndClose();
var file = DriveApp.getFileById(doc.getId());
var newFolder = DriveApp.getFolderById("my_newfolder_id");
newFolder.addFile(file);
doc.setName(docTitle + " " + docTitleTagNumber + " " + today);
}