如何使用 Apps 脚本根据电子表格中的可用库存限制 Google 表单输入?

问题描述 投票:0回答:1

我在一家使用 Google 表格管理运营的公司工作。我们有一个用于从另一个部门请求产品的表格,其中用户请求的数量不得大于库存中的可用数量。 我正在尝试使用 Google Apps 脚本,但这很有挑战性。

以下是表格和电子表格的示例:

操作电子表格很容易,例如,我使用以下代码将产品名称和数量添加到地图中:

/**
 * Retrieves stock data from a Google Sheets spreadsheet and returns it as a dictionary (map).
 *
 * @returns {Object} A dictionary where keys are product names and values are quantities in stock.
 */

/**
 * Retrieves stock data from a Google Sheets spreadsheet and returns it as a map.
 *
 * @returns {Map} A map where keys are product names and values are quantities in stock.
 */
function getStockMap() 
{
    // Spreadsheet ID
    const spreadsheetId = "1J5twCP4L4Smy7FP4JbARD3qVB_mv8rnQ1fRN5y6LvaQ";

    // Open the spreadsheet
    const spreadsheet = SpreadsheetApp.openById(spreadsheetId);

    // Get the "Stock" sheet
    const sheet = spreadsheet.getSheetByName("Stock");

    // Define the range of cells containing stock data
    const range = sheet.getRange('B1:D8');

    // Get the values from the range
    const data = range.getValues();

    // Create an empty map to store stock data
    const stockMap = new Map();

    // Iterate through the data and populate the stock map
    for (let i = 0; i < data.length; i++) 
    {
        const product = data[i][0];
        const quantity = data[i][2];
        stockMap.set(product, quantity);
    }

    // Log the stock map
    for (const [product, quantity] of stockMap) 
    {
        Logger.log(`${product}: ${quantity}`);
    }

    return stockMap;
}

搜索后,我发现了这个相关的SO问题:如何在Google Form或Google Sheets上使用GAS限制基于两个ID的Google Forms提交

但是,我不想使用“OnSubmit”触发器,因为我仍然会提交带有错误数据的表单。

@ziganotschka提到了有关如何以编程方式将文本输入验证添加到表单的谷歌文档(here,但似乎您需要创建一个字段来执行此操作,但我需要向现有字段添加验证)

感谢任何帮助,这是我工作的第三天,我是一名Python开发人员,从未接触过JS。另一个问题是,谷歌的文档似乎告诉您所有可用的功能,但没有非常有用的示例、指南或解释为什么会这样。也许我很笨,但我过去在使用谷歌文档时遇到过问题,我发现它很难解析,所以我寻求帮助。

google-sheets google-apps-script google-forms
1个回答
0
投票

早上好!

您可以自动更新所请求数量的项目的数据验证吗?

// Add a text item to a form and require it to be a number within a range.
var textItem = form.addTextItem().setTitle('Pick a number between 1 and 100?');
var textValidation = FormApp.createTextValidation()
  .setHelpText('Input was not a number between 1 and 100.')
  .requireNumberBetween(1, 100)
  .build();
textItem.setValidation(textValidation);

https://developers.google.com/apps-script/reference/forms/text-validation

您可以在表单的 onOpen(e) 触发器上运行此函数。

但是,无论选择哪种产品,这都将始终应用相同的数据验证。 解决方法是创建部分,每个产品都有自己的“请求数量”部分及其自定义数据验证。导航将允许您根据用户选择的产品将其引导至正确的部分。您可以使用上面的代码片段来定义每个部分的每个数据验证。

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.