ブックとワークシートの操作 — 追加・削除・移動・リネーム
level: basic / verified: 2026-10-01 / 4言語タブ対応 / English
やりたいこと
1 つのブックの中でワークシートを追加・削除・移動・リネームし、 インデックスでシートを辿ったり、開いたときに表示されるシート(アクティブタブ)を制御する。
対象メソッド
| メソッド | 所属 | 説明 |
|---|---|---|
addWorkSheet(sheetName, position?) | WorkBook | ワークシートを追加します。 |
deleteWorkSheet(sheetName) | WorkBook | ワークシートを削除します。 |
moveSheet(sheetName, position) | WorkBook | ワークシートを移動します。 |
openWorkSheet(sheetName) | WorkBook | ワークシートを名前で開きます。 |
openWorkSheetByIndex(sheetIndex) | WorkBook | ワークシートをインデックスで開きます。 |
getSheetCount() | WorkBook | ワークシート数を取得します。 |
getSheetNumber(sheetName) | WorkBook | ワークシートのシート番号を取得します。 |
getName() / setName(name) | WorkSheet | シート名称の取得 / 設定を行います。 |
isActive() / activate(isActive) | WorkSheet | アクティブタブ(起動時の表示項目)の取得 / 設定を行います。 |
コード
実行結果:
// sheets.js — シートの追加・移動・リネーム・削除と、インデックスアクセス
const { nodeosbxl } = require("nodeosbxl");
const app = new nodeosbxl.App();
const wb = app.createWorkBook("sheets.xlsx");
// インデックスは 1 始まり。1..getSheetCount() を順に開いて名前を並べる
const show = (label) => {
const names = [];
for (let i = 1; i <= wb.getSheetCount(); i++) {
names.push(wb.openWorkSheetByIndex(i).getName());
}
console.log(`${label} count=${wb.getSheetCount()} [${names.join(", ")}]`);
};
show("[1] 新規作成直後 :");
wb.addWorkSheet("集計"); // position 省略 → 末尾に追加
show("[2] addWorkSheet(集計) :");
wb.addWorkSheet("受注", 1); // position=1 → 先頭に挿入
show("[3] addWorkSheet(受注,1):");
wb.moveSheet("受注", 3); // 3 番目へ移動
show("[4] moveSheet(受注,3) :");
const ws = wb.openWorkSheet("受注");
console.log("[5] getName() =", ws.getName(), "/ getSheetNumber(受注) =", wb.getSheetNumber("受注"));
ws.getRange("A1:A1").setValue("受注データ");
wb.openWorkSheet("Sheet1").setName("明細"); // リネーム
show("[6] setName(明細) :");
// --- アクティブタブ(ブックを開いたときに手前に表示されるシート)---
console.log("[7] isActive: 集計 =", wb.openWorkSheet("集計").isActive(),
"/ 明細 =", wb.openWorkSheet("明細").isActive());
wb.openWorkSheet("集計").activate(true); // 他のシートのアクティブは自動的に解除されます
console.log(" activate後: 集計 =", wb.openWorkSheet("集計").isActive(),
"/ 明細 =", wb.openWorkSheet("明細").isActive());
// --- 削除 ---
wb.addWorkSheet("一時");
wb.deleteWorkSheet("一時");
show("[8] deleteWorkSheet(一時):");
wb.save();
wb.close();
// --- 開き直して確認 ---
const wb2 = app.openWorkBook("sheets.xlsx");
const names = [];
for (let i = 1; i <= wb2.getSheetCount(); i++) names.push(wb2.openWorkSheetByIndex(i).getName());
console.log("[終] シート構成:", names.join(", "));
console.log(" 受注!A1 =", wb2.openWorkSheet("受注").getRange("A1:A1").getValue()["A1"]);
wb2.close();
[1] 新規作成直後 : count=1 [Sheet1]
[2] addWorkSheet(集計) : count=2 [Sheet1, 集計]
[3] addWorkSheet(受注,1): count=3 [受注, Sheet1, 集計]
[4] moveSheet(受注,3) : count=3 [Sheet1, 集計, 受注]
[5] getName() = 受注 / getSheetNumber(受注) = 3
[6] setName(明細) : count=3 [明細, 集計, 受注]
[7] isActive: 集計 = false / 明細 = true
activate後: 集計 = true / 明細 = false
[8] deleteWorkSheet(一時): count=3 [明細, 集計, 受注]
[終] シート構成: 明細, 集計, 受注
受注!A1 = 受注データ
解説
positionとシート番号はどちらも 1 始まり。addWorkSheet(name, position)はpositionの前に挿入します(position= 1 なら先頭)。
省略(既定値 -1)で末尾に追加されます。moveSheet(name, position)のpositionは「移動後の位置」で、先頭が 1 です。openWorkSheetByIndex(i)も 1 始まり。getSheetCount()と組み合わせると 全シートを名前で列挙できます(上記のshow())。
シート名が分からないブックを扱うときは、この形で辿るのが確実です。getSheetNumber(name)は現在の並び順での番号を返します。
moveSheet()やdeleteWorkSheet()の後は値が変わります。setName()は即座に反映されます。 以降は新しい名前でopenWorkSheet()します。
古い名前で開こうとすると例外になります。activate(true)は排他的に働きます。 目的のシートをactivate(true)にすると、 他のシートのアクティブは自動的に解除されます(実測)。
あらかじめ他をactivate(false)にする必要はありません。
アクティブ状態はsave()して開き直しても保持されます。
注意点
- 存在しないシート名を
openWorkSheet()に渡すと例外になります。ユーザー入力や外部設定からシート名を受ける場合は、事前にwb.openWorkSheet("NoSuch"); // → 例外: "NoSuch is not found"getSheetCount()+openWorkSheetByIndex()で名前を列挙して照合してください。 openWorkSheetByIndex()の範囲外インデックスも例外になります。1〜getSheetCount()の範囲で呼び出してください。- 新規作成直後は既定シート(
Sheet1)だけがisActive() === trueです(実測)。
addWorkSheet()で追加したシートはfalseになります。
ブックを開いたときに別のシートを手前に見せたいなら、そのシートでactivate(true)を呼んでください。 - シートを跨いだセルコピーは
copyRow/copyCol/copyCellを使います (コピー元をシート名で指定)。
詳細は 行・列・セル範囲の操作。
図形(グラフ含む)・ピボットテーブル・queryTable 形式のテーブル・データテーブルは コピー対象に含まれません。
関連
- 目次
- 前: 値と数式を入れて表を作る / 次: セル値の型と表示書式