ONLYOFFICEマクロでスプレッドシートをコピーする方法

2023年11月09日著者:Denis

スプレッドシートの編集は、特に同じようなデータを持つ複数のスプレッドシートを扱う場合、厄介な場合があります。そこで、あるスプレッドシートから別のスプレッドシートにデータをコピーし、大きなスプレッドシートを簡単に扱えるようにするマクロを作成しましょう。

Use ONLYOFFICE macro to copy spreadsheets

マクロの構築

まず、エディタで現在のシートにアクセスします。次に、コピー先のシートにpastesheet変数でアクセスし、oRange変数で作業範囲を指定します。

  const oWorksheet = Api.GetActiveSheet();
  const pastesheet = Api.GetSheet("Sheet2");
  const oRange = oWorksheet.GetRange("A1:C10");
  // If you want to copy a specific Selection to the new sheet
  // var oRange = oWorksheet.GetSelection();

ご注意:選択範囲を処理したい場合は、上の行のコメントを外して GetSelection() メソッドを使用してください。

次に、指定した範囲に対して ForEach メソッドを使用して、範囲内の各セルを繰り返し処理します。

oRange.ForEach(function (range) {

コールバック関数のパラメータ範囲を使って、各セルのデータにアクセスします。

  const oValue = range.GetValue();
  const oCharacters = range.GetCharacters(0, 2);
  const oFont = oCharacters.GetFont();
  const fontName = oFont.GetName();
  const oSize = oFont.GetSize();
  const isBold = oFont.GetBold();
  const isItalic = oFont.GetItalic();

ForEachメソッドでは、まずセルの値を抽出します。次に、太字や斜体などのパラメータを知るために、値の初期文字を抽出します。そして、新しいシートに実装するために、fontNameとフォントサイズを取得します。

if (oValue === null || oValue === "") {
      pastesheet.GetRange(range).SetValue(" ");
    }

新しいシートに値を入れる前に、上図のようにif elseループを使っていくつかのチェックを行い、空のセルが新しいシートで正しく表現されていることを確認します。

else {
      oFont.SetName(fontName);
      pastesheet.GetRange(range).SetValue(oValue);
      pastesheet.GetRange(range).SetFontName(fontName);
      pastesheet.GetRange(range).SetFontSize(oSize);
      oWorksheet.GetRange(range).AutoFit(false, true);
      if (isBold) {
        pastesheet.GetRange(range).SetBold(true);
      }
      if (isItalic) {
        pastesheet.GetRange(range).SetItalic(true);
      }
    }

最後にelseループで、対応するセルに値を入れ、そのセルに太字、斜体、フォント名、フォントサイズなどのプロパティを与えます。

マクロ全体

マクロ全体のコードは次のとおりです:

(function () {
  const oWorksheet = Api.GetActiveSheet();
  const pastesheet = Api.GetSheet("Sheet2");
  const oRange = oWorksheet.GetRange("A1:C10");

  // If you want to copy a specific Selection to the new sheet
  // var oRange = oWorksheet.GetSelection();

  oRange.ForEach(function (range) {
    const oValue = range.GetValue();
    const oCharacters = range.GetCharacters(0, 2);
    const oFont = oCharacters.GetFont();
    const fontName = oFont.GetName();
    const oSize = oFont.GetSize();
    const isBold = oFont.GetBold();
    const isItalic = oFont.GetItalic();
    if (oValue === null || oValue === "") {
      pastesheet.GetRange(range).SetValue(" ");
    } else {
      oFont.SetName(fontName);
      pastesheet.GetRange(range).SetValue(oValue);
      pastesheet.GetRange(range).SetFontName(fontName);
      pastesheet.GetRange(range).SetFontSize(oSize);
      oWorksheet.GetRange(range).AutoFit(false, true);

      if (isBold) {
        pastesheet.GetRange(range).SetBold(true);
      }
      if (isItalic) {
        pastesheet.GetRange(range).SetItalic(true);
      }
    }
  });
})();

覚えておくべきポイントがあります。

  • マクロで指定するシート名が存在することを確認してください。
  • マクロは、新しく作成したシートではなく、必ずメインシート(親シート)から実行してください。

マクロを実行して、その動作を確認してみましょう!

GetSelection() メソッドを使用したマクロの例をもうひとつ示します:

マクロが皆さまの日々のスプレッドシート編集作業において素晴らしいツールとなることを願っています!

ONLYOFFICE APIのパワーを活用するチャンスをお見逃しなく。私たちのAPIメソッドの豊富なライブラリは、皆さまのアイデアを現実に変える鍵です。ご質問や革新的なコンセプトがありましたら、ぜひ私たちと共有してください。