2013-04-28 21 views
1

我正在收集Google Spreadsheet中日托机构的服务数据,该数据包含13列,最多10-12000行。使用java脚本对数组进行排序时发生服务器错误

要通过下面的语句创建每周服务报告,我取整个表到数组:

//Fetch all required data and pack it into an array 
    var DataRange = Konsoblatt.getRange(StartRow, 1, NumRows, ColumnEmailAddressTageseltern) //Define required data range: all rows and columns up to the email address of the parents 
    var AlleEintraege = DataRange.getValues(); //Fetch all data in defined range 

总是完美的作品。

要编译,我需要使用沿着服务日期所获取的数据进行排序报告:

AlleEintraege.sort(ArraySort(ColumnDatumLeistung-1)); //Sort array for the date of the service 

其中提到:

function ArraySort(column) { 
//Diese Funktion sortiert ein Array nach der Kolonne "column" 
    return function (a,b) { 
    a = a[column]; 
    b = b[column]; 
    return a == b ? 0 : (a < b ? -1 : 1) 
    } 
    return 0; 
} 

电子表格的大小的独立这正常工作以及,但不时会导致“服务器错误”,而无需更详细的描述。

我首先想到,我可能在电子表格中有无效的日期,但到目前为止没有找到任何日期。 当发生此服务器错误时,我需要做的就是按服务日期手动对电子表格进行排序,然后上述功能无任何错误地工作。

我在排序算法方面并不是很有经验,并且复制了上面的例子在互联网上的例子。

关于为什么我不时碰到这个问题的任何想法?

非常感谢和我一起发生

亨氏

+1

服务器错误似乎与您的算法无关。您是否可以拥有一组固定的数据(在另一个电子表格中),并在一整天内每5分钟运行一次与触发器相同的功能。这会给你一个想法,问题是你的算法还是服务器。 – Srik 2013-04-28 17:41:33

+1

在单独的电子表格中,您还可以运行电子表格功能:= sort(importrange(“Id_of_remote_sheet”,“range”),13,1)其中range是远程工作表的工作表和范围,例如Sheet4!A:M如果你想在第十列进行排序,或者例如将13改为10.最后的1可以是0(零),用于降序或升序排序。 – 2013-04-28 18:06:47

+0

@Srik这个脚本已经基于触发器,并且自从现在一年多以来每周运行一次。正如我所说:它通常运行良好,但每2-3个月报告不会自动跳出... 所以,是的,我也不认为这是一个脚本错误。但为什么有时会发生? – ruffieux 2013-05-05 18:25:38

回答

1

此错误最近太。我在分类之前通过将所有数据解析为相同类型来解决这个问题。似乎有一种情况是,将字符串与数字或副词进行比较会触发问题。

+0

Hello Henrique, 感谢您的反馈。很高兴知道我不是唯一一个:-)不知道你是什么意思“解析所有的数据到相同的类型”。我正在排列日期。所以它总是一样的类型。 但是,难道有时候一天没有充分考虑作为一个日期,在这种情况下,排序失败? 我已经考虑过这种情况,但如果是这种情况,那么为什么它会工作,当我按日期手动排序电子表格并重新运行脚本时? – ruffieux 2013-05-05 18:26:57

+0

Hello Henrique, 感谢您的反馈。很高兴知道我不是唯一一个:-)不知道你是什么意思“解析所有的数据到相同的类型”。我正在排列日期。所以它总是一样的类型。 但是,难道有时候一天没有充分考虑作为一个日期,在这种情况下,排序失败? 我已经考虑过这种情况,但如果是这种情况,那么为什么它会工作,当我按日期手动排序电子表格并重新运行脚本时? 我该如何调试脚本才能找出电子表格中发生的行? 非常感谢 Heinz – ruffieux 2013-05-05 18:35:02

+0

在我的情况下,我对字符串进行了排序,但有些单元格中有数字,然后我首先将所有内容解析为字符串“value +”。我想你可以验证它是所有的日期,并为空白值设置一个零日期,或者你可以将它全部解析为字符串或数字,这最适合你。甚至可以编写一个更好的排序函数,在比较之前检查类型,因为'a 2013-05-05 21:31:55

相关问题