質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.44%
Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

1回答

7150閲覧

PythonでExcelの「秘密度ラベル」を設定する方法

masa0929

総合スコア13

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2023/04/06 04:58

実現したいこと

pythonを使ったExcelデータの読み書きを行おうとしていますがExcelの「秘密度ラベル」をPythonから設定したいです

前提

・既存のExcelファイル(毎日別Pythonコードで自動更新される)を読み込み、中身を解析・処理して結果を別ファイル保存するPythonコード※があり、今までWindowsのスケジューラでこのコードを毎日深夜帯に自動実行させていました
※Excelデータを pandaのread_excel( )でDataFrameに読み込んだ上で処理していますが、既存Excel側に数式が入っているため、数式セルを値でとるため(pandaのread_excelだと数式セルはNaNになる)にread_excel( )の前に 一度xlwingsで開いてすぐ閉じる(手動保存ライクな動作を実施)といった処理を挟んでいます

・最近会社のルールでExcelドキュメントは「秘密度ラベル」の設定が必須化され(設定しないと保存できない仕組みが導入された)、上記ツール実行するとxlwingsの保存(.save( ))のタイミングで「秘密度ラベル設定」を促すExcelメッセージが出て待ち状態となり最後まで実行されなくなってしまいました
⇒このままでは深夜等に動かす自動化ツールとして使えないのでPythonコードを改良したいというのがやりたいことです

発生している問題・質問

上記を解決するためpythonでExcelの「秘密度ラベル」を設定するサンプルコードをご教示いただきたいです(色々調べたのですが全くヒットせず。。。詳しい方、工夫して実現している方のお知恵を借りたいです)

試したこと

自分なりに下記トライしたのですがいずれもうまくいっていません
①既存のExcelに対して最初に手動で「秘密度ラベルを設定し保存」したうえで上記Pythonコードを実行
⇒確かに1回目はうまくいくものの、なぜか自動化ツールの保存のタイミングで秘密度ラベルが未設定状態にもどるようで2回目以降やっぱり同じ状態に戻ってしまう

②Excelのマクロで「秘密度ラベルを選択するマクロ」を用意し、xlwingsで開いた後にpythonからそのマクロを叩いて保存することも考えたのですが、残念ながら「秘密度ラベルを設定するマクロ」自体がVBAでどう書くのかわからず(マクロ記録機能で操作を記録しようと思ったもののVBAコードとしてこの操作が記録されず。。)

上記①②に限らず良い解決案やサンプルプログラムあればぜひご教示ください
どうぞよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

python 2.7.14 / Excel office365 環境

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

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

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

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

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

masa0929

2023/04/06 09:49 編集

jbpb0さん 早速の情報ありがとうございます! 秘密度ラベルをExcelマクロ(VBA)で設定するサンプルですね。 (困っている状況はほぼ同じでした) こちらでトライしようと思ったのですが、教えてもらった情報見ている中で「秘密度ラベル」は英語で「sensitivity label」と呼ぶようなので、新たにこのキーワードで調べてみたところPythonコードで直接やるヒントがいくつか見つかりました! ⇒まずは見つけた手法をいくつか試してみようと思います(うまくいったらこちらで共有します) 大ヒント、ありがとうございました!
jbpb0

2023/04/06 09:56

> 秘密度ラベルをExcelマクロ(VBA)で設定するサンプルですね。 二つ目のwebページはそうですが、一つ目のwebページはpythonだと思います (質問者さんの目的に合ってるかは分かりませんけど)
masa0929

2023/04/06 10:30

jbpb0さん 失礼しました。2つご紹介いただいていましたね。見落としてました(2つ目側しか確認できてませんでした) ⇒1つ目のほう、「sensitivity lavel」のキーワードで見つけた手法と同じです!ありがとうございます。試してみます!!
masa0929

2023/04/06 11:00

jbpb0さん 教えていただいた情報+αでやりたいことが無事できました! ありがとうございました!! #質問欄にベストアンサーというのがつけられないようですが、ベストアンサーです #回答欄にポイントまとめておきます
guest

回答1

0

自己解決

質問欄にヒントをいただいたjbpb0さんの情報+αでやりたいことが実現できました!
こちらに今回の対応についてまとめておきます
#jbpb0さん:大変助かりました。ありがとうございました!!!
【参考】
https://pythoninoffice.com/python-set-sensitivity-label-in-excel/
https://stackoverflow.com/questions/70060716/setting-sensitivity-label-for-excel-file-using-python

■解決コード(pythonで秘密度ラベルを設定する方法)
①事前調査(コード①参照)
会社の指示通りの「秘密度ラベル」を設定した適当なExcelファイルを用意したうえで
下記コードでSensitivityLabelの各要素値を確認してメモ

②秘密度ラベルの設定(コード②参照)
所望のエクセルファイルに上記と同じものを設定する

■ポイント
SensitivityLabelの各要素値は環境(私の場合は会社のルール)によって異なるのでそれを事前調査したうえで設定する必要がある点

①事前調査 import xlwings as xw wb = xw.Book("excel_filename") labelinfo = wb.api.SensitivityLabel.GetLabel() print(labelinfo.LabelId) print(labelinfo.AssignmentMethod) print(labelinfo.Justification) print(labelinfo.LabelName) ②秘密度ラベルの設定 import xlwings as xw wb = xw.Book("excel_filename") labelinfo = wb.api.SensitivityLabel.CreateLabelInfo() labelinfo.AssignmentMethod = ①で確認した値 labelinfo.Justification = '①で確認した値' labelinfo.LabelId = '①で確認した値' labelinfo.LabelName = '①で確認した値' wb.api.SensitivityLabel.SetLabel(labelinfo, labelinfo)

こちらで質問を閉じさせてもらいます。

途方に暮れていたので大変助かりました!
本当にありがとうございました

投稿2023/04/06 11:16

masa0929

総合スコア13

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.44%

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

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

質問する

関連した質問