値と数式を入れて表を作る

level: basic / verified: 2026-10-01 / 4言語タブ対応 / English

やりたいこと

新しい xlsx を作って、表(見出し・文字列・数値・数式)を書き込み、ファイルに保存する。 概要の基本の流れを実際の表作成に当てはめたものです。

完成イメージ

sales.xlsx の Sheet1 に次の表ができます。

ABCD
1商品単価個数金額
2りんご1003300
3みかん506300
4ぶどう1502300
5合計900

D 列は数式 B*C、D5 は SUM(D2:D4) です。

前提

各言語のモジュールをダウンロードページから入手してインストールします (入口の表記は 概要の前提 表を参照)。

WebAssembly 版は MEMORY64(Wasm 3.0)ビルドのため、実行環境側の対応が必要です (Chrome/Edge 133〜・Firefox 134〜・Node.js 24〜。Safari は現在未対応)。

保存先パスを省略形("sales.xlsx")にすると、プロセスのカレントディレクトリに書き出されます。

npm install ./nodeosbxl-1.5.0.tgz

コード

実行結果:

// values-formulas.js — ブックを作って、値と数式を入れて保存する
const { nodeosbxl, dto } = require("nodeosbxl");

const app = new nodeosbxl.App();
const wb = app.createWorkBook("sales.xlsx");   // 新規ブック作成
const ws = wb.openWorkSheet("Sheet1");         // 既定のシートを開く

// --- 見出し (1行目) ---
// app.convertFromRowColNumber(行, 列) で (1,1) -> "A1" のセルアドレスが得られる
["商品", "単価", "個数", "金額"].forEach((text, i) => {
    const cell = app.convertFromRowColNumber(1, i + 1);
    ws.getRange(`${cell}:${cell}`).setValue(text);
});

// --- 明細 (2〜4行目) ---
const data = [["りんご", 100, 3], ["みかん", 50, 6], ["ぶどう", 150, 2]];
data.forEach(([name, price, qty], i) => {
    const row = i + 2;
    ws.getRange(`A${row}:A${row}`).setValue(name);
    ws.getRange(`B${row}:B${row}`).setNumberValue(price);
    ws.getRange(`C${row}:C${row}`).setNumberValue(qty);
});

// --- 金額列 (D2:D4) ---
// 行ごとに異なる相対参照を入れたいので setFormulaArray を使う。
// 数式文字列に先頭の "=" は付けない。
const formulas = data.map((_, i) => {
    const f = new dto.InputFormulaObject();
    f.setA1C1(app.convertFromRowColNumber(i + 2, 4));  // D2, D3, D4
    f.setFormula(`B${i + 2}*C${i + 2}`);               // "B2*C2" ...
    return f;
});
ws.setFormulaArray(formulas);

// --- 合計 (D5) ---
ws.getRange("C5:C5").setValue("合計");
ws.getRange("D5:D5").setFormula("SUM(D2:D4)");

// --- 読み戻し ---
// getValue(true) は「生値」= 数式の計算結果を返す
const values = ws.getRange("A1:D5").getValue(true);
console.log("金額 D2:D4 =", [values["D2"], values["D3"], values["D4"]].join(", "));
console.log("合計:", values["D5"]);

// --- 保存して閉じる ---
wb.save();
wb.close();
金額 D2:D4 = 300, 300, 300
合計: 900

解説

注意点

関連