2016年9月4日日曜日

Excel方眼紙をGoogleスプレッドシートで

ふとGoogleスプレッドシートでExcel方眼紙と同じ使い方をしたくなりシートを弄ってたのですが、相当なんというか相当面倒で…。
毎度アレコレ手作業でやるのは不便なのでちょいと調べた所、Google Apps Script(GAS)というExcelで言う所のVBAのようなスクリプトで出来るとの事で、折角なのでやってみました。

で出来たのがこちら。

自動方眼紙

セルのA1に方眼のサイズをピクセル数で、A2に縦のマスの数、A3に横のマスの数を入れて、メニューの[Script]→[方眼Go!]でシートを整形します。

 さてスクリプトの作り方ですが、シートのメニューの[ツール]→[スクリプト エディタ]で別のタグにスクリプトの編集画面が開きます。

でソースはこんなですね、見たまんま。
JavaScriptは初めて使いましたが、詳細を知らなくてもサンプルを弄ってなんとなくで動きました。
というかコレ以外の詳しい使い方はまだ分かりません…(゚∀゚;)

function onOpen() {
  // ここでシートのメニューに関数呼び出しを追加
  var ui = SpreadsheetApp.getUi();
  ui.createMenu('Script').addItem('方眼Go!', 'Grid').addToUi();
}

function onEdit() {
  onOpen();
}

// シートを方眼化する関数
function Grid() {
  var sheet = SpreadsheetApp.getActiveSheet();

  var size = sheet.getRange(1, 1).getValue(); // セルA1から方眼のサイズ指定値を取得
  if (size == 0) return;

  var tr = sheet.getRange(2, 1).getValue(); // セルA2から方眼の縦の数を取得
  var tc = sheet.getRange(3, 1).getValue(); // セルA3から方眼の横の数を取得
  var mr = sheet.getMaxRows();    // 現在のシートの縦の数
  var mc = sheet.getMaxColumns(); // 現在のシートの横の数

  // 現在値との差分
  var dr = tr - mr;
  var dc = tc - mc;

  if (dr < 0) sheet.deleteRows(1, -dr);    // 縦が多い場合
  if (dr > 0) sheet.insertRows(1, dr);     // 縦が少ない場合
  if (dc < 0) sheet.deleteColumns(1, -dc); // 横が多い場合
  if (dc > 0) sheet.insertColumns(1, dc);  // 横が少ない場合

  sheet.clearContents(); // セルを全てクリア

  // 一応設定値を書き戻しておく
  sheet.getRange(1,1).setValue(size);
  sheet.getRange(2,1).setValue(tr);
  sheet.getRange(3,1).setValue(tc);

  mr = sheet.getMaxRows(); // 現在のシートの縦の数
  // 全てのセルの高さをsizeに
  for(var i = 1; i <= mr; i++) {
    sheet.setRowHeight(i, size);
  }
  mc = sheet.getMaxColumns(); // 現在のシートの横の数
  // 全てのセルの幅さをsizeに
  for(var i = 1; i <= mc; i++) {
    sheet.setColumnWidth(i, size);
  }

}
シートに一発でセルの縦横数をセット出来るのかと思ったのですがどうにも無いようで、仕方無くご覧のとおりわざわざ縦横の差をみて増減させてます。
パラメータもサンプルだとポップアップが開いて入力してたのですが、面倒くさいのでセルに値を入れとくようにしてみました。
まだスクリプトとシートとプロジェクトの関係もよく分かってない状態なのですが、とりあえず使う分には十分かなと。
 まぁもっと色々できるようになると楽しそうですよね。


すみません、なんか元のスクリプトが上書き保存されていなかったらしく、
//現在値との差分
の後のmr,mcの変数名が古いままで間違ってましたので修正いたします。。
元のgsheetファイルも修正しました。


0 件のコメント:

コメントを投稿