如何检查谷歌电子表格中的单元格类型?

Fou*_*uda 7 google-apps-script google-spreadsheet-api

我正在使用谷歌脚本,我想检查一个单元格的类型,如果它的字符串做某事,如果是一个数值.做点别的.

我找不到像isString或isText这样的函数.

这是我的代码,typeof没有检测到单元格包含数字

function Results() {

  var activeSheet = SpreadsheetApp.getActiveSpreadsheet();
  var pred = activeSheet.getSheetByName("Copy of Predictions");
  var real = activeSheet.getSheetByName("16 Results");


  var realRes = real.getRange("B7:B61");
  var realVal = realRes.getValues();

  var cell, cellValue, row, col;

  for(col=2;col<16;col++){
    var predRes = pred.getRange(7, col, realVal.length);
    var predVal = predRes.getValues();

    for(row=0;row<predVal.length;row++){
      if(predVal[row] == ""){
        continue;
      }else if(typeof predVal[row] === "number"){
                if((predVal[row][0] == realVal[row][0]) && (predVal[row+1][0] == realVal[row+1][0])){
          cell = pred.getRange(col, 3);
          cellValue = cell.getValue();
          cell.setValue(cellValue + 15);
        }else{
          if(((predVal[row][0] - predVal[row+1][0]) < 0) && ((realVal[row][0] - realVal[row+1][0]) < 0)){
            cell = pred.getRange('B3');
            cellValue = cell.getValue();
            cell.setValue(cellValue + 5);
          }else if(((predVal[row][0] - predVal[row+1][0]) > 0) && ((realVal[row][0] - realVal[row+1][0]) > 0)){
            cell = pred.getRange('B3');
            cellValue = cell.getValue();
            cell.setValue(cellValue + 5);    
          }else if(((predVal[row][0] - predVal[row+1][0]) == 0) && ((realVal[row][0] - realVal[row+1][0]) == 0)){
            cell = pred.getRange('B3');
            cellValue = cell.getValue();
            cell.setValue(cellValue + 5);    
          }
        }
        row++;
      }else{
        continue;
      }
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

Ala*_*lls 2

如果要检查单元格或区域的数字格式,可以使用getNumberFormat()orgetNumberFormats()方法。注意:一种末尾有“s”,另一种则没有。第二个获取多个单元格格式的二维数组。如果您只想检查一个单元格,请使用单数形式。该方法适用于范围,因此您首先需要获取对要检查的单元格或范围的引用。

谷歌文档 - getNumberFormats()

如果您想在代码中评估数据的数据类型,您可以使用typeof().

Mozilla JavaScript 文档 - typeof

在某些情况下,JavaScript 会根据使用情况将一种数据类型强制转换为另一种数据类型。

即使名称是“getNumberFormats()”,您仍然可以检查文本。但返回的文本值是一个空字符串。您可以使用此测试功能来验证单元格的数字格式是否已格式化为纯文本。

function test() {
  var activeSheet = SpreadsheetApp.getActiveSpreadsheet();
  var theRange = activeSheet.getRange("A2");
  var theType = theRange.getNumberFormat();
  Logger.log(theType);

  if (theType === "") {
    Logger.log("It's text");
  };
};
Run Code Online (Sandbox Code Playgroud)

你的代码是这样的:

}else if(predVal[row].getNumberFormat == "number"){
Run Code Online (Sandbox Code Playgroud)

应该:

}else if(predVal[row].getNumberFormat == ""){
Run Code Online (Sandbox Code Playgroud)