Windows Server 2012でExcelファイルをインポートすると例外が発生する場合がある
対象製品
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
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)を使用する(行列タイトルの設定は適切にインポートされません)
Service Pack 3(v8.0.4004.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
以下のいずれかの方法で回避できます。
1) Windows Server 2012以外のOSを使用する
2) シート名を含んだ数式を使用しない(タイトル行列の設定を削除する)
3) シート名にIsLetterOrDigitメソッドがFalseを返す文字を使用しない(シート名を全角数字で開始しない)
4) Excel 2007形式(*.xlsx)を使用する(行列タイトルの設定は適切にインポートされません)