Наблюдение за интерфейсом диалога - PullRequest
0 голосов
/ 28 апреля 2019

Это продолжение предыдущего вопроса о системе заказа продукции, который я разместил.В настоящее время код, который был написан для решения исходной проблемы, не работает после пересмотра моих потребностей, и я не могу выяснить проблему.

Я перепробовал много методов, но не могу понять, что мешаетзаказ от копирования до формы заказа.

Это текущая диалоговая форма: enter image description here

Это текущий лист заказа (куда заказ должен быть скопирован): enter image description here

Это список деталей, из которого диалоговое окно извлекает данные: enter image description here

Это отладка moveToOrderЖурнал: enter image description here Это полная страница 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>&nbsp;</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 написаны мной ине имеет ничего общего с диалоговым окном заказа, но я решил, что полный лист будет лучше.Спасибо.

Вот ссылка на копию листа (оттуда вы сможете получить доступ к коду).Не стесняйтесь редактировать, однако необходимо:

Ссылка на электронную таблицу Ссылка на скрипт

1 Ответ

0 голосов
/ 28 апреля 2019

Похоже, вы добавили столбец в список деталей, но не добавили значение для этого <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));

Я также заметил, что у вас теперь естьцитаты в вашем размере и типе и, возможно, в других местах, поэтому я думаю, что вам придется искать цитаты в ваших данных и избегать их, и, вероятно, поэтому он не копирует сейчас.Но, честно говоря, я не могу быть уверен.

Внутри ваших данных о размере и типе есть "кавычки", как показано ниже:

enter image description here

Скорее всего, вы получили некорректную ошибку 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));

I 'Мы постарались сделать это как можно более понятным. Я переписал код немного по-другому, чтобы заголовки столбцов заголовков могли использоваться для идентификации данных.

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>&nbsp;</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;
}

А вот эскиз, который, я надеюсь, поможетпомочь вам понять, что здесь происходит.

enter image description here

Пока я смотрю на это, я не уверен, что это поможет вообще. Но я уйдуна данный момент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...