Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Google sheets自定义函数错误“结果不是数字”_Javascript_Google Apps Script_Google Sheets_Custom Function - Fatal编程技术网

Javascript Google sheets自定义函数错误“结果不是数字”

Javascript Google sheets自定义函数错误“结果不是数字”,javascript,google-apps-script,google-sheets,custom-function,Javascript,Google Apps Script,Google Sheets,Custom Function,我有一个GoogleSheetsApps脚本自定义函数,它会产生错误:结果不是数字。从自定义函数返回的值,尽管无论应用于单元格的“格式”如何,数字都不会被视为数字。计算出的值不能用于其他内置函数,如SUM 有人问过类似的问题,请看,可能还有其他问题。。。但不要解释如何更改返回类型 数据类型的GoogleApps脚本不清楚如何将自定义函数强制为特定的返回类型 链接到带有脚本的示例 下面是我在Notes getCell中遇到的问题,下面没有包括: /** Sum all transactions

我有一个GoogleSheetsApps脚本自定义函数,它会产生错误:结果不是数字。从自定义函数返回的值,尽管无论应用于单元格的“格式”如何,数字都不会被视为数字。计算出的值不能用于其他内置函数,如SUM

有人问过类似的问题,请看,可能还有其他问题。。。但不要解释如何更改返回类型

数据类型的GoogleApps脚本不清楚如何将自定义函数强制为特定的返回类型

链接到带有脚本的示例

下面是我在Notes getCell中遇到的问题,下面没有包括:

/**
 Sum all transactions across sheets that match category and date range.

 @param category_name The category to filter on
 @param date_min Minimum date in range to filter
 @param date_max Maximum Date in range to filter
 @param [time] Optional update time/date
 @return The sum of transactions that match input criteria
 @customfunction
 */
function sumCategory(category_name, date_min, date_max, time) {      
  var date_min = new Date(date_min);
  var date_max = new Date(date_max);
  var date_month = date_min.getMonth();
  var date_year = date_min.getYear();

  var sheets = ['Account1', 'Account2'];

  var column_name = { 
    Date:   "Date",
    Category: "Category",
    Amount: "Amount"
  };

  var msg = "";
  var sum = 0.0;
  var spreadsheet = SpreadsheetApp.getActive();

  // Number of seconds before the cache expires.
  var cache_time = 120;

  var cache = CacheService.getScriptCache();

  // Build the cache key with requested category_year_month
  var cache_key = category_name + '_' + date_year.toString() + '_' + date_month.toString();

  // If we have this category cached, then return it...
  var cached = cache.get(cache_key);
  if (cached != null) {
    return cached;
  }

  // Category sum for cache
  var cat_sum = { }; 

  // Loop through all sheets, and all transactions building the category sum cache
  for(var x = 0; x < sheets.length; x++){  
    var s = sheets[x];
    //Browser.msgBox("Working on sheet: " + s);
    var cur_sheet = spreadsheet.getSheetByName(s);

    // Get data range for whole sheet 
    var data =  cur_sheet.getDataRange();
    var num_rows = data.getNumRows();
    var num_cols = data.getNumColumns();

    // Loop through all rows in this sheet
    for(var i = 2; i < num_rows; i++){
      var xdate = new Date(getCell(column_name.Date, i, data));
      var cat = getCell(column_name.Category, i, data);
      var amount = getCell(column_name.Amount, i, data);

      // If the transaction category is empty, set to 'Uncategorized'
      if(!cat){
        cat = "Uncategorized";
      }
      var xkey = cat + '_' + xdate.getYear().toString() + '_' + xdate.getMonth().toString();

      // Check if we have not already stored this category
      if(!cat_sum.hasOwnProperty(xkey)){
        // initialize
        cat_sum[xkey] = 0.0;
      }
      cat_sum[xkey] = cat_sum[xkey] + parseFloat(amount);

    }// end loop rows
  }// end loop sheets

  // Build cache
  for (var key in cat_sum){
    //console.log( key, dict[key] );
    cache.put(key, cat_sum[key], cache_time);
  }

  // If category not found... set to 0.
  if(!cat_sum[cache_key]){
    cat_sum[cache_key] = 0.0;
    cache.put(cache_key, 0.0, cache_time);
  }

  var return_value = cat_sum[cache_key];

  // Return the requested category sum
  return return_value;
}

Javascript和GoogleApps脚本不提供一种方法来“强制”将自定义函数的返回类型转换为数字

答案接近,但返回类型是数组,而不是数字

这方面的答案是正确的,但没有关于如何强制返回值的正确类型的示例

这里有将Javascript字符串转换为数字的示例,并列出了一些陷阱

为了“强制”返回到一个数字, 添加返回编号;和 返回号码返回值;对函数进行修改

带有脚本的示例已更新为返回一个数字


是带有脚本代码的JSFIDLE。

Javascript和Google apps脚本没有为自定义函数提供将返回类型“强制”为数字的方法

答案接近,但返回类型是数组,而不是数字

这方面的答案是正确的,但没有关于如何强制返回值的正确类型的示例

这里有将Javascript字符串转换为数字的示例,并列出了一些陷阱

为了“强制”返回到一个数字, 添加返回编号;和 返回号码返回值;对函数进行修改

带有脚本的示例已更新为返回一个数字


JSFIDLE是脚本代码。

没有“正确”或有用的答案是什么意思?为什么链接的问题对你没有帮助?对不起。。。“正确”这个词可能不太合适。没有链接的答案显示如何将返回类型强制为数字、数组或其他类型,也没有解释如何。请添加您尝试过的公式。@ruben,在得到下面的答案之前,我尝试了几种方法将返回类型设置为数字。我可以强制返回类型为数字的唯一方法是使用returnnumberreturn\u值;我尝试的其他不起作用的方法是将单元格格式设置为“Number”或“Currency”,在应用程序脚本中甚至返回parsefloatreturnvalue;由于某种原因不起作用。你说没有“正确”或有用的答案是什么意思?为什么链接的问题对你没有帮助?对不起。。。“正确”这个词可能不太合适。没有链接的答案显示如何将返回类型强制为数字、数组或其他类型,也没有解释如何。请添加您尝试过的公式。@ruben,在得到下面的答案之前,我尝试了几种方法将返回类型设置为数字。我可以强制返回类型为数字的唯一方法是使用returnnumberreturn\u值;我尝试的其他不起作用的方法是将单元格格式设置为“Number”或“Currency”,在应用程序脚本中甚至返回parsefloatreturnvalue;由于某些原因无法使用。示例工作表的脚本无法访问。@YusufK感谢您让我知道!我猜默认情况下无法访问脚本。我需要作为附加组件发布。完成后我会告诉你的…@优素福。我在发布代码时遇到了麻烦,谷歌让它变得非常困难。。。如果您没有注意到,我添加了带有代码的JSFIDLE链接来回答上述问题。谢谢示例页的脚本无法访问。@YusufK感谢您让我知道!我猜默认情况下无法访问脚本。我需要作为附加组件发布。完成后我会告诉你的…@优素福。我在发布代码时遇到了麻烦,谷歌让它变得非常困难。。。如果您没有注意到,我添加了带有代码的JSFIDLE链接来回答上述问题。谢谢