プログラマとプロマネのあいだ

プログラマもやるし、プロマネもやるし、たまに似非アーキとか営業っぽいこともやる

Spread.NETでExcel出力するときに、文字書式で256文字を超えると###になってしまうExcelのバグを回避しつつセル内の改行も活かす

Excelのバグの内容はこちら。
表示形式が文字列のとき 256 文字以上の文字を表示できない


このバグちょっと面白くて、

セルに 256 文字以上 1024 文字以下の文字列を入力するとセルの表示が "#######" に変わり

とあって、まあ実際は257文字以上の間違いだったりするんですが、
1025文字以上入力した場合は、問題なく表示できたりします。

この現象は Excel の仕様による動作となります。

って、締めくくられてて、まあどうしようもないわけなんですが、
そもそもそんな仕様いらないのではと思うわけでして。。


それはさておき、Spread.NETには、Spreadに設定した内容そのままでExcel出力できる機能があったりします。(もちろん、全ての機能に互換性があるわけではないので、そのままってわけにもいかないのですが)
で、今回は1セルに比較的情報量が多いものをExcel出力しようとしたため、上に書いたバグに引っかかりました。


で、表示形式を標準にしてあげれば、表示は直ります。
Excelはそれで良いのですが、Spreadだとこんな問題が発生します。


Excelでいう表示形式は、SpreadでいうCellTypeっていうので設定するのですが、

  • 文字形式: TextCellType、257文字以上、1024文字以下だと、表示が###になる、改行可(Multilineプロパティ)
  • 標準形式: GeneralCellType、表示が###になることはない、改行不可(Multilineプロパティがない)

というわけで、今度は改行が出来なくなってしまいます。


と、思ったら、GeneralCellTypeのWordWrapプロパティを設定すると、なんか改行が出来てることに気づきました。
このプロパティは、本来セル幅に合わせて折り返すかどうかを設定するものなのですが、なぜか改行も効いてました。なんだか裏技っぽい。


【結論】
というわけで、CellTypeはGeneralCellTypeにして、WordWrapプロパティをTrueにするのが良さそうだと分かりました。