2017-02-13 3 views
2

私はいくつかの読書をしましたが、スクリプトに関する私の限られた知識は物事を困難にしています。私がしたい:1つのシートからデータをコピーし、行とペーストに日付を追加する

  1. コピーデータ範囲(C3:F20)新しいシートに新しいシート
  2. 内のデータは、今日のフォーマットされた日付(DD/MM/YYYYを追加1枚から
  3. 貼り付け)新しい列で

私は1と2を稼ぐことができましたが、3番目はうまくいきません。以下の現在のスクリプトを参照してください。私が持っているもの

function Copy() { 
var sss = SpreadsheetApp.openById('ID#'); 
var ss = sss.getSheetByName('Workout'); 
var range = ss.getRange('C3:F20'); 
var data = range.getValues(); 

var tss = SpreadsheetApp.openById('ID#'); 
var ts = tss.getSheetByName('Log'); 
ts.getRange(ts.getLastRow()+1, 1, data.length, data[0].length).setValues(data); 
} 

私が欲しいもの

enter image description here

enter image description here

+0

日付オブジェクトを作成するには、JavaScriptを使用します。 'var d = new Date()' Date()は関数です。それは方法ではありません。日付オブジェクトを取得した後、あなたは 'Utilities.formatDate()' [Link to Apps Script Doc-formatDate](https://developers.google.com/apps-script/reference/utilities/utilities#formatdatedate)で日付をフォーマットできます。 -timezone-format)トラブルシューティングガイド:[Appsスクリプトのトラブルシューティングへのリンク](https://developers.google.com/apps-script/troubleshooting) –

+0

情報とリンクをありがとうございます。私はそれ以上の読書をするでしょう –

答えて

0

データが 'a2:d8'のサンプルテーブルイメージを使用すると、以下のスクリプトも記述できます。このスクリプトは、 'Workout'から 'a2:d8'のデータを取得し、 'Log'の最後の行の次の行にデータをコピーします。データがコピーされる前に、今日の日付がデータに追加されます。

function Copy() { 
    var ss = SpreadsheetApp.openById('ID#') 
    var data = ss.getSheetByName('Workout').getRange('a2:d8').setNumberFormat('@').getValues(); 
    [i.push(Utilities.formatDate(new Date(), 'GMT', 'dd/MM/yyyy')) for each (i in data)]; 
    var s = ss.getSheetByName('Log'); 
    s.getRange(s.getLastRow() + 1, 1, data.length, data[0].length).setNumberFormat('@').setValues(data); 
} 

このスクリプトでは、データは配列にインポートされ、データは配列を使用して処理されます。 「d2:d8」の「00」は、「setNumberFormat( '@')」を使用してフォーマットを変更することなく取得できます。

私はこれがあなたに役立つことを願っています。

+0

私が望んだものに非常に近い:)唯一の問題は、コピーするデータの最後の行がその範囲内にあるかどうかわかりません。私はそれをわずかに変更し、私に希望の結果を与えるように見えました。それが面倒だが、仕事をしたように見えるかどうかは分からない。 –

+0

''関数コピー(){ VARのSS = SpreadsheetApp.openById( '1SsE1KceJ9RqgKPBuneCSb-MaRQvSxIVJC8Bi-EUZ2os') VAR範囲= ss.getSheetByName( 'トレーニング')getRange(3,3、ss.getLastRow() - 2 、4) var data = range.setNumberFormat( '@')。getValues();[i.push(Utilities.formatDate(新しい日付()、 'GMT'、 'dd/MM/yyyy')) var s = ss.getSheetByName( 'Log');s.getRange(s.getLastRow()+ 1,1、data.length、data [0] .length).setNumberFormat( '@')。setValues(data); } ' –

+0

「var range = ss.getSheetByName( 'Workout')」から変更してください。getRange(3,3、ss.getLastRow() - 2、4)"から "var ssw = ss.getSheetByName( 'Workout '); var range = ssw.getRange(3、3、ssw.getLastRow() - 2,4); "「getLastRow()」は各シートに使用できます。 – Tanaike

0

はこれを試してみてください。

function copy() { 
    var s = SpreadsheetApp.getActiveSpreadsheet(); 
    var range = 'a1:d8'; 

    var sS = s.getSheetByName('Workout'); 
    var sRange = sS.getRange(range); 
    var sRow1 = sRange.getRow(); 
    var sRow2 = sRange.getLastRow(); 
    var sCol1 = sRange.getColumn(); 
    var sCol2 = sRange.getLastColumn(); 

    var tS = s.getSheetByName('Log'); 
    sRange.copyValuesToRange(tS, sCol1, sCol2, sRow1, sRow2); 

    var tRange = tS.getRange(sRow1, sCol2 + 1, sRow2 - sRow1 + 1, 1); 
    var d = Utilities.formatDate(new Date(), 'GMT', 'dd/mm/yyyy'); 
    tRange.setValue(d); 
} 
0

ご協力ありがとうございます。名前を変更して最終的なコードを示します。

function Copy() { 
    var doc = SpreadsheetApp.openById('1SsE1KceJ9RqgKPBuneCSb-MaRQvSxIVJC8Bi-EUZ2os') 
    var sheet1 = doc.getSheetByName('Workout'); 
    var range = sheet1.getRange(3, 3, sheet1.getLastRow() - 2,‌ 4); 
    var data = range.setNumberFormat('@').getValues(); 
    [i.push(Utilities.formatDate(new Date(), 'GMT', 'dd/MM/yyyy')) for each (i in data)]; 
    var sheet2 = doc.getSheetByName('Log'); 
    sheet2.getRange(sheet2.getLastRow() + 1, 1, data.length, data[0].length).setNumberFormat('@').setValues(data); 
} 
関連する問題