チュートリアル

簡単にライブラリーを使用するためのチュートリアルコレクション

チュートリアル»Java»Spire.Doc for Java»保護»Java:Word ドキュメントの暗号化・復号化
2026-10-16

Python で Excel のワークシートを非表示または表示にする方法

配布用のブックに、社内の単価表や個人情報の一覧がそのまま残っている——受け取った側にまで見えてしまうのは避けたいけれど、シートごと削除してしまうと次回の更新で作り直しになる。こうした「見せたくないが消したくない」シートの扱いに、ワークシートの非表示が役立ちます。反対に、以前に隠したシートを配布前にまとめて戻しておきたい場面も少なくありません。

本記事では、Spire.XLS for Python を使用して Python で Excel のワークシートを非表示または表示にする方法 を解説します。はじめに 3 つの表示状態を整理し、そのうえで非表示にする手順、Excel の画面上からは戻せない「強い非表示」、表示に戻す手順、そして非表示にできるシート数の制約までを順に確認していきます。

クイックナビゲーション

実行環境の準備

本記事のコードは Spire.XLS for Python と plum-dispatch v1.7.4 を使用しています(動作確認は Spire.XLS for Python 16.8.2)。pip コマンドでインストールしてください。

pip install Spire.XLS

スクリプト側では、次の 2 行をインポートします。

from spire.xls import *
from spire.xls.common import *

手動でインストールする場合は、Spire.XLS for Python のダウンロードページ からパッケージを取得できます。

3 つの表示状態:Visible/Hidden/StrongHidden

ワークシートの表示状態は WorksheetVisibility 列挙体の 3 つの値で表します。「非表示」とひと口に言っても 2 種類あり、Excel 上での扱いが大きく異なるため、先にここを押さえておきます。

状態 設定する値 Excel での見え方 表示に戻す方法
表示 WorksheetVisibility.Visible 通常どおりタブに並ぶ —
非表示 WorksheetVisibility.Hidden タブが消える タブの右クリック →[再表示]から戻せる
強い非表示 WorksheetVisibility.StrongHidden タブが消える [再表示]の一覧にも出ないため、コードからしか戻せない

StrongHidden は Excel が内部で「VeryHidden」と呼んでいる状態に対応し、値は xlSheetVeryHidden として保存されます。Excel の[再表示]ダイアログには Hidden のシートだけが一覧表示され、StrongHidden のシートは現れません。つまり StrongHidden は「利用者に気づかれず、操作もできない場所にシートを退避させる」ための状態です。

以下では、実際にこの 2 種類を使い分けてみます。

ワークシートを非表示にする

表示状態を変えるのは、対象シートの Worksheet.Visibility プロパティに値を代入するだけです。Workbook.Worksheets[] でシートを取得し、Hidden または StrongHidden を設定します。

from spire.xls import *
from spire.xls.common import *

# Workbook オブジェクトを作成
workbook = Workbook()

# Excel ワークブックを読み込む
workbook.LoadFromFile("Sample.xlsx")

# 2 番目のワークシートを通常の非表示にする
workbook.Worksheets[1].Visibility = WorksheetVisibility.Hidden

# 3 番目のワークシートを「強い非表示」にする
workbook.Worksheets[2].Visibility = WorksheetVisibility.StrongHidden

# ワークブックを保存
workbook.SaveToFile("HideWorksheets.xlsx", FileFormat.Version2016)
workbook.Dispose()

Python で Excel のワークシートを非表示にした結果

実行すると、2 番目のシートには state="hidden"、3 番目には state="veryHidden" が記録され、Excel で開くとどちらのタブも表示されなくなります。元のデータや数式はそのまま残っており、非表示はあくまで「タブを出さない」設定である点に注意してください。

「強い非表示」と Excel の[再表示]

Hidden と StrongHidden の違いがはっきり現れるのは、Excel の画面上でシートを戻そうとしたときです。

ワークブックを Excel で開き、シート タブを右クリックして[再表示]を選ぶと、非表示になっているシートの一覧が表示されます。この一覧には Hidden のシートだけが並び、StrongHidden のシートは表示されません。つまり、StrongHidden にしたシートは Excel の操作だけでは復元できず、コードで WorksheetVisibility.Visible を代入するまで利用者からは見えないままになります。

Excel の[再表示]ダイアログに表示されるシート

この性質は、次のように使い分けると効果的です。

  • 一時的にたたむシート — 作業中に邪魔な補助シートは Hidden。あとで自分やチームが[再表示]から戻せます。
  • 配布物に残したくないシート — 単価表や個人情報の一覧は StrongHidden。受け取った側の操作では見つけられません。

どちらも「シートを消す」わけではないため、ブックの構造を崩さずに配布版だけを整えられます。

非表示のワークシートを表示に戻す

非表示を解除するときは、同じ Worksheet.Visibility プロパティに WorksheetVisibility.Visible を代入します。戻す対象が Hidden でも StrongHidden でも、指定する値は同じです。

from spire.xls import *
from spire.xls.common import *

# Workbook オブジェクトを作成
workbook = Workbook()

# 非表示シートを含むワークブックを読み込む
workbook.LoadFromFile("HideWorksheets.xlsx")

# 2 番目のワークシートを表示に戻す
workbook.Worksheets[1].Visibility = WorksheetVisibility.Visible

# 3 番目のワークシート(強い非表示)も表示に戻す
workbook.Worksheets[2].Visibility = WorksheetVisibility.Visible

# ワークブックを保存
workbook.SaveToFile("UnhideWorksheet.xlsx", FileFormat.Version2016)
workbook.Dispose()

Python で Excel の非表示ワークシートを表示に戻した結果

保存後に Excel で開くと、4 つのタブがすべて並んだ状態に戻ります。非表示の設定はファイルに保存されているため、読み込み直したあとでも Visibility を参照すれば現在の状態を確認できます。

非表示のシートを判定してまとめて戻す

シートが多いブックでは、1 枚ずつ指定して回るより、状態を判定しながらまとめて処理したほうが確実です。Workbook.Worksheets をループ処理し、Visibility が Visible 以外のシートだけを対象にします。

from spire.xls import *
from spire.xls.common import *

# Workbook オブジェクトを作成
workbook = Workbook()

# 非表示シートを含むワークブックを読み込む
workbook.LoadFromFile("HideWorksheets.xlsx")

# すべてのワークシートを確認する
for i in range(workbook.Worksheets.Count):
    sheet = workbook.Worksheets[i]
    # 表示状態を出力して確認
    print(sheet.Name, sheet.Visibility)
    # 非表示になっているシートだけを表示に戻す
    if sheet.Visibility != WorksheetVisibility.Visible:
        sheet.Visibility = WorksheetVisibility.Visible

# ワークブックを保存
workbook.SaveToFile("UnhideWorksheet.xlsx", FileFormat.Version2016)
workbook.Dispose()

このコードを実行すると、読み込み直後は次のように出力されます。

社員名簿 WorksheetVisibility.Visible
売上データ WorksheetVisibility.Hidden
単価表 WorksheetVisibility.StrongHidden
集計 WorksheetVisibility.Visible

Visibility プロパティは書き込みだけでなく読み取りにも使えるため、「どのシートが非表示かを一覧化する」「特定の状態のシートだけを処理する」といった用途にも応用できます。なお、非表示のシートが 1 枚もない場合は条件が成立せず、何も変更されません。

すべてのシートを非表示にはできない

ここまで見てきたとおりシートは個別に非表示にできますが、ブック内のすべてのシートを非表示にすることはできません。最後の 1 枚を非表示にしようとした時点で、次の例外が発生します(実測)。

spire.xls.common.SpireException: A workbook must contain at least a visible worksheet

これは Excel 本体の仕様に合わせた制約で、ブックを開いたときに表示できるシートが 1 枚もない状態を防いでいます。「重要なシートをまとめて隠したい」という場合でも、少なくとも 1 枚は表示のまま残しておく必要があります。実務では、表紙や目次のような「見えていて困らないシート」を 1 枚残すのが一般的です。

まとめ

本記事で扱った操作を、設定する値ごとに整理します。

やりたいこと 設定する値
作業用シートを一時的に隠す WorksheetVisibility.Hidden
配布物からシートを見えなくする WorksheetVisibility.StrongHidden
非表示を解除する WorksheetVisibility.Visible
非表示のシートを調べる sheet.Visibility を読み取って Visible と比較する

ポイントは、Hidden と StrongHidden が「Excel の[再表示]から戻せるかどうか」で分かれることです。相手に操作させたくないシートは StrongHidden、あとで自分が戻す前提のシートは Hidden と覚えておけば、配布版のブックをコード側で安全に整えられます。

Spire.XLS for Python の全機能を評価したい場合は、30 日間の無料ライセンスを申請できます。なお無償の試用版では、保存したファイルに評価用の警告シートが追加されます。ライセンスを適用するとこれも出力されなくなります。

FAQ

非表示にしたシートのデータは削除されますか?

いいえ。非表示は表示状態だけを切り替える設定で、シートそのものやセルの値・数式はブック内に残ります。WorksheetVisibility.Visible に戻せば、元の内容がそのまま再表示されます。

Hidden と StrongHidden はどう使い分ければよいですか?

「あとで Excel の操作から戻したいかどうか」で選びます。自分やチームが作業中に戻す前提のシートは Hidden、配布相手に見せたくない・戻してほしくないシートは StrongHidden が適しています。StrongHidden は[再表示]の一覧に現れないため、誤って戻される心配がありません。

StrongHidden にしたシートを Excel の画面から戻せますか?

戻せません。[再表示]ダイアログに StrongHidden のシートは表示されないため、Excel の UI からは復元できません。戻すには sheet.Visibility = WorksheetVisibility.Visible を実行するコードが必要です。

すべてのシートを非表示にして保存できますか?

できません。最後の表示シートを非表示にしようとした時点で SpireException(A workbook must contain at least a visible worksheet)が発生します。少なくとも 1 枚は表示のまま残してください。

非表示のシートは計算や集計の結果に影響しますか?

影響しません。非表示はあくまでタブを表示しない設定で、他のシートの数式からは通常どおり参照されます。合計値などは非表示のシートも含めて計算されます。

非表示のシートをまとめて表示に戻すにはどうすればよいですか?

Workbook.Worksheets をループ処理し、sheet.Visibility != WorksheetVisibility.Visible の条件で絞り込んでから WorksheetVisibility.Visible を代入します。本記事の「非表示のシートを判定してまとめて戻す」のコードがそのまま使えます。

Read 3 times