Loops 从不断变化的电子表格中提取分散的数据
我正在尝试写一个包含多个部分的脚本。当前部件(函数copyOver)应该打开一个电子表格(通过ID),从中提取特定数据并将其插入主电子表格 我一直坚持的一点是电子表格每天都在变化。有些时候有包含“海水”数据的单元格,有些时候没有。理想情况下,我试图编写一个脚本,在表格中循环查找单元格中的特定选项卡名称(例如:海水、氯含量…),并从下面的行提取数据,直到第二个选项卡,依此类推。我只需要非常具体的数据,比如来自“C6”、“E6”、“F10”的数据,但是这些单元格总是在变化,所以我必须使用它们上面单元格中的选项卡名称来查找它们。每个选项卡及其附带的数据将有多个数组 这样可以提取数据并将它们放入一个数组中,该数组包含作为标题或标题的选项卡值以及连接到该特定选项卡的数据Loops 从不断变化的电子表格中提取分散的数据,loops,for-loop,google-apps-script,google-sheets,Loops,For Loop,Google Apps Script,Google Sheets,我正在尝试写一个包含多个部分的脚本。当前部件(函数copyOver)应该打开一个电子表格(通过ID),从中提取特定数据并将其插入主电子表格 我一直坚持的一点是电子表格每天都在变化。有些时候有包含“海水”数据的单元格,有些时候没有。理想情况下,我试图编写一个脚本,在表格中循环查找单元格中的特定选项卡名称(例如:海水、氯含量…),并从下面的行提取数据,直到第二个选项卡,依此类推。我只需要非常具体的数据,比如来自“C6”、“E6”、“F10”的数据,但是这些单元格总是在变化,所以我必须使用它们上面单元
var sourceID = "source sheet ID";
var main = SpreadsheetApp.openById("master sheet ID"); // MASTER
var source = SpreadsheetApp.openById(sourceID); //the workbook you're copying from
var mainsheet = main.getSheetByName("Lab Data"); // the sheet you want to copy the stuff into
var sourcesheet = source.getSheetByName("ANALYSIS REPORT"); // the sheet you're copying from
var dataRange = sourcesheet.getDataRange().getValues(); // gets sheet as data range
// finds SEA WATER tab in cell and gets the range below until the end of the document
// this is the range I need to find the rest of the tabs and the data under them.
var cont = "SEA WATER";
var i = [];
for (var y = 0; y < dataValues.length; y++){
if(dataValues[y] == cont){
i.push(y);
} // end if
} // end for
Logger.log(i);
var Row = Number(i)+Number(dataRange.getRow()); // gets the row number of SEA WATER tab
Logger.log("row number: " + Row);
var swLast = sourcesheet.getLastRow();
var swRange = sourcesheet.getRange(Row,2,swLast,11);
var swValues = swRange.getValues(); // range of needed information
Logger.log("sw: " + swValues);
var con2 = "SW outlet SW from Coarse filtration"; // looking for the secondary tab, within the
range
I got from the first loop
var res2 = [];
for(var i2 = 0; i2 < swValues.length; i2++) {
if(swValues[i2][4] === con2) res2.push(data[i2])
var row2 = Number(i2)+Number(swRange.getRow());
Logger.log("row2 " + row2);
} // for end
var look1 = "SW outlet SW from Coarse filtration ";
for(var i1 = 0; i1<dataRange.length;i1++){
if(dataRange[i1][1] == look1){
return i1+1;
}
}
Logger.log((i1+1));
} // end of function
var sourceID=“source sheet ID”;
var main=SpreadsheetApp.openById(“主表ID”);//主人
var source=SpreadsheetApp.openById(sourceID)//从中复制的工作簿
var mainsheet=main.getSheetByName(“实验室数据”);//要将内容复制到的工作表
var sourcesheet=source.getSheetByName(“分析报告”);//您从中复制的工作表
var dataRange=sourcesheet.getDataRange().getValues();//将工作表作为数据范围获取
//在单元格中查找“海水”选项卡并获取以下范围,直到文档结束
//这是我需要查找其余选项卡及其下的数据的范围。
var cont=“海水”;
var i=[];
对于(变量y=0;y
函数myFunction(){
var sourceID=“源工作表ID”;
var main=SpreadsheetApp.openById(“sourceID”);//MASTER
var source=SpreadsheetApp.openById(sourceID);//从中复制的工作簿
var mainsheet=main.getSheetByName(“实验室数据”);//要将内容复制到的工作表
var sourcesheet=source.getSheetByName(“分析报告”);//从中复制的工作表
var dataRange=sourcesheet.getDataRange()
var dataValues=dataRange.getValues();//将工作表作为数据范围获取
对于(var a=0;a
我希望这有助于解决您的问题。这是可能的,但如果您能提供一份样本表,则更容易理解确切的问题(您可以通过虚拟数据更改数据以维护隐私)。标题的位置是否也不同?您总是希望每个标题只复制一行,还是可以复制多行?当然,很抱歉!我编辑了我的问题,希望这有助于更好地了解我的问题。出于隐私原因删除了数据,希望仍然可以理解我正在尝试的操作。标题的位置也不同,它们总是在不同的行中,但他们总是调用相同的-除了“takeat”时间发生变化的部分也请告知您,请提供文件的阅读权限。您是否可以显示没有海水单元的一天的样本表?是否完全没有海水数据,或者是否只填充了部分数据?电子表格中是否仍有所有标题和子标题(如粗滤sw)?是否为“海水”工作表的最后一个标题?对不起,我应该解释得更清楚。“海水”总是在那里。B列中开始的蓝色标题是主要标题,总是在那里,但可以根据前面的数据量更改行。子标题(如粗过滤)可以包含在工作表中,也可以不包含在工作表中(这正在更改)。例如,如果子标题不在工作表上,则其正下方较小的带下划线的标题将不存在,数据也不会填充所有单元格,在J列和AG列之间,但是,在这种情况下,我只需要这些特定单元格。
function myFunction() {
var sourceID = "source sheet ID";
var main = SpreadsheetApp.openById("sourceID"); // MASTER
var source = SpreadsheetApp.openById(sourceID); //the workbook you're copying from
var mainsheet = main.getSheetByName("Lab Data"); // the sheet you want to copy the stuff into
var sourcesheet = source.getSheetByName("ANALYSIS REPORT"); // the sheet you're copying from
var dataRange = sourcesheet.getDataRange()
var dataValues=dataRange.getValues(); // gets sheet as data range
for (var a = 0; a < dataValues.length; a++){
if(dataValues[a][1]=="SEA WATER"){
var Row=a+1;
break;
}
}
if(Row){
var swLast = sourcesheet.getLastRow();
var swRange = sourcesheet.getRange(Row,2,swLast,11);
swRange.copyTo(mainsheet.getRange(mainsheet.getLastRow()+1, 2));
}
} // end of function