ドキュメントモードを設定し、OpenExcelを使用するとエラーになる
対象製品
SPREAD for ASP.NET 8.0J
状況
修正済み
詳細
SPREADのDocumentModeプロパティを設定し、ページのドキュメントモードも指定した状態でOpenExcelを使用するとエラーが発生します
【再現手順】
1.新規WebフォームにSPREADおよびボタンコントロールを一つずつ配置する。
2.Webフォームに下記の再現コードを貼り付け、Web フォームを起動する。
3.ボタンを押下する
--- スクリプトエラーが発生し、アプリケーションが停止する
【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
FpSpread1.DocumentMode = FarPoint.Web.Spread.DocumentMode.IE8
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FpSpread1.OpenExcel(MapPath("Book1.xls"))
FpSpread1.DocumentMode = FarPoint.Web.Spread.DocumentMode.IE8
End Sub
End Class
------------------------------------
.aspxファイル
------------------------------------
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
【再現手順】
1.新規WebフォームにSPREADおよびボタンコントロールを一つずつ配置する。
2.Webフォームに下記の再現コードを貼り付け、Web フォームを起動する。
3.ボタンを押下する
--- スクリプトエラーが発生し、アプリケーションが停止する
【再現コード】
------------------------------------
Webフォームクラス
------------------------------------
Public Class WebForm1
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Page.IsPostBack Then Return
FpSpread1.DocumentMode = FarPoint.Web.Spread.DocumentMode.IE8
End Sub
Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
FpSpread1.OpenExcel(MapPath("Book1.xls"))
FpSpread1.DocumentMode = FarPoint.Web.Spread.DocumentMode.IE8
End Sub
End Class
------------------------------------
.aspxファイル
------------------------------------
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" />
回避方法
Service Pack 1(v8.0.4001.2010)で修正済み。
Service Pack 1(v8.0.4001.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
PreRenderイベントで下記のコードを実行します
【回避コード】
=====
Protected Overrides Sub OnPreRender(e As EventArgs)
If Me.Page.ClientScript.IsClientScriptIncludeRegistered(GetType(FarPoint.Web.Spread.FpSpread), "GcSpread_SpreadCoreJS") Then
Dim regString As String = GetFpclientUrl()
If regString <> "" Then
Dim regCallerString As String = "_gcFpSpreadReg=function(){};"
If regString.EndsWith("fpspreadie.js") Then regCallerString = ""
' 不適切なスクリプトの削除
Me.Page.ClientScript.RegisterClientScriptBlock(GetType(FarPoint.Web.Spread.FpSpread), "GcSpread_SpreadCoreJS_del", "if (typeof(GrapeCity) != 'undefined' && typeof(GrapeCity.Web) !='undefined' && typeof(GrapeCity.Web.Spread)!='undefined' && typeof(GrapeCity.Web.Spread.FpSpread) != 'undefined'){delete(GrapeCity.Web.Spread.FpSpread);" & regCallerString & "};", True)
' DocumentModeに応じたスクリプトの再設定
Me.Page.ClientScript.RegisterClientScriptInclude(GetType(FarPoint.Web.Spread.FpSpread), "GcSpread_SpreadCoreJS_re_register", regString)
End If
End If
MyBase.OnPreRender(e)
End Sub
Private Function GetFpclientUrl() As String
Dim scriptFileVer As String = ""
Select Case FpSpread1.DocumentMode
Case FarPoint.Web.Spread.DocumentMode.IE8
scriptFileVer = "fpspreadie8.js"
Case FarPoint.Web.Spread.DocumentMode.IE9
scriptFileVer = "fpspreadie9.js"
Case FarPoint.Web.Spread.DocumentMode.IE10
scriptFileVer = "fpspreadie.js"
Case Else
scriptFileVer = ""
End Select
If scriptFileVer <> "" Then
Dim ret As String = System.Configuration.ConfigurationManager.AppSettings("fp_client")
If IsNothing(ret) Then
Return Me.Page.ClientScript.GetWebResourceUrl(GetType(FarPoint.Web.Spread.FpSpread), "FarPoint.Web.Spread.htc." & scriptFileVer)
End If
Return Me.Page.ResolveUrl(ret & "/fpspread/" & GetSpreadVersion() & "/htc/" & scriptFileVer)
End If
Return ""
End Function
Private Function GetSpreadVersion() As String
Dim version As String = String.Empty
Dim asmname As String = GetType(FarPoint.Web.Spread.FpSpread).Assembly.FullName
Dim n As Integer = asmname.IndexOf("Version=")
If (n > 0) Then
Dim n1 As Integer = asmname.IndexOf(",", n + 8)
If (n1 > 0) Then
version = asmname.Substring(n + 8, n1 - n - 8)
version = version.Trim()
version = version.Replace(".", "_")
End If
End If
Return version
End Function
=====
Service Pack 1(v8.0.4001.2010)より前のバージョンでは次の回避方法が有効です。
------------------------------------------
PreRenderイベントで下記のコードを実行します
【回避コード】
=====
Protected Overrides Sub OnPreRender(e As EventArgs)
If Me.Page.ClientScript.IsClientScriptIncludeRegistered(GetType(FarPoint.Web.Spread.FpSpread), "GcSpread_SpreadCoreJS") Then
Dim regString As String = GetFpclientUrl()
If regString <> "" Then
Dim regCallerString As String = "_gcFpSpreadReg=function(){};"
If regString.EndsWith("fpspreadie.js") Then regCallerString = ""
' 不適切なスクリプトの削除
Me.Page.ClientScript.RegisterClientScriptBlock(GetType(FarPoint.Web.Spread.FpSpread), "GcSpread_SpreadCoreJS_del", "if (typeof(GrapeCity) != 'undefined' && typeof(GrapeCity.Web) !='undefined' && typeof(GrapeCity.Web.Spread)!='undefined' && typeof(GrapeCity.Web.Spread.FpSpread) != 'undefined'){delete(GrapeCity.Web.Spread.FpSpread);" & regCallerString & "};", True)
' DocumentModeに応じたスクリプトの再設定
Me.Page.ClientScript.RegisterClientScriptInclude(GetType(FarPoint.Web.Spread.FpSpread), "GcSpread_SpreadCoreJS_re_register", regString)
End If
End If
MyBase.OnPreRender(e)
End Sub
Private Function GetFpclientUrl() As String
Dim scriptFileVer As String = ""
Select Case FpSpread1.DocumentMode
Case FarPoint.Web.Spread.DocumentMode.IE8
scriptFileVer = "fpspreadie8.js"
Case FarPoint.Web.Spread.DocumentMode.IE9
scriptFileVer = "fpspreadie9.js"
Case FarPoint.Web.Spread.DocumentMode.IE10
scriptFileVer = "fpspreadie.js"
Case Else
scriptFileVer = ""
End Select
If scriptFileVer <> "" Then
Dim ret As String = System.Configuration.ConfigurationManager.AppSettings("fp_client")
If IsNothing(ret) Then
Return Me.Page.ClientScript.GetWebResourceUrl(GetType(FarPoint.Web.Spread.FpSpread), "FarPoint.Web.Spread.htc." & scriptFileVer)
End If
Return Me.Page.ResolveUrl(ret & "/fpspread/" & GetSpreadVersion() & "/htc/" & scriptFileVer)
End If
Return ""
End Function
Private Function GetSpreadVersion() As String
Dim version As String = String.Empty
Dim asmname As String = GetType(FarPoint.Web.Spread.FpSpread).Assembly.FullName
Dim n As Integer = asmname.IndexOf("Version=")
If (n > 0) Then
Dim n1 As Integer = asmname.IndexOf(",", n + 8)
If (n1 > 0) Then
version = asmname.Substring(n + 8, n1 - n - 8)
version = version.Trim()
version = version.Replace(".", "_")
End If
End If
Return version
End Function
=====