2016-08-29 19 views
0

私は自分の財務的な投資を追跡できるツールを開発中です。範囲内の値を別のシートにコピーするスクリプトGoogle Appsのスクリプト

私は、ツールが行う分析のための基礎であるマスターシートを移入します入力トランザクションデータへのユーザーのための簡単なデータ入力フォームを作成する必要があります。データ入力フォームでは、シート内の他のデータに基づいて多くの条件付き書式設定が使用されるため、Googleフォームからはできません。

私は私が必要なものを説明するための非常に単純化されたシートをアップロードしている:私は探しています何this

は、Data EntryシートにSubmitをクリックすると、スクリプトで、でコピーした値(NOT式を) B12:E12を「マスターテーブル」シートの最初の空の行(この場合は8行目)にコピーします。理想的には、「送信」をクリックすると、「データ入力」シートのC4:C7のデータ入力フィールドもクリアされます。

私はさまざまなフォーラムで解決策を探しましたが、正確には何も見つかりませんでした。申し訳ありませんが、私はGoogle Apps Scriptの完全な初心者だと言います。したがって、共有する独自のコードを書くことができませんでした。ここで質問するときは慣習的です。

誰もが正しい方向に関係なく私を指すことができれば、それは大歓迎です。私は現在、オンラインリソースを使用してJavaScriptGoogle Apps Scriptを勉強しようとしていますが、この特定のプロジェクトでは、自分が助けることができるレベルに達するには時間がかかりすぎます。

答えて

0

まず、セルボタンではなくコードを実行するメニュー機能を使用します。あなたは、セルボタンを使用することができますが、私はあなたがイメージを挿入し、とにかくそのイメージにjavascript関数を割り当てる必要があると思う。

基本的には、まずツール、スクリプトエディタに進みます。 onOpen関数を作成し、スプレッドシートを開くたびにonOpen()関数を実行するトリガーを作成します。 onOpen()関数の中で、物理メニュー項目(ボタンの一種)が存在するメニューを作成します( 'Submit'と呼ばれます)。最後に、このボタンに関数を関連付けます(mySubmit()と呼びます)。

mySubmit()関数の内部には、探している機能のほとんどが存在します。この時点では、1つのセル範囲からコピーして別のセル範囲に貼り付けるだけです。このため、事前にいくつかの変数(ss、entry_sheet、master_sheet、entry_range、およびmaster_row)をセットアップしなければならないことに気づくでしょう。

最後に編集した最後の行を超えて誤ってセルを編集した場合、入力行がその行にコピーされる可能性があります(getLastRow()関数の動作によって) 。

希望すると便利です。

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
 

 
var entry_sheet = ss.getSheetByName("Data Entry"); 
 
var master_sheet = ss.getSheetByName("Master Table"); 
 

 
function onOpen() { 
 
    SpreadsheetApp.getUi() 
 
    .createMenu('MyMenu') 
 
    .addItem('Submit', 'mySubmit') 
 
    .addToUi(); 
 
} 
 

 
function mySubmit() { 
 
    var entry_range = entry_sheet.getRange("B12:E12"); 
 
    var master_row = (master_sheet.getLastRow() + 1); 
 

 
    entry_range.copyValuesToRange(master_sheet, 1, 3, master_row, master_row); 
 
}

+0

私はここにコメントしています。なぜなら、私はまだコメントするほどの評判がないからです。 私は'appendRow 'メソッドについて知らなかった。フィードバックありがとう、Fabian! – GEOWill

1

、非常に多くのGEOWillをありがとうございます!

あなたの答えは私の問題を解決し、あなたのコメントのおかげで、あなたのコードが何をするのかを正確に理解することができました。私はメニューを削除するようにコードを変更しました(しかし、とにかくそれがどのように行われているか私に見せてくれてありがとう) - 私は図面として挿入されたSubmitボタンにその機能を結びつけました。また、ボタンをクリックした後に入力範囲の内容をクリアするためのコードを追加しました(これは他の人が提案したものです)。

私が使用した最終的なコードは次のとおりです。

var ss = SpreadsheetApp.getActiveSpreadsheet(); 
var entry_sheet = ss.getSheetByName("Data Entry"); 
var master_sheet = ss.getSheetByName("Master Table"); 

function mySubmit() { 
    var entry_range = entry_sheet.getRange("B12:E12") 
    var val = entry_sheet.getRange("B12:E12").getDisplayValues().reduce(function (a, b) { 
     return a.concat(b); 
    }); 
Logger.log(val); 
    master_sheet.appendRow(val); 
entry_sheet.getRange("C4:C7").clearContent() 
} 

私はこれが同様の問題を他の人に役立ちます願っています!このコミュニティがどれほど支持的であるかを愛してください。助けてくれてありがとう。

関連する問題