製品特徴

osbxl が選ばれる理由をご紹介します

圧倒的な計算速度

osbxl のコアエンジンは C++ で実装されており、複雑な数式計算も ミリ秒単位で処理します。

🌐

最新のWebテクノロジー(Wasm)をサポート

WebAssembly(Wasm)対応により、サーバーサイドだけでなく、 クライアントサイド(Webブラウザ)でもExcelファイルを扱えます。 サーバー負荷を軽減し、リアルタイムな計算処理を実現します。

サーバーサイド
Java / Python / Node.js でバッチ処理・API連携
クライアントサイド
ブラウザ上でExcelの読込・計算・保存を完結
🌐

マルチプラットフォーム対応

一つの計算ロジックを、Java / Python / Node.js / WebAssembly の 4つの環境でそのまま利用できます。サーバーサイドのバッチ処理から ブラウザ上のリアルタイム計算まで、同じAPIでカバーします。

Java
JDK 1.8+
🐍
Python
Python 3.8+
🟢
Node.js
Node 18+(N-API)
🌍
Wasm
全主要ブラウザ

広範なバージョンサポート

各言語の古いバージョンから最新バージョンまで幅広く対応。 既存のシステム環境に合わせて導入できます。

☕ Java
JDK 1.8 〜 最新バージョン
長期サポート(LTS)バージョンを含む
🐍 Python
Python 3.8 〜 最新バージョン
3.8, 3.9, 3.10, 3.11, 3.12, 3.13, 3.14
🟢 Node.js
Node 18 〜 最新バージョン
N-API(Node-API)によるABI互換
📊

Excel互換 400+ 関数

財務関数(PV, FV, NPV, IRR等)、統計関数(AVERAGE, STDEV等)、 文字列関数、日付関数など、現在Excelでサポートされている関数のほとんどを網羅。 既存のスプレッドシートと同じ数式がそのまま使えます。

📈

チャート・グラフ

棒グラフ、折れ線グラフ、円グラフ、散布図など、Excel互換のチャートを作成・編集できます。 データの変更に合わせてグラフも自動更新されます。

棒グラフ
折れ線
円グラフ
散布図
面グラフ
レーダー
バブル
株価
🎨

条件付き書式

セルの値に応じて自動で色付け・書式変更。データバー、カラースケール、 アイコンセットなど、視覚的にデータを強調できます。

設定可能な条件:
  • • セルの値が X より大きい/小さい
  • • 上位/下位 N 項目を強調
  • • 重複値のハイライト
  • • 数式に基づく条件
🔍

オートフィルター・並べ替え

データ範囲にフィルターを設定し、条件に応じて行を抽出・非表示。 複数条件の組み合わせ、テキスト/数値/日付フィルターに対応。

フィルター
テキスト・数値・日付の条件抽出
並べ替え
昇順/降順・複数キー並べ替え
🗂️

テーブル・ピボットテーブル

Excel互換のテーブル機能でデータ範囲を構造化。ピボットテーブルによる 集計・分析もプログラムから制御可能です。

テーブル
  • • 自動拡張・書式統一
  • • 集計行の表示
  • • フィルター/並べ替え
ピボットテーブル
  • • 行/列/値フィールド設定
  • • 集計関数(SUM/COUNT/AVG)
  • • グルーピング・フィルター
🔧

シンプルなAPI

Java / Python / Node.js でほぼ同一の簡潔なAPI構成。 言語が変わっても同じメソッド名・同じパラメータで操作でき、 学習コストを抑えてすぐに開発を始められます。

Java
sheet.getRange("A1")
.setNumberValue(100)
Python
sheet.getRange("A1")
.setNumberValue(100)
Node.js
sheet.getRange("A1")
.setNumberValue(100)
const osbxl = require("osbxl");

const app = new osbxl.App();
const book = app.createWorkBook("/tmp/demo.xlsx");
const sheet = book.addWorkSheet("Sheet1");

sheet.getRange("A1").setNumberValue(100);
sheet.getRange("A2").setNumberValue(200);
sheet.getRange("A3").setFormula("SUM(A1:A2)");

const values = sheet.getRange("A3").getValue();
console.log(values["A3"]); // "300"

book.save();
book.close();