VisualStudio 2017、NPOI v2.5.2を使用
IRichTextString(又はXSSFRichTextString)のApplyFont()を使って1色の変更はできたのですが、2色の変更ができません。
例外的に、1色目の変更箇所が文字列の先頭である場合のみ、正しく動作し、2色の変更ができました。
しかし、1色目の変更箇所が2文字目以降から始まる場合は1色目の色が反映されず、2色目の色だけが変更されてしまいます。
C#
1//赤フォントの設定 2XSSFFont fontRed = (XSSFFont)Book.CreateFont(); 3XSSFColor color1 = new XSSFColor(); 4color1.Indexed = IndexedColors.Red.Index; 5fontRed.SetColor(color1); 6//青フォントの設定 7XSSFFont fontBlue = (XSSFFont)Book.CreateFont(); 8XSSFColor color2 = new XSSFColor(); 9color2.Indexed = IndexedColors.Blue.Index; 10fontBlue.SetColor(color2); 11//リッチテキストを取得 12XSSFRichTextString rText = (XSSFRichTextString)row.GetCell(colIndex).RichStringCellValue; 13rtext.ApplyFont(posBlue, posBlue + 1, fontBlue); //青文字の設定 14cell.SetCellValue(rtext); 15rtext.ApplyFont(posRed, posRed + 1, fontRed); //赤文字の設定 16cell.SetCellValue(rtext);
2文字目(posBlue=1)と3文字目(posRed=2)の色を変更(異常動作:3文字目のみ変更される)
異常動作
期待した表示
1文字目(posBlue=0)と3文字目(posRed=2)の色を変更(正常動作)
正常動作
ApplyFont()をコールする前後でリッチテキストの内容を確認すると、パブリックでないメンバーのXMLが
2度目のApplyFont()のコールで1度目の色設定がクリアされていることが確認できました。
XML
12文字目(posBlue=1)と3文字目(posRed=2)の色を変更(異常動作:3文字目のみ変更される) 2rText.st.XmlText//青文字の設定直後 3<r><t>開</t></r><r><rPr><color rgb=\"0000FF\"/><rFont val=\"Calibri\"/><sz val=\"11\"/></rPr><t>催</t></r><r><t>日</t></r> 4//赤文字の設定直後 5<r><t>開</t></r><r><t>催</t></r><r><rPr><color rgb=\"FF0000\"/><rFont val=\"Calibri\"/><sz val=\"11\"/></rPr><t>日</t></r> 6(催のcolorやrFontの指定が消えてしまっている)
XML
11文字目(posBlue=0)と3文字目(posRed=2)の色を変更(正常動作) 2rText.st.XmlText 3//青文字の設定直後 4<r><rPr><color rgb=\"0000FF\"/><rFont val=\"Calibri\"/><sz val=\"11\"/></rPr><t>開</t></r><r><t>催日</t></r> 5//赤文字の設定直後 6<r><rPr><color rgb=\"0000FF\"/><rFont val=\"Calibri\"/><sz val=\"11\"/></rPr><t>開</t></r><r><t>催</t></r><r><rPr><color rgb=\"FF0000\"/><rFont val=\"Calibri\"/><sz val=\"11\"/></rPr><t>日</t></r>
この箇所は、パブリックでないメンバーなので、外部からは手の下しようがありません。
他にこちらで試した方法としては、変更する色毎に文字列を分割して、Append()を使って追加していく方法を試したところ、一応希望通りの色の変更が行われることは確認しました。
しかし、使い方としては、青文字の設定と、赤文字の設定は別々の処理で行ないたいのです。1色目の設定をして一旦セルに書き戻し、2色目の設定では再度読み直して色の設定を追加してセルに書き戻すような処理を前提としています。
ApplyFont()の使い方が悪いのであれば正しい使い方、ApplyFont()以外の方法があればその方法を教えていただけないでしょうか?よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/19 08:05
2021/01/19 12:22
2021/01/19 13:02
2021/01/19 13:35 編集
2021/01/19 13:29
2021/01/19 14:09
2021/01/20 00:54