2017-08-01 107 views
1

我在一张表中有一些表格,我需要制作脚本来每天发送一封电子邮件。它今天搜索的脚本日期,将它匹配到我的表中并返回列号,然后我在第一列(A)上查找Total,一旦找到它,返回行号。一旦我有行号和列号,返回当天的总价值。我没有使用JavaScript进行高级编程,我仍在为数组挣扎(仍在学习)。到目前为止,我所用的脚本工作得很好,只要我在该表上只有一个表格,但在表格上将会有超过50个表格,每个表格最后都会有一个Total。公式我会找到总计,但会返回所有总计(行号)作为字符串。我需要的是获得第一个总数(行号)。我希望这一切都有道理。返回的行号是匹配错误

我重视的图像,使一个想法,我的剧本我到目前为止有:

function getTodaysTotal() { 
function toDateFormat(date) { 
try {return date.setHours(0,0,0,0);} 
catch(e) {return;} 
} 

var values = SpreadsheetApp 
    .openById("ID") 
    .getSheetByName("Q3 - W27 - 39") 
    .getDataRange() 
    .getValues(); 


for (i in values){ 
if (values[i][0]=='Total'){ 
var nr = i; 

    Logger.log(nr); // will return two values (41 - first total and 
    104 second total ... if you add more Total it will return all rows 
    numbers that contain word Total 

} 
} 

var today = toDateFormat(new Date()); 
var todaysColumn = 
values[5].map(toDateFormat).map(Number).indexOf(+today); 
var output = values[nr][todaysColumn]; 
//  Logger.log(output); 
var emailDate = Utilities.formatDate(new Date(today),"GMT+1", 
"dd/MM/yyyy"); 

table

这只是第一个表,但将在这一个和每个更一个会有Total。

谢谢!

亲切的问候!

+0

你可以提供一张带有50个表格的工作表的示例工作表,或者更好的链接到实际工作表吗?什么是唯一标识其他人的每张桌子的? – mongoose36

+0

我可以提供2个表格的测试文件。该模式对于所有50来说都是相同的。https://drive.google.com/open?id=1Of2qpfaz8Z8sAhblVP1ebllHR3WT7b3kEehli6xqe0U。 .... –

+0

谢谢安德烈!是否有可能获得表格的编辑权限。 – mongoose36

回答

2

您应该在循环之外声明nr,因为您将使用该值。

var nr = 0; 

既然你正在阅读的数组,你应该使用数组的长度为你循环

for (var i=0; i<values.length; i++){ 
    if (values[i][0]=='Total'){ 
    nr = i; 
    Logger.log(nr); 
    break; // this will stop at the first match 
    } 
} 

一旦你得到你总为字符串,可以将其转换为数字致电以下功能。

var string = values[a][b]; 
var num = Number(string); 
+0

谢谢!这是完美的作品:) –

+0

快速的问题......如果我想第二个值或第三个值怎么办?我的意思是仅用于行(总计)。谢谢! –