我找到了基本解决方案https://stackoverflow.com/a/4809413/1438650,但它缺少项目的条件和非连续方面。我需要将副本基于Col G的值,然后复制列A,B和& H:S到另一个电子表格。
function movePros() {
var date = Utilities.formatDate(new Date, "CST", "yyyy-MM-dd'T'HH:mm:ss'Z'") //"MM/dd/yyyy"
var source = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("0ApBdJlRcFy9XdGx0aXRabWlweGxyY3czZzZIemVla3c");
var lastRow = source.getLastRow();
var sheet = source.getSheetByName("City");
var data = sheet.getDataRange.getValues(); //This makes an array, right?
Browser.msgBox(data.slice(1))
// I've tried, but still don't know how get at the individual cell values so that I can both check them and write them in the correct order which is different than the source
var prospect=[DateCalled,PriceSurvey,VolSurvey,Company,Phone,Contact,OdmNotes,Address,City,State,Zip,County,Sic,"","","","","","","","=IFERROR(IF(INDIRECT(\"W\"&ROW())<>\"\",TEXT(INDIRECT(\"W\"&ROW()),\"yyyyww\")+0,IF(INDIRECT(\"T\"&ROW())<>\"\",TEXT(INDIRECT(\"T\"&ROW()),\"yyyyww\")+0,IF(INDIRECT(\"A\"&ROW())<>\"\",TEXT(INDIRECT(\"A\"&ROW()),\"yyyyww\")+1,\"\"))),\"\")","U","","","","","",ODM,"",""];
// var prospect=[data()[0]..... ugh, I don/'t know....
/*
var ODM = sheet.getRange("A"+i).getValues();
var DateCalled = sheet.getRange("B"+i).getValues();
var PriceSurvey = sheet.getRange("H"+i).getValues();
var VolSurvey = sheet.getRange("I"+i).getValues();
var Company = sheet.getRange("J"+i).getValues();
var Phone = sheet.getRange("K1"+i).getValues();
var Contact = sheet.getRange("L"+i).getValues();
var OdmNotes = sheet.getRange("M"+i).getValues();
var Address = sheet.getRange("N"+i).getValues();
var City = sheet.getRange("O"+i).getValues();
var State = sheet.getRange("P"+i).getValues();
var Zip = sheet.getRange("Q"+i).getValues();
var County = sheet.getRange("R"+i).getValues();
var Sic = sheet.getRange("S"+i).getValues();
*/
while (i <= lastRow) {
var i = 2
if (sheet.getRange("G"+i).getValue()==1 && sheet.getRange("U"+i).getValue()=="") { //cheking
target.appendRow(prospect);
source.getRange("U"+i).setValue(date);
i++;
} else {
i++;
}
}
}
答案 0 :(得分:2)
这是一个脚本“提案”,您可以完成它以使其工作。 'if'语句需要实现,如果不确切知道你需要什么,我就无法做到。 在那里使用数组的一般想法,我相信你会设法让它工作。
function movePros() {
var date = Utilities.formatDate(new Date, "CST", "yyyy-MM-dd'T'HH:mm:ss'Z'") //"MM/dd/yyyy"
var source = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("0ApBdJlRcFy9XdGx0aXRabWlweGxyY3czZzZIemVla3c");
var lastRow = source.getLastRow();
var sheet = source.getSheetByName("City");
var data = sheet.getDataRange().getValues();
var prospect=['ODM','DateCalled','PriceSurvey','VolSurvey','Company','Phone','Contact','OdmNotes','Address','City,State','Zip','County','Sic']
var line = new Array();
var targetArray= new Array();
targetArray.push(prospect);// create a header on first row of target
for(i=0;i<data.length;++i){ // iterate rows
for (j=0;j<data[i].length;++j){ // iterate columns
if (place here your conditions if data must be copied or not, you can have many conditions alltogether){line.push(data[i][j]}// if cell meets condition, add to destination row
}
targetArray.push(line)// add row to destination (you could need to add a condition here too)
}
target.getRange(1,1,targetArray.length,targetArray[0].length).setValues(targetArray);
}
备注:data [i]是源表的一行,data [i] [j]是此行中的一个单元格,从那里您可以添加任何行中的任何单元格。通常在for循环中执行此操作但您可以在不在每行中循环以获取所需数据的情况下执行此操作。
编辑#1:复制非连续数据的条件可能是这样的:
if (j==5||j==7||j==9){line.push(data[i][j])}
抱歉有点长。
编辑#2:查看目标文档我注意到你有多个工作表,你还应该告诉脚本应该在哪个工作表上写入数据。以下是如何执行此操作的示例:
var ss = SpreadsheetApp.openById("your spreadsheet ID");// this is already done in your script
SpreadsheetApp.setActiveSpreadsheet(ss);
var sh = SpreadsheetApp.setActiveSheet(ss.getSheets()[0]);// select first sheet in target spreadsheet
答案 1 :(得分:1)
块引用
这是我的编码,我想这会对你有帮助。
function GetData() {
var source = SpreadsheetApp.getActiveSpreadsheet();
var target = SpreadsheetApp.openById("0Aj7gIt4f65xidEN1R1lxZksxeFRBYkdHWmVtdE5aOGc");
var lastRow = source.getLastRow();
var source_sheet = source.getSheetByName("Source");
var target_sheet = target.getSheetByName("Target");
var source_range = source_sheet.getDataRange();
var target_range = target_sheet.getDataRange();
var i = 2;
while (i <= lastRow) {
if (source_sheet.getRange("D"+i).getValue() == "Over Due" ) {
var ItemNo = source_sheet.getRange("A"+i).getValue();
var UserName = source_sheet.getRange("B"+i).getValue();
var Location = source_sheet.getRange("C"+i).getValue();
var Status = source_sheet.getRange("D"+i).getValue();
var Comments = source_sheet.getRange("E"+i).getValue();
var data = [ItemNo,UserName,Location,Status,Comments];
target_sheet.appendRow(data);
i++;
} else {
i++;
}
}
}
答案 2 :(得分:0)
以下是一些提示:
getValues()
一次获取所有值,而不是像现在这样一次获取所有值。if()
电话周围打一个appendRow()
语句。appendRow()
,因为没有方法可以一次追加多行。