Windows Server 2012でExcelファイルをインポートすると例外が発生する場合がある

文書番号 : 39539     文書種別 : 不具合     登録日 : 2016/08/24     最終更新日 : 2016/09/09
文書を印刷する
対象製品
SPREAD for ASP.NET 8.0J
発生環境
Windows Server 2012
状況
修正済み
詳細
Windows Server 2012でExcelファイルをインポートすると例外が発生する場合があります。本現象の発生は下記の3つの条件がすべて有効な場合にのみ発生します。

1) シート名を含んだ数式が使用されている

なお、印刷のタイトル行列はExcel内部で数式として管理されており、これらの設定がある場合も現象が発生します。

2) シート名に「スペース」や「かっこ」などの通常の文字以外を含んでいる

通常の文字かどうかは.NET FrameworkのChar.IsLetterOrDigitメソッドで確認することが可能です。Falseを返す場合、通常の文字以外であると判断されます。

Char.IsLetterOrDigit メソッド (Char)
https://msdn.microsoft.com/ja-jp/library/cay4xx2f(v=vs.110).aspx

また、上記に加えシート名が全角数字で始まるものも現象が発生します。(例:「1あいう」)

なお、シート名がすべて半角の英数字である場合にはIsLetterOrDigitメソッドがFalseを返す文字を使用したとしても現象は発生しません。

3) BIFF8形式(*.xls)をインポートしている

Excel 2007形式(*.xlsx)では現象は発生しませんが、シート名を含んだ数式や印刷のタイトル行列は正しくインポートされません。

【再現手順】
1.プロジェクトを起動します
2.上記の3つの条件がそろったExcelファイルを用意します
3.OpenExcelメソッドにより2回Excelファイルを読み込みます
 -- 例外が発生します

【再現コード】
  Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
      FpSpread1.OpenExcel(MapPath("Book1.xls"))
    Catch ex As Exception
      System.Diagnostics.Debug.Print(ex.Message)
    End Try
  End Sub
回避方法
Service Pack 3(v8.0.4004.2010)で修正済み。
Service Pack 3(v8.0.4004.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------

以下のいずれかの方法で回避できます。

1) Windows Server 2012以外のOSを使用する
2) シート名を含んだ数式を使用しない(タイトル行列の設定を削除する)
3) シート名にIsLetterOrDigitメソッドがFalseを返す文字を使用しない(シート名を全角数字で開始しない)
4) Excel 2007形式(*.xlsx)を使用する(行列タイトルの設定は適切にインポートされません)