2017-06-27 15 views
1

にCustomPropertyを追加することはできません。のApache POIは、私は、既存の文書にいくつかのカスタムプロパティを追加しようとしているドキュメント

HWPFDocument document = new HWPFDocument(new FileInputStream(sourceFile)); 
DocumentSummaryInformation docSumInf = document.getDocumentSummaryInformation(); 
CustomProperties customProperties = docSumInf.getCustomProperties(); 

CustomProperty singleProp = null; 
//... 
singleProp = new CustomProperty(); 
singleProp.setName(entry.getKey()); 
singleProp.setType(Variant.VT_LPWSTR); 
singleProp.setValue((String) entry.getValue()); 
//.. 

customProperties.put(entry.getKey(), singleProp); 
docSumInf.setCustomProperties(customProperties); 
return document; 

ただし、プロパティはファイルにそれを作ることはありません。私はまた、ループ内で

document.getDocumentSummaryInformation().getCustomProperties().put(entry.getKey(), singleProp); 
System.out.println(document.getDocumentSummaryInformation().getCustomProperties().size() + " Elemente in Map"); 

を試してみました

document.getDocumentSummaryInformation().getCustomProperties().putAll(customProperties); 

しようとしました。印刷されたサイズは常に1つでした。

最初のattemp(docSumInf.setCustomProperties(customProperties);)では、docSumInfに設定する前にcustomPropertiesを出力しました。そこに私がドキュメントの要約に設定するとすぐに、私が見逃している新しいプロパティがあります。

私は、私が行方不明です何を見ていない...

答えて

1
entry.getKey() = null 

またはentry.getKey()マップ内のすべてのCUSTOMPROPERTIESのための共通の値を持ちます。

となるため、CustomPropertiesのマップには1つの要素しかありません。

ここにあなたがnull以外の値を設定する必要が

singleProp.setName(entry.getKey()); 

CustomPropertyクラス文書要約情報ストリームにカスタムプロパティを表します。通常のプロパティとの違いは、カスタムプロパティにオプションの名前が付いていることです。名前がヌルでない場合は、セクションの辞書に保持されます。

+0

私が使用するエントリは、(エントリエントリ:dataMap.entrySet()){....}のHashMapからも得られます。私はまた、キーとしてユニークなロング値を割り当てようとしましたが、どちらもうまくいきませんでした。だから私はキーがヌルではないことを確信しています。 –

+1

デバッガでentry.getKey()がヌルでないことを確認してください –

+0

環境のためにこのコードを簡単にデバッグすることはできません。私はログファイルに値を表示したので、nullではないことを確認しました。 –

関連する問題

 関連する問題