3

基本的なソリューションhttps://stackoverflow.com/a/4809413/1438650を見つけましたが、プロジェクトの条件付き側面と非連続側面の両方が欠けています。列 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++;
  }     
  } 


}
4

3 に答える 3

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 
于 2012-06-12T16:41:12.723 に答える
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++;
      }
    }
  }
于 2013-02-27T13:47:39.107 に答える
0

ここにあなたのためのいくつかのヒントがあります:

  • 行全体を含む範囲をgetValues()取得してから、今のように一度に 1 つずつではなく、一度にすべての値を取得するために呼び出します。
  • テストする条件を使用して、呼び出しをif()ステートメントで囲みます。appendRow()
  • appendRow()一度に複数の行を追加する方法がないため、あなたがいても構いません。
于 2012-06-08T20:49:51.073 に答える