Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用Google文档在我的天然气发票生成器中的数组开头未定义_Javascript_Jquery_Google Apps Script - Fatal编程技术网

Javascript 使用Google文档在我的天然气发票生成器中的数组开头未定义

Javascript 使用Google文档在我的天然气发票生成器中的数组开头未定义,javascript,jquery,google-apps-script,Javascript,Jquery,Google Apps Script,我的脚本从谷歌电子表格中获取家具价格和详细信息,并将其导入谷歌文档插件,这显示了一个侧边栏,您可以在侧边栏中选择家具的范围,并将价格与数量的输入字段一起显示到侧边栏中。一旦您点击侧边栏上的“生成发票”,它就会用单位代码、名称、价格和数量填充Google doc表 除了unitCode unitName unitPrice etc的第一次迭代之外,它都可以正常工作。在它显示unitCode、unitPrice、unitName等之前,unitCode unitPrice等还没有定义。很抱歉,代码混

我的脚本从谷歌电子表格中获取家具价格和详细信息,并将其导入谷歌文档插件,这显示了一个侧边栏,您可以在侧边栏中选择家具的范围,并将价格与数量的输入字段一起显示到侧边栏中。一旦您点击侧边栏上的“生成发票”,它就会用单位代码、名称、价格和数量填充Google doc表

除了unitCode unitName unitPrice etc的第一次迭代之外,它都可以正常工作。在它显示unitCode、unitPrice、unitName等之前,unitCode unitPrice等还没有定义。很抱歉,代码混乱,这是一项正在进行的工作,尚未整理或真正删除示例代码

另外,我觉得可能有一个更容易的方法来实现我想要做的事情,可能只是使用G表本身,所以绝对可以接受建议

提前谢谢。 未定义如何显示的照片

这是发送到GS文件的HTML


.单位{
边缘顶部: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