这是我发布的有关产品订购系统的上一个问题的后续措施。目前,为解决原始问题而编写的代码在修改为我的需求后不起作用,并且我无法找出问题。
我尝试了许多方法,但无法弄清楚是什么原因导致订单无法复制到订单中。
这是moveToOrder调试日志: 这是完整的code.gs页面(其他html页面完全没有更改)
function clearOrder(){
//Clears the Current Order Form and Quantities
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet()
var setsheet = spreadsheet.setActiveSheet(spreadsheet.getSheets()[1])
var toclear = setsheet.getRange("E2:E100")
var clear = toclear.clearContent()
var ss = spreadsheet.setActiveSheet(spreadsheet.getSheets()[0])
var clearRange = ss.getRange("A4:E100")
var clearData = clearRange.clearContent()
var dateRange = ss.getRange("A1:E1")
var clearDate = dateRange.clearContent()
}
function printOrder(){
//Selects the Applicable Cells to be Printed
var ss = SpreadsheetApp.getActiveSheet()
var dateRange = ss.getRange("C1:E1")
var currentDate = new Date();
var formatDate = dateRange.setNumberFormat("dddd, m/d/yy");
var addDate = dateRange.setValue(currentDate)
var textRange = ss.getRange("A1:B1")
var addText = textRange.setValue("Order Compiled On:")
var lastRow = ss.getLastRow()
var finRange = ss.getRange("A1:E"+ lastRow)
var printRange = ss.setActiveRange(finRange)
}
function onOpen() {
SpreadsheetApp.getUi().createMenu('Order Materials')
.addItem('Show Order Dialog', 'displayOrderDialog')
.addToUi();
}
function include(filename){
return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
function displayOrderDialog() {
var userInterface=HtmlService.createTemplateFromFile('dialog').evaluate().setWidth(600).setHeight(300).setTitle('Inventory');
SpreadsheetApp.getUi().showModelessDialog(userInterface,'Product List');
SpreadsheetApp.getActive().getSheetByName('Order').activate();
}
function getInventory() {//show order dialog for selecting parts
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Part List');
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var pA=rg.getValues();
var html="<style>td,th{border:1px solid black;}</style><table>";
html+='<tr><th>Brand</th><th>Product Description</th><th>Size and Type</th><th>Item Number</th><th>Quantity</th><th> </tr>';
for(var i=0;i<pA.length;i++) {
html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td><input type="text" value="%s" id="%s" size="6" /></td><td><input type="button" value="Order" onClick="moveToOrder(\'%s\',\'%s\');"/></tr>',pA[i][0],pA[i][1],pA[i][2].toString().replace(/(")/g,'\\"'),pA[i][3],pA[i][4],Number(i+2),pA[i][2],i+2);
}
html+='</table>';
var orderObj={html:html};
return orderObj;
}
function moveToOrder(orderObj) { //moves selected part to active page so make sure your on the right order form
//orderObj['remaining']=debitInventory(orderObj);
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Part List');
var rg=sh.getRange(2,1,1,4);
var pA=rg.getValues();
var osh=ss.getSheetByName('Order');
pA[0].splice(pA[0].length,0,orderObj.quantity);
osh.appendRow(pA[0]);
return orderObj;
}
printOrder和clearOrder函数由我编写,与订单对话框无关,但是我认为完整的表格是最好的。谢谢。
这里是工作表副本的链接(您应该可以从那里访问代码)。随时编辑,但需要:
答案 0 :(得分:0)
您似乎在零件列表中添加了一列,但没有为该<td></td>
添加值,所以我认为这可能会解决一个问题html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td><input type="text" value="%s" id="%s" size="6" /></td><td><input type="button" value="Order" onClick="moveToOrder(\'%s\',\'%s\');"/></tr>',pA[i][0],pA[i][1],pA[i][2],pA[i][3],pA[i][4],"inv-"+ Number(i+2),pA[i][2],i+2,"q-"+ Number(i+2));
我还注意到,现在您的大小和类型以及其他位置都有引号,因此我认为您必须在数据中搜索引号并将其转义,这可能就是为什么现在不复制的原因。但老实说,我不确定。
您的尺寸和类型数据内有引号,如下所示:
最有可能收到格式错误的html错误。
您可能可以使用类似pA[i][2].toString().replace(/"/g,'\\"');
因此html行变成这样:
html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td><input type="text" value="%s" id="%s" size="6" /></td><td><input type="button" value="Order" onClick="moveToOrder(\'%s\',\'%s\');"/></tr>',pA[i][0],pA[i][1],pA[i][2].toString().replace(/(")/g,'\\"'),pA[i][3],pA[i][4],"inv-"+ Number(i+2),pA[i][2],i+2,"q-"+ Number(i+2));
我尽力使这一点变得清楚。我以略有不同的方式重写了代码,以便可以使用标题列标题来标识数据。
function getInventory() {//show order dialog for selecting parts
var ss=SpreadsheetApp.getActive();
var sh=ss.getSheetByName('Part List');
var rg=sh.getRange(2,1,sh.getLastRow()-1,sh.getLastColumn());
var pA=rg.getValues();
var dObj={};
var hA=sh.getRange(1,1,1,sh.getLastColumn()).getValues()[0].map(function(r){return r.replace(/ /g,'');});
var html="<style>td,th{border:1px solid black;}</style><table>";
html+='<tr><th>Brand</th><th>Product Description</th><th>Size and Type</th><th>Item Number</th><th>Quantity</th><th> </tr>';
for(var i=0;i<pA.length;i++) {
for(var j=0;j<pA[i].length;j++) {
dObj[hA[i][j]]=pA[i][j];
}
html+=Utilities.formatString('<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td><input type="text" value="%s" id="%s" size="6" /></td><td><input type="button" value="Order" onClick="moveToOrder(\'%s\',\'%s\');"/></tr>',dObj.Brand,dObj.ProductDescription,dObj.SizeandType.replace(/(")/g,'\\"'),dObj.ItemNumber,dObjQuantity,'q-' + Number(i+2),dObj.ItemNumber,i+2);
}
html+='</table>';
var orderObj={html:html};
return orderObj;
}
这是一个草图,希望可以帮助您了解这里的情况。
从我的角度来看,我不确定它是否有帮助。但是我现在就走。