ドキュメントモードを設定し、OpenExcelを使用するとエラーになる

文書番号 : 38372     文書種別 : 不具合     登録日 : 2015/05/14     最終更新日 : 2015/06/02
文書を印刷する
対象製品
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" />
回避方法
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
=====