3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

NPOIを使ってセル内の文字列の細かい書式を取得する方法

Last updated at Posted at 2020-03-13

実現したいこと

1つのセル内の文字の細かい書式情報(太字、斜体、色、などなど)を取得したい。
例えば、こんな文字列。
コメント 2020-03-13 121546.png

記事が見つからなかったので、公式ドキュメント読んで頑張ってみました。

環境

.NET 4.8
NPOI 2.4.1

※対象となるファイル形式は、.xlsx のみ。.xls では動作しません。

結果

いい感じに取得できました。
コメント 2020-03-13 120925.png

ソースはこちら

解説

ポイントは ICell.RichStringCellValueIRichTextString から XSSFRichTextString へキャストしてあげることです。

var xssfStr = (XSSFRichTextString)cell.RichStringCellValue;

IRichTextString のままではExcelの旧フォーマット(.xls)との抽象化のため、用意されたプロパティやメソッドが少なく、取得できる情報がほとんどありません。XSSFRichTextString であれば、細かい書式情報のプロパティが公開されているため出来ることが多くなります。

また、各文字ごとの書式は Run と呼ばれる単位で取得します。Run は1つ以上の文字の塊で、何らかの書式が変わった区切りで生成されます。この Run をループで処理しすべての文字の書式を取得します。取得する際には、先ほどと同様に IFontXSSFFont へキャストしてから行います。

for (int runNo = 0; runNo < xssfStr.NumFormattingRuns; runNo++)
{
  var xssfFont = (XSSFFont)xssfStr.GetFontOfFormattingRun(runNo);

サンプルでは、以下の情報を取得します。
それぞれの詳しい説明は 公式ドキュメント を確認してください。

// フォント名
$"Font:{xssfFont.FontName}, " +
// フォント色(16進)
$"Color:{xssfFont.GetXSSFColor()?.GetARGBHex()}, " +
// フォントサイズ(ポイント)
$"Size:{xssfFont.FontHeightInPoints}, " +
// 太字
$"Bold:{string.Format("{0, 5}", xssfFont.IsBold)}, " +
// 斜体(イタリック)
$"Italic:{string.Format("{0, 5}", xssfFont.IsItalic)}, " +
// 下線
$"Underline:{string.Format("{0, 6}", xssfFont.Underline)}, " +
// 取り消し線
$"Strikeout:{string.Format("{0, 5}", xssfFont.IsStrikeout)}, " +
// 上付き(Super)/下付き(Sub)
$"TypeOffset:{string.Format("{0, 5}", xssfFont.TypeOffset)}");

下線については以下の種類が取得できるようです。

public enum FontUnderlineType : byte
{
  None = 0, // 無し
  Single = 1, // 下線
  Double = 2, // 二重下線
  SingleAccounting = 33, // 下線(会計)
  DoubleAccounting = 34 // 二重下線(会計)
}

コメント 2020-03-13 124241.png

終わりに

旧形式(.xls)は無事死亡。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?