🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

1567閲覧

openpyxlにて数式の非表示をしたい

jazzmaster

総合スコア26

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/03/16 01:38

編集2021/03/16 02:35

1.非表示にしたい数式が入っているセルを選択し、
右クリック-[セルの書式設定(F)...]を選択。

2.[セルの書式設定]ダイアログボックスで、[保護]タブの[ロック(L)]、[表示しない(I)]ともにチェックを入れる。

3.[校閲]タブ-[シートの保護]をクリック。
[シートの保護]ダイアログボックスで[OK]ボタンをクリック。

エクセルでは上記の方法で選択した範囲のセルの数式が非表示になり、変更もできなくなりますが
それをopenpyxlで実現したいと考えております。
下記のようなロックの方法は色々なサイトに載っているのですが、そもそも”表示しない”ができるのでしょうか?

ご教授いただければ幸いです。よろしくお願いいたします。

python

1import openpyxl 2from openpyxl.workbook.protection import WorkbookProtection 3 4wb = openpyxl.load_workbook('test.xlsx') 5wb.security = WorkbookProtection(workbookPassword='test', lockStructure=True) 6wb.save('test.xlsx')

#追記
openpyxl以外で実現できるものがあれば教えていただきたいです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

以下にて可能です。

python

1from openpyxl import load_workbook 2from openpyxl.styles import Protection 3wb = load_workbook('sample.xlsx') 4ws = wb.active 5ws['C1'].protection = Protection(locked=True, hidden=True) 6ws.protection.sheet = True # もしくは worksheet.protection.enable()

解除するとき以下のように行います。

python

1# 非表示のみ解除 2ws['C1'].protection = Protection(locked=True, hidden=False) 3 4# 非表示・シート保護いずれも解除 5ws['C1'].protection = Protection(locked=True, hidden=False) 6ws.protection.sheet = False # もしくは ws.protection.disable()

(追記)複数セルを同時に設定するときは以下のように行います。

python

1cell_protection_settings = Protection(locked=True, hidden=True) 2# C列のセルすべてに設定 3for cell in ws['C']: 4 cell.protection = cell_protection_settings 5# 'B1'〜'C3' の範囲の6つのセルに設定 6for row in ws['B1':'C3']: 7 for cell in row: 8 cell.protection = cell_protection_settings

投稿2021/03/16 06:43

編集2021/03/16 11:32
etherbeg

総合スコア1195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jazzmaster

2021/03/16 08:10

回答ありがとうございます。 試してみたのですが、 NameError: name 'Protection' is not defined とエラーが出てしまいます。
etherbeg

2021/03/16 08:36 編集

回答をよく見てください。 from openpyxl import load_workbook, Protection で Protection を import しています。
jazzmaster

2021/03/16 08:36

from openpyxl import load_workbook from openpyxl.styles import Protection と記載することで出来ました!回答ありがとうございました!
etherbeg

2021/03/16 08:42 編集

書き込むコードを整理した際の私のミスでした。申し訳ありませんでした。回答も修正しておきました。
jazzmaster

2021/03/16 08:42

いえいえ大丈夫です。勉強になりました。この度はありがとうございました!
ppaul

2021/03/16 08:49

ありゃありゃ、Protection(locked=True, hidden=True)でできましたか。 マニュアルにfomulaと書いていなかったので、セル非表示だと思ったのですが、これが数式非表示だったのですね。
etherbeg

2021/03/16 09:23

行や列の「表示しない」操作は単純に表示されなくなるだけなのに、セルの「表示しない」操作はシートを保護しないと有効にならないし、有効になっても値は見えたままだし、なんだかややこしいですよね。 私も頭の中でこんがらがって、投稿した後に何回も回答を修正してしまいました。
guest

0

そもそも”表示しない”ができるのでしょうか?

ドキュメントを読む限りでは、openpyxlでセルの非表示はできますが、数式の非表示ということは見つかりません。

出来ないと考えて良いと思います。

投稿2021/03/16 02:12

ppaul

総合スコア24670

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jazzmaster

2021/03/16 02:36

回答ありがとうございます。openpyxl以外で数式の非表示が実現できるものをご存じでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問