2016-11-22 5 views
1

すべてのシートを同じGoogleスプレッドシートに同期する必要があります。 最初の行と最初の列(凍結されている)だけを同期し、残りの内容は同期させないでください。同じGoogleスプレッドシートファイルの最初の列と1行のシートを同期させる

また、シートに行を挿入/削除する場合、他のすべての同期シートに対しても同じ操作が実行されるようにしたいと思います。また、他の修正が行われた場合、例えば、行が凍結されている場合は、すべてのシートで同じ行を実行する必要があります。

私はこれらの質問にコードを見てきました:要するに

を、私は「マスター」シートのフォームを使用できるようにしたい、といくつかを持っています異なる値を持つシート。私はマスターへの変更が適用され、シートの変更はマスターの変更を反映する必要があります。双方向の同期は素晴らしいですが、厳しい要件ではありません。

は、これまでのところ、私はこれを鎮圧するために管理している:

var masterSheetN = 2; /*2 means the master sheet is the second sheet. Sheets before the master sheet are ignored*/ 

function importData() { 
    /*Input sheet*/ 
    var fromSpreadsheet = SpreadsheetApp.getActiveSpreadsheet(); 
    var fromSheets = fromSpreadsheet.getSheets(); 
    var fromWorksheet = fromSheets[masterSheetN-1]; 
    var fromData = fromWorksheet.getDataRange(); 
    var fromRowsN = fromData.getNumRows() 
    var fromColsN = fromData.getNumColumns() 
    var fromRow1 = fromWorksheet.getRange(1, 1, 1, fromColsN); 
    var fromCol1 = fromWorksheet.getRange(1, 1, fromRowsN); 

    for (i=masterSheetN; i<fromSheets.length; i++) { 
    /*Output sheet*/ 
    var toWorksheet = fromSheets[i]; 
    var toRow1 = toWorksheet.getRange(1, 1, 1, fromColsN); 
    var toCol1 = toWorksheet.getRange(1, 1, fromRowsN); 

    /*Sync row and col 1*/ 
    toRow1.setValues(fromRow1.getValues()); 
    toCol1.setValues(fromCol1.getValues()); 

    /*Sync format for the whole sheet*/ 
    var toGID = toRow1.getGridId() 
    fromData.copyFormatToRange(toGID, 1, fromColsN, 1, fromRowsN) 
    } 
} 

は、これが成功したフォーマットにも、最初の行と列のためのマスターシートにすべてのシートを同期、および。しかし、フォーマットが同期されていると(特に、最初の行/列の同期がはるかに速い)、同期/保護された行などの同期がとれない場合は非常に遅いです。マスターからすべてを同期する方法はありますか新しいシートが作成されたときのシート?

+0

も参照してくださいは、同期一方向または双方向ですか?何人の人が編集できますか? 2番目のリンク先の[この提案された回答](http://stackoverflow.com/a/20461897/2278429)に、これを効果的に設定する方法に関するガイダンスがあります。 – Brian

+0

@Rubénこんにちは、私は明日の質問を編集します。はい、私は数式を使うことができますが、それは内容だけをコピーします。私が望むのは、マスターフォームが各シートに似た異なるデータで埋められることです。つまり、「マスターシート」の(たとえば)条件付き書式を変更すると、すべてのシート全体で変更する必要があります。これが可能かどうかはわかりません。 – AF7

+1

importrange()は書式設定ではなく、データのみを表示します。これは、1つのファイルから2つ目のファイルにデータを移動するために使用されます。 file_keyは、URLの長い文字列です(スラッシュから別のスラッシュへ)。docs.google.com/spreadsheets/d/___file_key_is_here ___/edit#gid = 0範囲を開くことができます。以下は、列AとB '= IMPORTRANGE(file_key、" sheet1!A1:B ")のすべての項目を取り込みます。メインシートでのみこの部分を編集することができます。他のシートが最初のデータに対してのみ機能を使用している場合を除いて、行を挿入してください。 –

答えて

0

部分的な答え

の代わりにgetValues()、setValues()とcopyFormatToRange()はcopyTo(Range)を使用しています。

備考

値とフォーマットのみをコピーすると思います。おそらく、getDataValidation()/setDataValidation(rule)もデータ検証規則を同期する必要があります。

+0

こんにちは、書式、内容、および最初の行と列のすべてをコピーする必要があるので、他の行と列の書式だけをコピーする必要があるので、私は 'copyTo()'を別々に呼び出す必要があります。それとも、私が考えていない方法がありますか?これについて詳しく説明できますか? – AF7

関連する問題