首页 > 解决方案 > 从复选框中获取布尔值并将它们作为数字附加到另一个工作表中,例如数据库

问题描述

嗨 Google Apps 脚本程序员,图片为 Google 表格中的三明治店制作一种数据库,其中大多数表格是数据表,第 1 列是自动编号字段。第一张表是名为 MySubShop 的主订单。它将记录订单#、收银员、客户、日期/时间,并有一堆用于食物的复选框。第二张表名为 Lookups,仅查找面包类型和饮料类型,因为人们只能选择 1 种面包和 1 种饮料。其余的工作表类似于数据库表,并命名如下:Breads、Meats、Cheeses、Condiments 和 Sides。

在主 MySubShop 表中,在订单期间,用户将主要单击食品旁边的复选框,因为用户可以选择 > 1 个顶部项目。例如,对于奶酪,切达干酪和普罗卧干酪都可以检查。与肉类、配菜等相同。

将单击一个按钮以获取 MySubShop 订单表上所有单元格的值,然后在所有其他表中设置这些值。

问题 - 问题是我真的很想像数据库一样存储值。以奶酪为例。如果检查了 cheddar 和 provolone 旁边的复选框,我希望 Sheets 获取这些值,然后在 Cheeses 表中,像这样布置数据:

orderID , cheeseID
1 , 1 其中 1 = 切达干酪
1 , 4 其中 4 = provolone

不过,与数据库不同的是,切达干酪和普罗卧干酪是由它们在 MySubShop 主工作表上的范围定义的。Chedder 是单元格 G2 中的复选框,provolone 是单元格 G5 中的复选框。因此,如果 G2 被检查为 TRUE 并且 G5 为 TRUE,则获取这些值,并在单击按钮时设置这些值。

问题 - 我是 Apps Script 的新手,希望得到一些帮助来找出其中的一些代码,例如,用于 Cheeses 的代码。如何在单元格 G2 中获取 TRUE 值并将其更改为 Cheeses 表第 2 列最后一行的数值。

对此的任何帮助将不胜感激。谢谢

    //GRAB ALL OF AN ORDER'S DATA ON MYSUBSHOP SHEET AND COPY IT TO THE OTHER SHEETS
    function setValuesAcrossSheets() {
      var mysheet = SpreadsheetApp.getActive().getSheetByName('MySubShop');

      //Get the order info
      var ordersvalues = [[mySubShop.getRange("B5").getValue(), 
                           mySubShop.getRange("B4").getValue(), 
                           mySubShop.getRange("B3").getValue(),
                           mySubShop.getRange("B2").getValue()]];

      orders.getRange(orders.getLastRow()+1, 1, 1, 4).setValues(ordersvalues);

      //increase the order number to get ready for the next order
      mySubShop.getRange("B5").setValue(newordernum+1);

//trying to figure out the best way to do this...
      var breadvalues = sheet.getRange("c2");  //a listbox that pulls options from another sheet
      var meatvalues = ['d5', 'd6', 'd7', 'd8', 'd9', 'd10']; //checkboxes in d5:d10
      var cheesevalues = ['g2', 'g3', 'g3', 'g4', 'g5']; //checkboxes in g2:g5
      var beveragevalues = sheet.getRange("f8"); //checkboxes in g2:g5
      var condimentvalues = ['j2', 'j3', 'j4', 'j5', 'j6', 'j7', 'j8']; //checkboxes in j2:j8
      var sidesvalues = ['m2', 'm3', 'm4', 'm5', 'm6']; //checkboxes in m2:m6

标签: google-apps-scriptgoogle-sheets

解决方案


我使用数组改进了解决方案。希望速度会大大提高。试试看。

我介绍了一个“详细信息”表。订单一经确认,立即写入此表。您可以轻松过滤它。

为方便起见,我在所有其他从明细表中提取数据的表中提供了查询。

https://docs.google.com/spreadsheets/d/10yvp5GFfR1b-I5fpuCbuhvkp_dahENowzQQZH6c9QOE/edit?usp=sharing


function confirm_order() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ordsht = ss.getSheetByName('MySubShop');
  var sumsht = ss.getSheetByName('Orders');
  var detsht = ss.getSheetByName("Detail")
  //var loksht = ss.getSheetByName('Lookups');
  //var metsht = ss.getSheetByName('Meats');
  //var brdsht = ss.getSheetByName('Breads');
  //var chssht = ss.getSheetByName('Cheeses');
  //var consht = ss.getSheetByName('Condiments');
  //var sidsht = ss.getSheetByName('Sides');
  //var bevsht = ss.getSheetByName('Beverages');
  var ordvals = ordsht.getRange("A1:M10").getValues();
  //Browser.msgBox(ordvals);
  var ordary=[];
  sumsht.appendRow([ordvals[4][1], ordvals[3][1],ordvals[2][1],ordvals[1][1] , ordvals[5][1] ]);//order list
  ordary.push(["Bread",ordvals[4][1], ordvals[1][2] , ordvals[5][1] ]);//bread
  ordary.push(["Beverage",ordvals[4][1], ordvals[7][5], ordvals[5][1] ]);//beverage
  //meat
  for (i=4;i<10;i++){
    if (ordvals[i][3]==true){
      ordary.push(["Meat",ordvals[4][1], ordvals[i][2], ordvals[5][1] ]);
    }//if
  }//for
  //cheese
  for (i=1;i<5;i++){
    if (ordvals[i][6]){
      ordary.push(["Cheese",ordvals[4][1], ordvals[i][5], ordvals[5][1] ]);
    }//if
  }//for
  //condiments
  for (i=1;i<8;i++){
    if (ordvals[i][9]){
      ordary.push(["Condiment",ordvals[4][1], ordvals[i][8] , ordvals[5][1]]);
    }//if
  }//for
  //sides
  for (i=1;i<6;i++){
    if (ordvals[i][12]){
      ordary.push(["Sides",ordvals[4][1], ordvals[i][11] , ordvals[5][1]]);
    }//if
  }//for
  //increase the order number to get ready for the next order
  ordsht.getRange("B5").setValue(ordvals[4][1]+1);
  detsht.getRange("A"+(detsht.getLastRow()+1)+":D"+(detsht.getLastRow()+ordary.length)).setValues(ordary);

}
//




推荐阅读