ONLYOFFICEマクロで選択範囲の特定行を非表示にする方法

2022年11月10日著者:Denis

スプレッドシートで作業しているとき、巨大なデータの塊をより便利に操作するために、特定の行を非表示にすることがあります。このブログ記事では、小さいけれども一風変わったONLYOFFICEマクロを使って、この機能を容易にする方法をご紹介します。

このアイデアを具体化するために、SetHiddenメソッドを実装します。これは、スプレッドシートのすべての行と列を非表示にできるもう一つのONLYOFFICEマクロですでに使用されています。Hide specific rows in the selection using ONLYOFFICE macro

マクロのコードは以下の通りです。

var activeSheet = Api.ActiveSheet;
var indexRowMax = 1048576;
var n = 1;
    for (let i = 0; i < indexRowMax; i++) {
        activeSheet.GetRows(n).SetHidden(false);
        n++;
    }

ドキュメント内のすべての行を非表示にするには、indexRowMax変数を行の最大量に設定します。そして、スプレッドシート全体を繰り返し、SetHiddenメソッドプロパティを「false」に変更することで各行の非表示を解除するfor loopで利用しています。

「選択範囲内の行を非表示に」マクロの構築

すでにお気づきかもしれませんが、SetHiddenメソッドは両方の働きをします。行の非表示を解除するだけでなく、非表示にすることも可能です。しかし、ある特定の行を隠したい場合、for-loop による解決は最適な方法とは言えません。代わりに、ドキュメント上の選択範囲をターゲットにして、ForEach関数でそれを繰り返し処理することをお勧めします。こうすることで、セルの値に応じて選択範囲の特定の行を非表示にすることが容易になります。まず、アクティブなシートと選択範囲を取得します。

var activeSheet = Api.ActiveSheet;
var selection = activeSheet.Selection;

次にForEach関数を追加して、選択範囲の各セルを繰り返し処理して値を取得します。

selection.ForEach(function (range) { 
    var value = range.GetValue(); 

ここで、35より小さい値を含む行のインデックスを取得する「if」文を追加します。このインデックスを変数に格納し、行の非表示を設定するためのパラメータとして使用します。

selection.ForEach(function (range) { 
    var value = range.GetValue();  
      if (value < "35") {   
    var row  = range.GetRow();
      range.GetRows(row[range]).SetHidden(true);
    }

マクロのコード全体は以下の通りです。

(function()
{
var activeSheet = Api.ActiveSheet;
var selection = activeSheet.Selection;
selection.ForEach(function (range) { 
    var value = range.GetValue();  
      if (value < "35") {   
    var row  = range.GetRow();
      range.GetRows(row[range]).SetHidden(true);
    }
});
})();

それでは、マクロを実行し、その動作を確認してみましょう。

この小さなマクロが、あなたの表計算データの管理をより便利にしてくれることを願っています。このマクロは、私たちのAPIメソッドを実装することで実現できる多くの例の一つに過ぎません。 弊社のマクロはJavaScriptベースなので、非常に汎用性が高く、お客様のニーズに合わせて簡単にカスタマイズすることができます。

ぜひ、自分だけのマクロを作成してみてください。ご質問やご意見がありましたら、お気軽にお寄せください。私たちは、議論と協力にオープンです。 あなたの探求的な努力に幸あれ!