Javascript 使用Google文档在我的天然气发票生成器中的数组开头未定义
我的脚本从谷歌电子表格中获取家具价格和详细信息,并将其导入谷歌文档插件,这显示了一个侧边栏,您可以在侧边栏中选择家具的范围,并将价格与数量的输入字段一起显示到侧边栏中。一旦您点击侧边栏上的“生成发票”,它就会用单位代码、名称、价格和数量填充Google doc表 除了unitCode unitName unitPrice etc的第一次迭代之外,它都可以正常工作。在它显示unitCode、unitPrice、unitName等之前,unitCode unitPrice等还没有定义。很抱歉,代码混乱,这是一项正在进行的工作,尚未整理或真正删除示例代码 另外,我觉得可能有一个更容易的方法来实现我想要做的事情,可能只是使用G表本身,所以绝对可以接受建议 提前谢谢。 未定义如何显示的照片 这是发送到GS文件的HTMLJavascript 使用Google文档在我的天然气发票生成器中的数组开头未定义,javascript,jquery,google-apps-script,Javascript,Jquery,Google Apps Script,我的脚本从谷歌电子表格中获取家具价格和详细信息,并将其导入谷歌文档插件,这显示了一个侧边栏,您可以在侧边栏中选择家具的范围,并将价格与数量的输入字段一起显示到侧边栏中。一旦您点击侧边栏上的“生成发票”,它就会用单位代码、名称、价格和数量填充Google doc表 除了unitCode unitName unitPrice etc的第一次迭代之外,它都可以正常工作。在它显示unitCode、unitPrice、unitName等之前,unitCode unitPrice等还没有定义。很抱歉,代码混
.单位{
边缘顶部:20px;
宽度:100%;
}
客户名称
客户电话
客户电子邮件
家具类型
6S
6S紧凑型
/**
*在文档加载时,为每个按钮分配单击处理程序,并尝试加载
*用户的源语言和目标语言首选项(如果以前已设置)。
*/
$(函数(){
$('input:radio')。单击(函数(){
var sheetDataz=google.script.run
.withFailureHandler(函数(错误){
console.error(“发生错误”,err);
})
.withSuccessHandler(函数(res){
var标签=“”;
var价格=res[2];
var theUnitCode=res[0];
$.each(res[1],函数(索引,值){
var aPrice=价格[指数];
var thePrice=parseFloat(aPrice).toFixed(2);
var unitCode=单位代码[索引];
tab+=''+值+'
';
});
tab+='
创建发票';
$('#theFurnType').html(制表符);
$('doInvoice')。单击(替换);
}).getSheetData($(this).val());
});
函数replaceIt(){
var client_name=$('#client_name').val();
var client_phone=$('#client_phone').val();
var client_email=$('#client_email').val();
var acr=客户名称匹配(/\b(\w)/g);
var发票数量=acr.join(“”);
var date=GetTodayDate();
var发票数量=发票数量+日期;
var theUnits={};
$('.unit')。每个(函数(){
units.unitQuantity+=$(this.val()+',';
units.unitPrice+=$(this.attr(“price”)+;
units.unitName+=$(this.attr(“unitName”)+;
units.unitCode+=$(this.attr(“unitCode”)+;
});
google.script.run.doReplace(客户名称、客户电话、客户电子邮件、发票号码、日期、单位);
}
});
函数GetTodayDate(){
var tdate=新日期();
var dd=tdate.getDate();//日期
var MM=tdate.getMonth();//月
var yyyy=tdate.getFullYear();//年收益率
var currentDate=dd+“-”+(毫米+1)+“-”+yyyy;
返回当前日期;
}
这是GS文件
/**
*@NotOnlyCurrentDoc
*
*上面的注释指示应用程序脚本限制文件的范围
*访问此加载项。它指定此加载项仅将
*尝试读取或修改使用加载项的文件,
*而不是用户的所有文件。授权请求消息
*提交给用户将反映这一有限的范围。
*/
/**
*打开文档时,在Google文档UI中创建菜单项。
*此方法仅由常规加载项使用,并且从不由调用
*移动插件版本。
*
*@param{object}是简单onOpen触发器的事件参数。到
*确定触发器使用的授权模式(ScriptApp.AuthMode)
*在运行中,检查e.authMode。
*/
功能开启(e){
DocumentApp.getUi().createAddonMenu()文件
.addItem('Start','showSidebar')
.addToUi();
}
/**
*安装加载项时运行。
*此方法仅由常规加载项使用,并且从不由调用
*移动插件版本。
*
*@param{object}是简单onInstall触发器的事件参数。到
*确定触发器使用的授权模式(ScriptApp.AuthMode)
*在运行中,检查e.authMode。(实际上,onInstall触发器总是
*在AuthMode.FULL中运行,但onOpen触发器可能是AuthMode.LIMITED或
*AuthMode.NONE。)
*/
函数onInstall(e){
onOpen(e);
}
/**
*在包含加载项用户界面的文档中打开侧栏。
*此方法仅由常规加载项使用,并且从不由调用
*移动插件版本。
*/
函数showSidebar(){
var ui=HtmlService.createHtmlOutputFromFile('sidebar')
.setTitle(“无限发票生成器”);
DocumentApp.getUi().showSidebar(ui);
}
/**
*获取用户选择的文本。如果没有选择,
*此函数显示一条错误消息。
*
*@return{Array.}返回所选文本。
*/
函数getSheetData(furnType){
var ss=SpreadsheetApp.openById('1jLpJ35Szy6R3DDVVuOmi0Cw462ukI2DWzHG6VxYWd1g');
var sheets=ss.getSheets();
如果(furnType==0){
变量范围=[sheets[0]。getRange('A2:A11')。getValues(),sheets[0]。getRange('B2:B11')。getValues(),sheets[0]。getRange('H2:H11')。getValues()];
}
如果(furnType==1){
变量范围=[sheets[1]。getRange('A2:A10')。getValues(),sheets[1]。getRange('B2:B10')。getValues(),sheets[1]。getRange('H2:H10')。getValues()];
}
返回范围;
}
功能或替换(客户名称、客户电话、客户电子邮件、发票编号、日期、单位){
var body=DocumentApp.getActiveDocument().getBody();
var tables=body.getTables();
var表=表[2];
var unitQuantity=units.unitQuantity.split