1

我有一个 Google Apps 脚本函数,我想用它来执行此操作:从电子表格单元格中的原始文本中提取一些数据(日期)。当我使用 javascript IDE 时,代码可以正常工作。但是当我在 GAS 上尝试时,它不起作用。

这是代码:

function findDate (text){
text1 = text.split(".Date");
Logger.log("text1", text1);
//console.log("text1= ", text1);
date = 'no date informed';

for (var i=0; i<text1.length; i++) {
     text2 = text1[i].split(" ");
     Logger.log("text2", text2);
//     console.log("text2= ", text2);
  //   console.log("text2[1]= ", text2[1]);
     if (text2[1] === 'common:'){
         date = text2[2];
       Logger.log("text2[2]", text2[2]);
//         console.log("text2[2]= ", text2[2]);

     }
  }
  return date;
}

电子表格单元格中的字符串不完全是这个,它是用另一种语言编写的,但它与此类似(破碎的文本,但行之间没有空格):

特殊期限:19年6个月零0天。

通用术语:8年8个月零0天。

特别日期:23/11/1998

常见日期:2012 年 9 月 11 日

当我得到日志时,我得到了消息Logging output too large. Truncating output.和这个文本:

[text1, [[special term: 19 years, 6 months and 0 days. commom term: 8 years, 8 months and 0 days. Date special: 23/11/1998 Date commom: 09/11/2012]]]

提前感谢您的帮助!

4

2 回答 2

2

您可以在电子表格中添加一个名为“Debug Watch”的工作表Code,并在其中添加一个名为“Debug Watch”的范围DebugWatchWindow,您可以在其中添加长度更长的监视,最多 50,000 个字符。启动脚本时清除调试“窗口”,并在代码中的任意位置添加监视。

在此处输入图像描述

在此处输入图像描述

My Executions窗口更方便,但这种方法适用于长日志文本:

笔记:

  • 根据您的应用程序的需要更改对代码表和这些调试函数的引用。
  • DebugWatchWindow是“弗雷德”在哪里。它是“调试窗口”数据的左上角单元格。
  • 不要把任何重要的事情放在下面。它会被扔掉。

调试.gs

  function getWatchWindow() {
    if(!this.WatchWindow) 
            this.WatchWindow = App.Sheets.codeSheet.getRange('DebugWatchWindow').offset(0, 0, 20, 2); // fixed size
    return this.WatchWindow;
  }

  function clearWatch() {
    this.getWatchWindow().offset(0,0, App.Sheets.codeSheet.getLastRow(), 2).clearContent();
  }

  function addWatch(expression, value) {
    var rows = App.Sheets.getLastUsedSize(this.getWatchWindow()).rows;
    this.getWatchWindow().offset(rows, 0, 1, 1).setValue(expression);
    this.getWatchWindow().offset(rows, 1, 1, 1).setValue(value);
  }

表格.gs

  function getLastUsedSize(range) {
    var values = range.getValues();
    return values
    .reduce(function(size, rowValues, index, values) {
      var lastUsedColumn = rowValues
      .map(function(cellValue, index) {
        if(cellValue != '')
          return index;
        else
          return -1;
      })
      .reduce(function(acc,curr) {
        acc = Math.max(acc,curr);
        return acc;
      }, -1);
      if(lastUsedColumn > -1) {
        size.rows = index + 1;
        size.columns = Math.max(size.columns, lastUsedColumn + 1);
      }
      return size;
    }, {columns: 0, rows: 0});
  }

测试.gs

function testScratch() {
  console.log('testScratch');
  App.Debug.clearWatch();
  App.Debug.addWatch('fred', 14);
  App.Debug.addWatch('jimmard', App.Dates.now());
  sdfsdd();
}
于 2020-01-28T02:01:49.387 回答
1

记录器在弹出窗口中显示的大小有限,这就是它截断您看到的结果的原因。

如果您删除代码中显示初始数组数据的第一个匹配项,您将获得整个结果。显示整个数组显然超过了长度限制。


没有这个改变:

在此处输入图像描述 使用上面的数据和下面的代码

function myFunction() {
  var text = SpreadsheetApp.getActive().getRange("A1").getValue();
  Logger.log('text = '+text);
  Logger.log('function result = '+findDate(text));

}


function findDate (text){
  var text1 = text.split("\n"+"Date");
  Logger.log("text1 = "+ text1);
  var date = 'no date informed';
  
  for (var i=0; i<text1.length; i++) {
    var text2 = text1[i].split(" ");
    Logger.log("text2 = "+text2);
    if (text2[1] === 'common:'){
      date = text2[2];
      Logger.log("text2[2] = "+ text2[2]);
    }
  }
  return date;
}

我得到以下结果:

在此处输入图像描述

于 2013-10-31T08:49:16.860 回答