
こんにちは。いつも色々と参考にさせていただいております。POIを利用して、excelのシートの操作をやっているのですが、シートの保護がうまくいきません。
まず、sample.xlsを読み込み、
FileInputStream is = new FileInputStream("sample.xls");
HSSFWorkbook book = new HSSFWorkbook(is);
HSSFSheet sheet = book.getSheetAt(0);
HSSFSheetクラスのsetProtectメソッドを用いて、
sheet.setProtect(false);
とすると、NullPointerExceptionが発生してしまいます。
メソッドの使い方が間違っているのでしょうか?
どなたかご存知でしたらご教授いただきたいと思います。
よろしくお願い致します。
No.2ベストアンサー
- 回答日時:
こんにちは
POIのソースを探ってみました。
ワークブック(HSSFWorkbook)から、すでに存在するシートを取得して(getSheetAtメソッド)、そのシートに対して、プロテクトの設定する。
→NullPointerException
ワークブック(HSSFWorkbook)から、新規にシートを作成・取得して(createSheetメソッド)、そのシートに対して、プロテクトの設定する。
→例外なく通過=成功
と言う結果になりました。
HSSFSeetクラスには、Sheetクラスがフィールド(メンバー変数)としてあって、Sheetクラスには、ProtectRecordクラスがフィールドとしてあります。
どうやら、createSheetメソッドで、HSSFSeetクラス・オブジェクトを生成すると、ProtectRecordクラス・オブジェクトも生成されますが、
getSheetAtメソッドでHSSFSeetクラス・オブジェクトを取得しても、ProtectRecordクラス・オブジェクトが生成されません。
これがPOIの仕様なのか、バグなのかわかりませんが、原因は、このメソッドによる動作差異によるようです。
run34ricky様
ありがとうございます、大変参考になりました。
既存シートではプロテクトできないのですね。。。
原因がわかって助かりました!
どうもありがとうございました☆
No.1
- 回答日時:
こんばんは。
setProtect()以外は操作できてるんでしょうか?
普通にセルの選択とかができるのでしたら、ちょっとわかりません・・・。
もしできなければ、setProtect()の問題ではないですね(って言うか、間違ってはないです)。
bookかsheetのインスタンスがちゃんと(操作可能に)できてますか?
FileInputStream is = new FileInputStream("sample.xls");
POIFSFileSystem xx = new POIFSFileSystem(is);
HSSFWorkbook book = new HSSFWorkbook(xx);
だったような・・・。
全然自信ないです・・・。
(^^ゞ
taka451213様、どうもありがとうございます。
setProtect以外の操作(セルに文字を設定したり、シート名を変更するなど)はできているのですが。。。
教えていただいたように、
POIFSFileSystem xx = new POIFileSystem(is)
のコードを追加してみたのですが、やはりNullPointerExceptionになってしまいました。
もう少し調べてみようと思います。
ありがとうございました☆
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) マクロVBA 1シートをまとめる 閉じ方 初心者 SOS! 1 2022/06/17 14:54
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/06/04 09:39
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/06/01 14:45
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2023/03/07 14:05
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBAでファイルを開くプログラムがエラーです 2 2023/02/21 16:56
- Visual Basic(VBA) エクセルのマクロについて教えてください。 1 2022/10/11 12:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
レコード件数の表示
-
Java初級 引数に適用できません
-
PreparedStatementのレスポンス...
-
説明文書でのメソッド・変数の...
-
JUnitのテストメソッドごとのメ...
-
静的メソッドとインスタンスメ...
-
staticのメリット、デメリット
-
Javaのメモリの管理
-
StringBufferからStringへキャ...
-
メソッド宣言の戻り値の型にク...
-
Java初心者です。例外のキャッ...
-
Google Apps Script で getRang...
-
親の親のメソッドを呼ぶには?
-
別クラスのmainメソッドの実行
-
オーバーライドの必要性
-
「タイプ初期化子が例外をスロ...
-
VB.NETでフォーム上にExcelのよ...
-
mainメソッドのthrows節で設定...
-
そんなにお金がなくても年に1度...
-
エクセルVBAで、条件に一致する...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
abstract と static を一緒に付...
-
レコード件数の表示
-
コマンドライン引数のチェック
-
StringBufferからStringへキャ...
-
別クラスのmainメソッドの実行
-
Google Apps Script で getRang...
-
JUnitのテストメソッドごとのメ...
-
なぜprotected overrideなのか
-
C言語での文字列より値を抜き出す
-
Java初心者です、エラーの意味...
-
メソッド宣言の戻り値の型にク...
-
シェルスクリプトからのJavaメ...
-
YYYYMMDD書式の日付に対する適...
-
メソッドの引数に指定されてい...
-
System.out.print
-
クラスを作るとメソッドの数が...
-
Strutsでチェックボックスの値...
-
public static void main (Stri...
おすすめ情報