私はPOIには初心者ですが、奇妙な問題に直面しています。デフォルト値のセルにHSSFRichTextStringスタイルが適用されていません
各セルのフォントがArial(Font-size:6.5)に設定されたテンプレートxlsがあります。 私のアプリケーションでは、上記のデフォルトテンプレートを使用して新しいExcelレポートを生成しています。
Workbook workbook = new HSSFWorkbook(InputStream s);
結果、新しいExcelは、[マイテンプレートxls]で指定されたすべてのプロパティ(フォントスタイル)を取得しました。
ここで、HSSFRichTextStringを使用して特定のセルに書き込むと、そのスタイルは適用されません。 テキストを含むセルに記載してください& numberテキストをArial &としてターミナルとして作成します。例えば、SS 123: SS:Arial、123:Terminal。 しかし、セルのArialすべてがArial Onlyとして書かれているため、私のセルはデフォルトのフォントスタイルを持っています。 &を123のセルで検査すると、そのフォントはTerminalとして描写されますが、ion reality appliedフォントはArial Onlyです。
private static HSSFRichTextString formatNumbersOfCellText(String outputString,Font numberFont, Font strFont){
HSSFRichTextString formattedString = null;
try{
if(null != outputString && !outputString.trim().equalsIgnoreCase("")){
int lstIndexCalculated=0;
int startIndex ;
int endIndex;
String[] splittedArr = outputString.split("\\s");
if(null != splittedArr && splittedArr.length > 0){
formattedString = new HSSFRichTextString(outputString);
for (int i = 0; i < splittedArr.length; i++) {
if(lstIndexCalculated == 0){
startIndex = outputString.indexOf(splittedArr[i]);
}else{
startIndex = outputString.indexOf(splittedArr[i],lstIndexCalculated);
if(lstIndexCalculated < startIndex){
formattedString.applyFont(lstIndexCalculated,startIndex ,numberFont);
}
}
endIndex = startIndex + (splittedArr[i].length());
lstIndexCalculated = endIndex;
if(isNumericField(splittedArr[i])){
formattedString.applyFont(startIndex,endIndex ,numberFont);
}else{
formattedString.applyFont(startIndex,endIndex ,strFont);
}
startIndex = 0;
endIndex = 0;
}
if(lstIndexCalculated != 0){
return formattedString;
}
}
}
}catch(Exception e){
return null;
}
return null;
}
ここで、1つの部分文字列のみに書式設定すると、正常に動作します。
RichTextString richString = new HSSFRichTextString("SS 123 SS");
richString.applyFont(0, 3, font1);
cell.setCellValue(richString);
これはうまく動作しますが、あなたはそこにターミナルフォントのための第一のリンク(有効なスタイル)で見ることができるように、以下の場合には、複数回反復することは問題に
RichTextString richString = new HSSFRichTextString("SS 123 SS");
richString.applyFont(0, 3, font1);
richString.applyFont(3, 6, font2);
richString.applyFont(6, 9, font1);
cell.setCellValue(richString);
Valid style My incorrect xls style
を与える場所キャラクター '1'のストライキの下にあります。 しかし、Arialでは、文字 '1'に対してアンダーストライキはありません。これは期待される動作です。 しかし、213.27がTerminalフォントとしてリボンで表示されたとしても、私の場合は2番目のリンク(私の不正確なxlsスタイル)のように私はそうではありません。画像内の文字「1」の間のdiffを参照してください。 これは私が参照しているものです
助けてください。私はそれによって完全にブロックされています。 ありがとうございます。
をあなたはどのようにコードを表示してくださいそれ。 Btw .: https://poi.apache.org/spreadsheet/quick-guide.html#RichText –
formattedString.applyFont(startIndex、endIndex、strFont);どこの開始/終了インデックスは、特定のフォントを適用する必要がある部分文字列ですか。 –
今後の分析の結果、MS Excelはそのスタイルをコンテンツに適用しないことがわかりました。しかし、私が印刷プレビューをするとき、私はリッチテキストスタイルがコンテンツに適用されているのを見ることができます。どんな具体的な理由? –