google-apps-script - 从复选框中获取布尔值并将它们作为数字附加到另一个工作表中,例如数据库
问题描述
嗨 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
解决方案
我使用数组改进了解决方案。希望速度会大大提高。试试看。
我介绍了一个“详细信息”表。订单一经确认,立即写入此表。您可以轻松过滤它。
为方便起见,我在所有其他从明细表中提取数据的表中提供了查询。
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);
}
//
推荐阅读
- python - 数据帧的无监督聚类方法的问题
- php - 如何解决 XML 代码之前的文本问题
- r - 使用 ggplot2 在世界地图中绘制英国的次区域
- spring - 使用 Spring 创建类似于 sso 的 XML 断言
- powershell - Powershell 5. SecureString 解密,最大限度地减少内存时间
- java - java 8 不再是 lts 了吗?
- google-cloud-platform - 在 Google BigQuery 中执行一批查询后,如何更改结果作业的名称?
- java - Kotlin 如何在单元测试中模拟泛型类?
- php - 在php中销毁会话后没有被重定向到页面
- python - 缺少 urllib 响应标头