2025年7月2日にリリースされた「SpreadJS(スプレッドJS)」の最新バージョン「V18.1J」では、シートタブの角を丸くしたスタイルが可能になりました。

本記事では、この角丸スタイルをはじめとしたシートタブのスタイルをカスタマイズする方法について解説します。
開発環境
事前準備
今回作成するファイルは次の3つです。
index.html | ページ本体。ページの要素としてSpreadJSコントロールを配置します |
---|---|
app.js | SpreadJSコントロールを作成するコードを記載します |
styles.css | 各種ページ要素のスタイル定義を記載します |
SpreadJSコントロールの使用にはSpreadJSのモジュールを環境に配置する必要があります。npmなどから入手する方法もありますが、今回は環境に直接SpreadJSのモジュールを配置していきます。あらかじめSpreadJSの製品版かトライアル版をご用意ください。トライアル版は以下より無償で入手可能です。
製品版、またはトライアル版をダウンロードしたら、ZIPファイルを解凍し、以下のファイルを環境にコピーします。CSSファイルは以下に記載のもの含め7種類あるのでお好みのテーマのものを選択してください。
- scripts/gc.spread.sheets.all.18.1.4.min.js
- scripts/resources/gc.spread.sheets.resources.ja.18.1.4.min.js
- css/gc.spread.sheets.excel2013white.18.1.4.css
角丸スタイルを設定する
まずは新機能の角丸スタイルを設定してみます。
SpreadJSライブラリの参照設定をHTMLファイルに追加し、SpreadJSのモジュールに加えて、前述の「app.js」と「styles.css」への参照も追加します。また、シートタブの位置をセレクトボックスで調整できるようにしています。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<link href="css/gc.spread.sheets.excel2013white.18.1.4.css" rel="stylesheet"/>
<script src="scripts/gc.spread.sheets.all.18.1.4.min.js"></script>
<script src="scripts/resources/gc.spread.sheets.resources.ja.18.1.4.min.js"></script>
<link href="css/styles.css" rel="stylesheet"/>
<script src="scripts/app.js"></script>
</head>
<body>
<div id="setting">
<fieldset>
<legend>シートタブの配置</legend>
<select id="align">
<option selected>下に配置</option>
<option>上に配置</option>
<option>左に配置</option>
<option>右に配置</option>
</select>
</fieldset>
</div>
<div id="ss"></div>
</body>
</html>
続いて「app.js」と「styles.css」を次のように作成します。省略している箇所は記事後半で解説します。
※ ライセンスキーを設定しない場合、トライアル版を示すメッセージが表示されます。ライセンスキーの設定方法についてはこちらをご覧ください。
// ライセンスキーとカルチャの設定
GC.Spread.Sheets.LicenseKey = 'ここにSpreadJSのライセンスキーを設定します';
GC.Spread.Common.CultureManager.culture('ja-jp');
window.onload = () => {
// SpreadJSの生成と設定
const spread = new GC.Spread.Sheets.Workbook("ss", { sheetCount: 3 });
spread.options.tabStripRatio = 0.8;
spread.options.tabStripWidth = 100;
// シートの設定
const sheet1 = spread.getSheet(0);
const sheet2 = spread.getSheet(1);
const sheet3 = spread.getSheet(2);
sheet3.options.isProtected = true;
// シートタブの状態に応じたスタイル(デフォルト)設定
・・・(中略)・・・
// 指定したシートのシートタブスタイル(標準)の設定
・・・(中略)・・・
// シートタブの配置を指定
document.getElementById('align').addEventListener('change', (e) => {
const sheetTabPos = GC.Spread.Sheets.TabStripPosition;
switch (e.target.value) {
case '下に配置':
spread.options.tabStripPosition = sheetTabPos.bottom;
return;
case '上に配置':
spread.options.tabStripPosition = sheetTabPos.top;
return;
case '左に配置':
spread.options.tabStripPosition = sheetTabPos.left;
return;
case '右に配置':
spread.options.tabStripPosition = sheetTabPos.right;
return;
}
});
}
/* SpreadJSのスタイル */
#ss {
width: 600px;
height: 300px;
border: 1px solid silver;
}
/* シートの下に配置したときはシートタブを角丸に設定 */
.sjs-tab-strip-bottom-tab {
/* 左下と右下の角丸 */
border-radius: 0 0 4px 4px;
/* 左下の角丸 */
/* border-radius: 0 0 0 4px; */
/* 左上の角丸 */
/* border-radius: 4px 0 0 0; */
}
/* シートの左に配置したときはシートタブを角丸にしない */
.sjs-tab-strip-left-tab {
border-radius: 0;
}
/* シートの上に配置したときはシートタブの左上と右上だけを角丸に設定 */
.sjs-tab-strip-top-tab {
border-radius: 4px 4px 0 0;
}
/* シートの右に配置したときはシートタブを角丸にしない */
.sjs-tab-strip-right-tab {
border-radius: 0;
}
/* その他の要素 */
・・・(中略)・・・
以上を記述した後にアプリケーションを実行すると、アクティブシート「Sheet1」のシートタブの左下と右下の角が丸くなっています。

シートタブの四隅の一部、または全部を角丸にするには、下記のCSSクラスでborder-radiusプロパティを使用します。
シートタブの配置 | 使用するCSSクラス |
---|---|
シート下部に表示している場合 | .sjs-tab-strip-bottom-tab |
シート上部に表示している場合 | .sjs-tab-strip-top-tab |
シート左側に表示している場合 | .sjs-tab-strip-left-tab |
シート右側に表示している場合 | .sjs-tab-strip-right-tab |
border-radiusプロパティの各要素は、左から「左上」、「右上」、「右下」、「左下」の順に角丸の半径をピクセル単位で指定します。上図の場合は、シート下部にシートタブを表示しているので、「.sjs-tab-strip-bottom-tab
」を使用しています。
※ シートごとに異なる角丸スタイルを設定することはできません。
.sjs-tab-strip-bottom-tab {
/* 左下と右下の角丸 */
border-radius: 0 0 4px 4px;
}
なお、シートタブがシート下部に表示されている場合にシートタブの左上だけを角丸にすると次のようになります。

このときのCSSは下のとおりです。
.sjs-tab-strip-bottom-tab {
/* 左上の角丸 */
border-radius: 4px 0 0 0;
}
角丸スタイルについて製品ヘルプでも詳しく解説していますので、ご一読いただければと思います。
- 「シートタブの表示で角丸スタイルに対応」を見る
状態に応じたスタイルを設定する
ここからは、従来から利用可能なシートタブのスタイルを設定する機能について紹介します。
SpreadJSでは、シートタブのスタイル(背景色、文字色、フォント、アイコン)を次のような状態ごとに設定することができます。
状態 | SheetTabState列挙体 |
---|---|
標準 | Spread.Sheets.SheetTabState.normal |
アクティブ | Spread.Sheets.SheetTabState.active |
ホバー | Spread.Sheets.SheetTabState.hover |
読み取り専用 | Spread.Sheets.SheetTabState.protected |
選択 | Spread.Sheets.SheetTabState.selected |
ここでは、すべてのシートに適用されるデフォルトスタイルを設定する例を紹介します。「app.js」の「シートタブの状態に応じたスタイル(デフォルト)設定」で省略していた箇所に下記のコードを記述します。
・・・(中略)・・・
// シートタブの状態に応じたスタイル(デフォルト)設定
spread.options.defaultSheetTabStyles = {
// アクティブ
[GC.Spread.Sheets.SheetTabState.active]: {
backColor: 'red',
foreColor: 'black'
},
// ホーバー
[GC.Spread.Sheets.SheetTabState.hover]: {
backColor: 'lime',
foreColor: 'black'
},
// 読み取り専用
[GC.Spread.Sheets.SheetTabState.protected]: {
icons: [{ src: '../images/lock.png', width: 20, height: 20}]
},
// 選択
[GC.Spread.Sheets.SheetTabState.selected]: {
backColor: 'lightpink',
foreColor: 'blue'
}
};
・・・(中略)・・・
アプリケーションを実行して各状態でのシートタブのスタイルがどのように変化するか確認してみます。
状態に応じたシートタブのスタイルについては、ヘルプでも詳しく解説しているので、ご参考にしてください。
- 「シートタブのスタイルの設定」を見る
シートごとに異なるスタイルを設定する
デフォルトスタイルはすべてのシートに適用されるものですが、シートごとに状況に応じたスタイルを設定することもできます。
この設定は、WorkbookクラスのsheetTabStylesプロパティが参照するSheetTabStyleManagerクラスのaddメソッドを使って行います。
先ほど「app.js」に記述した「シートタブの状態に応じたスタイル(デフォルト)設定」をコメントアウトし、「指定したシートのシートタブスタイル(標準)の設定」で省略していた部分に下記のコードを記述してシートごとのスタイルを設定します。
ここでは、「標準(GC.Spread.Sheets.SheetTabState.normal
)」スタイルだけを設定していますが、前述の各状態に応じたスタイルを設定することも可能です。
・・・(中略)・・・
// 指定したシートのシートタブスタイル(標準)の設定
spread.sheetTabStyles.add(GC.Spread.Sheets.SheetTabState.normal, {
backColor: 'gold',
foreColor: 'blue'
}, [sheet1.name()]);
spread.sheetTabStyles.add(GC.Spread.Sheets.SheetTabState.normal, {
backColor: 'yellowgreen',
foreColor: 'blue'
}, [sheet2.name()]);
spread.sheetTabStyles.add(GC.Spread.Sheets.SheetTabState.normal, {
backColor: 'deepskyblue',
foreColor: 'blue'
}, [sheet3.name()]);
・・・(中略)・・・
アプリケーションを実行して各シートのタブをクリックすると次のようになります。
今回ご紹介した内容については以下のデモアプリケーションで確認できます(“Run Project”をクリックするとデモが起動します)。
さいごに
今回の記事では、「SpreadJS」のシートタブのスタイルを変更する方法について解説しました。
製品サイトでは、SpreadJSの機能を手軽に体験できるデモアプリケーションやトライアル版も公開しておりますので、こちらもご確認ください。
また、ご導入前の製品に関するご相談、ご導入後の各種サービスに関するご質問など、お気軽にお問合せください。