1

テーブルに行を追加し、上の行から既存の書式を保持するスクリプトを作成する必要があります。私は同じ行を追加し、上の行から既存の書式を維持するには、同じことをする2つの別々の関数を持っています。表は同じですが、スプレッドシート上の異なる場所にすぎません。行の追加と書式設定の維持 - Googleスプレッドシート

何らかの理由で私がスクリプトを実行すると、行37のどこに行5のセルが追加されているのですか。私はセル33の2番目の行を開始するように指定しましたが、それを追加しています。誰かが私が間違っていることを知っていますか?

すべてのヘルプは非常に

更新されたコードを評価されて

// global 
var ss = SpreadsheetApp.getActive(); 

function onOpen() { 
    var menu = [{name:"Add New Last Row", functionName:"addRow"}]; 
    ss.addMenu("Extra", menu); 
} 

function addRow() { 
    var s, data, rw; 
    s=SpreadsheetApp.getActiveSheet(); 
    data=s.getDataRange().getValues(); 
    for (rw in data) { 
    if (data[rw][6]=="Condition Description :") break; 
    } 
    s.insertRowBefore(Number(rw)); 
    s.getRange(Number(rw), 4, 1, 2).merge(); 
    s.getRange(Number(rw), 8).setFormula("=f"+Number(rw)+"*g"+Number(rw)); 
} 

function addFirstRow() { 
    var firstRow= 15; 
    var sh = ss.getActiveSheet(); 
    var lCol = sh.getLastColumn(); 
    var range = sh.getRange(firstRow, 1, 1, lCol); 
    var formulas = range.getFormulas(); 
    sh.insertRowsAfter(firstRow, 1); 
    sh.getRange(firstRow+1, 4, 1,2).mergeAcross(); 
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross(); 
    newRange = sh.getRange(firstRow, 1, 1, lCol); 
    newRange.setFormulas(formulas); 
    sh.getRange(firstRow+1, 4, 1,2).mergeAcross(); 
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross(); 
} 


function addSecondRow() { 

    var firstRow= 33; 
    var sh = ss.getActiveSheet(); 
    var lCol = sh.getLastColumn(); 
    var range = sh.getRange(firstRow, 1, 1, lCol); 
    var formulas = range.getFormulas(); 
    sh.insertRowsAfter(firstRow, 1); 
    sh.getRange(firstRow+1, 4, 1,2).mergeAcross(); 
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross(); 
    newRange = sh.getRange(firstRow, 1, 1, lCol); 
    newRange.setFormulas(formulas); 
     sh.getRange(firstRow+1, 4, 1,2).mergeAcross(); 
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross(); 

} 
+1

、私が持っている唯一の編集には、以下の 'newRange = sh.getRange(firstRowの+ 1、1、1であります、lCol); 'firstRowに変更 '+ 1'を記録します。ちょうど挿入した次の行に数式を追加すると仮定します。 –

+1

また、最後に2つの冗長mergeAcross関数を失う可能性があります。 –

+0

@JackBrown私は何が間違っているのかを見て、ありがとう!スクリプトを実行して33行目のすべてのデータを削除したときの最後の1つです。行からデータを削除してフォーマットを解除しないようにするにはどうすればよいですか? – colin

答えて

1

あなたの関数は、次のようになります。私は私のコメントで述べたと同様

function addSecondRow() { 

    var firstRow= 33; 
    var sh = ss.getActiveSheet(); 
    var lCol = sh.getLastColumn(); 
    var range = sh.getRange(firstRow, 1, 1, lCol); 
    var formulas = range.getFormulas(); 
    sh.insertRowsAfter(firstRow, 1); 
    sh.getRange(firstRow+1, 4, 1,2).mergeAcross(); 
    sh.getRange(firstRow+1, 7, 1,2).mergeAcross(); 
    newRange = sh.getRange(firstRow+1, 1, 1, lCol); 
    newRange.setFormulas(formulas); 

} 

を、これは正しくない構文

です
newRange = sh.getRange(firstRow, 1, 1, lCol); 

は、挿入した行の上にある行を選択するためです。 追加したばかりの行を選択するための正しい方法は次のとおりです。このコードは私のために行33で働く

newRange = sh.getRange(firstRow+1, 1, 1, lCol); 
関連する問題