2017-05-05 6 views
0

私はこの質問の回答を探しましたが、初歩的なスクリプト作成には非常に緑色なので、私が見つけたものを理解できませんでした。実行中のシート上でoneditを実行

私たちはワークリストに使用しているスプレッドシートを持っている - それは3つのタブに分かれています。サンプル/画像/アーカイブ

ユーザーが動作するようにアイテムを収集するには、スプレッドシートにアクセスする - それが完了すると、彼らは、として列Aをマーク「完了」、と私は彼らがそうすると自動的に「アーカイブ」シートに行を移動するには非常に親切ScampMichaelによって提供されたコードを持っている:

function onEdit(event) { 
// assumes source data in sheet named Samples 
// target sheet of move to named Archive 
// test column with Completed is col 1 or A 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 

if(s.getName() == "Samples" && r.getColumn() == 1 && r.getValue() == "Complete") { 
var row = r.getRow(); 
var numColumns = s.getLastColumn(); 
var targetSheet = ss.getSheetByName("Archive"); 
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, numColumns).moveTo(target); 
s.deleteRow(row); 
} 
} 

私の挑戦は、私はこのコードを同時に動作させることはできませんということです「サンプル」タブと「イメージ」タブの両方に表示されます。これは、スプレッドシートごとに複数のonEdit関数を持つことができないためですが、これまでのところ、両方のタブを表示するようにコードを拡張しようとする私の努力は失敗しました。

ご提供いただけるヘルプは非常に高く評価されています。

+0

イメージシートを処理する別の関数を作成し、それをonEdit関数から呼び出すことができます。イメージシートで何をする必要があるのか​​は不明です。 –

+0

混乱していることをお詫び申し上げます - イメージシートで全く同じことをする必要があります。私は同じスクリプトと別のファイルの両方でこのコードを複製しようとしましたが、両方のシートで機能する関数を取得できません。 – seerauber

答えて

0

あなたのやりたいことはまだまだ明確ではありませんが、私はそれを試しました。私は画像がサンプル上の完成した行と同じ行番号にあると仮定し、画像をアーカイブにコピーするときにアーカイブに作成された行の最後に追加します。あなたのコードをいくつか変更しました。彼らは注目されています。必要な場合は、テスト用スプレッドシートを共有することができます。

function onEdit(event) { 
// assumes source data in sheet named Samples 
// target sheet of move to named Archive 
// test column with Completed is col 1 or A 
var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var s = event.source.getActiveSheet(); 
var r = event.source.getActiveRange(); 
if(s.getName() == "Samples" && r.getColumn() == 1 && r.getValue() == 
"Complete") { 
var row = r.getRow(); 
var numColumns = s.getLastColumn(); 
var targetSheet = ss.getSheetByName("Archive"); 
var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1); 
s.getRange(row, 1, 1, numColumns).moveTo(target); 
s.deleteRow(row);//changed to delete the row 
image(row,numColumns)//call function to process Images send row and last column 
}} 
function image(row,numColumns){ 
    var ss = SpreadsheetApp.getActiveSpreadsheet(); 
    var s1=ss.getSheetByName("Images")//get Images sheet 
    var lc=s1.getLastColumn() 
    var data=s1.getRange(row, 1, 1,lc)//get row 
    var targetSheet = ss.getSheetByName("Archive"); 
    var target = targetSheet.getRange(targetSheet.getLastRow() , numColumns+1,1,1);//add image one column after Samples data on same row. 
    s1.getRange(row, 1, 1, lc).moveTo(target); 
    s1.deleteRow(row)//delete the copied image row. 
} 
関連する問題