
こんにちは。いつも色々と参考にさせていただいております。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で質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
StringBufferからStringへキャ...
-
スーパークラスからサブクラス...
-
C# でメソッドに送られてきたOb...
-
なぜprotected overrideなのか
-
C言語での文字列より値を抜き出す
-
C#でフォームのオブジェクト名...
-
インスタンス参照でアクセスで...
-
パワーポイントのVBAでテキスト...
-
「タイプ初期化子が例外をスロ...
-
僕の出身中学校は200人同級生が...
-
【JAVA】与えられた金額を貨幣...
-
変数名の付け方
-
Accessの連結・非連結オブジェ...
-
ResultSet での問題
-
エクセルVBAで、条件に一致する...
-
BLOB型の画像データを表示したい
-
生成したインスタンスを削除す...
-
VB.NETでのnothing の意義について
-
VB.NETでフォーム上にExcelのよ...
-
そんなにお金がなくても年に1度...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
レコード件数の表示
-
Java初級 引数に適用できません
-
String.containsの反対機能はあ...
-
別クラスのmainメソッドの実行
-
abstract と static を一緒に付...
-
StringBufferからStringへキャ...
-
説明文書でのメソッド・変数の...
-
Java初心者です、エラーの意味...
-
YYYYMMDD書式の日付に対する適...
-
コマンドライン引数のチェック
-
Google Apps Script で getRang...
-
staticのメリット、デメリット
-
メソッドの引数に指定されてい...
-
スーパークラスからサブクラス...
-
return new使用時
-
メソッド宣言の戻り値の型にク...
-
インターフェースについて
-
CSVから読み込んだデータの保持...
-
問題の意味が分かりません
-
JavaからCへ
おすすめ情報