2011-09-13 6 views
0

こんにちは私はOpen XMLとExtremMLを使ってサーバー上にExcelファイルを生成してダウンロードしていますが、 このワークブックのソースを信頼する場合は「はい」をクリックすると、y内のファイルをチェックするとcompanyという名前のタグが追加されていることがわかりました。このエラーは「エラーが発生しました」というエラーが表示されます。私はそれを削除すると、それはExcelが与えているというエラーを訂正すること、それはVB .NETでだ、これは私のコードです:Open XMLとExtremMLを使用してExcelファイルを作成すると "...読み込めないコンテンツ..."

Protected Sub btnExcel_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnExcel.Click 
    Dim iProcess As String = "" 
    Dim loOraClientDb As clsOraClientDb = New clsOraClientDb 
    Dim vFilename As String = "" 
    Try 
    Try 
     iProcess = "btnExcel_Click 1" 
     Dim ExcelSendInfo As DataTable = Session("dtExcel") 
     Dim ExcelExportedInfo As DataTable = New DataTable 
     Dim PkgOutValues() As String = {} 
     Dim ExcelDataSet As DataSet = New DataSet 
     Dim vtablename As String = "" 
     Dim vtabletoname As String = "" 
     Dim WFT As New WebFileTools 
     If chkFLayout.Checked Then 
      iProcess = "btnExcel_Click 2" 
      Dim sDNS As StringBuilder = New StringBuilder() 
      If Not chkFInfo.Checked Then 
       For Each dr In ExcelSendInfo.Rows 
       sDNS.AppendLine(dr(0)) 
       Next 
      End If 

      iProcess = "btnExcel_Click 3" 
      If Not loOraClientDb.Open(ConnectionStrings("DatabaseSDSTP6301").ConnectionString) Then 
       EnableErrorByState(loOraClientDb.Message & ", Process: " & iProcess) 
       Exit Sub 
      Else 
       iProcess = "btnExcel_Click 4" 
       Dim vStatus As String 
       If ViewState("CurrentWindow") = "Report" Then 
       vStatus = "G.G_STATUSID!=2" 
       Else 
       vStatus = "G.G_STATUSID=2" 
       End If 

       iProcess = "btnExcel_Click 5" 
       Dim PkgInParameters(6)() As String 
       PkgInParameters(0) = New String() {"VEXPORTEDDNS", "VARCHAR2", "Empty", sDNS.ToString.Replace(Chr(13) & Chr(10), ",")} 
       PkgInParameters(1) = New String() {"VSTATUS", "VARCHAR2", "Empty", vStatus} 
       PkgInParameters(2) = New String() {"chkFInfo", "VARCHAR2", "Empty", BoolToStr(chkFInfo.Checked)} 
       PkgInParameters(3) = New String() {"VSEARCHOPS", "VARCHAR2", "Empty", DDLSearchOps.SelectedValue} 
       PkgInParameters(4) = New String() {"VSEARCH", "VARCHAR2", "Empty", txtsearch.Text} 
       PkgInParameters(5) = New String() {"VRANGE1", "VARCHAR2", "Empty", txtrange1.Text} 
       PkgInParameters(6) = New String() {"VRANGE2", "VARCHAR2", "Empty", txtrange2.Text} 
       Dim PkgReturnParameters() As String 
       PkgReturnParameters = New String() {"VRETURN", "CURSOR", "Empty"} 
       Dim PkgOutParameters(0)() As String 
       PkgOutParameters(0) = New String() {"VTOTPROJS", "NUMBER", "Empty"} 

       iProcess = "btnExcel_Click 6" 
       If Not loOraClientDb.ExecuteProcedureFunction("PKG_GENERALINFO.GENERATEEXCEL", PkgInParameters, _ 
                 PkgOutParameters, PkgReturnParameters, , ExcelExportedInfo, _ 
                 , PkgOutValues) Then 
       EnableErrorByState(loOraClientDb.Message & ", Process: " & iProcess) 
       Exit Sub 
       End If 
       vtablename = "MAININFO" 
       vtabletoname = "MAINTABLE" 
      End If 
     Else 
      iProcess = "btnExcel_Click 7" 
      ExcelExportedInfo = ExcelSendInfo 
      vtablename = "TIMEREP" 
      vtabletoname = "TIMEREPORT" 
     End If 

     ExcelDataSet.Tables.Add(ExcelExportedInfo) 
     ExcelDataSet.Tables(0).TableName = vtablename 
     Dim vFileTemplate As String = "" 
     Dim RandomNumber As New Random() 
     If vtablename = "MAININFO" Then 
      vFileTemplate = "FullLayout.xlsx" 
      vFilename = "FullLayout" & RandomNumber.Next(1000).ToString & ".xlsx" 
     Else 
      vFileTemplate = "TimeReport.xlsx" 
      vFilename = "TimeReport" & RandomNumber.Next(1000).ToString & ".xlsx" 
     End If 
     Session("vfilename") = vFilename 
     WFT.CopyServerFile("ExcelTemplates\" & vFileTemplate, "ExcelTemplates\" & vFilename, True) 
     Using DPSExcelTemplate = ExcelOpenPackage(Server.MapPath(".") & "\ExcelTemplates", vFilename.Replace(".xlsx", "")) 
      ExcelWorkBookPopulateDS2Table(DPSExcelTemplate, ExcelDataSet, vtablename, vtabletoname) 
     End Using 
     Server.ClearError() 
     Response.Redirect("DownloadPage.aspx", False) 
     iProcess = "btnExcel_Click 28" 
    Catch ex As Exception 
     EnableErrorByState(ex.Message & ", Process: " & iProcess) 
     If File.Exists(Server.MapPath(".") & "\ExcelTemplates\" & vFilename) = True Then 
      File.Delete(Server.MapPath(".") & "\ExcelTemplates\" & vFilename) 
     End If 
    End Try 
    Finally 
    loOraClientDb.Close() 
    ShowCorrespondingWindows() 
    End Try 
End Sub 

DownloadPage.aspxは、このコードがあるページ:

Imports WebFileTools 
Imports System.IO 

Partial Class DownloadPage 
Inherits System.Web.UI.Page 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    Dim vfilename = Session("vfilename").ToString 
    Dim nfilename = "" 
    If vfilename.IndexOf("FullLayout") <> -1 Then 
    nfilename = "FullLayout_" & Today.ToShortDateString 
    Else 
    nfilename = "TimeReport_" & Today.ToShortDateString 
    End If 
    Dim WFT As New WebFileTools 
    WFT.DownloadServerFile("ExcelTemplates\" & vfilename, MIMEType.Excel2007, nfilename) 
End Sub 
End Class 

このエラーを受け取った人がいるか、この問題を解決する方法を知っている人はいませんか?

私はExcelがExtremMlでファイルを生成するために、このコードのthatsを追加するのを忘れ:

Public Shared Function ExcelOpenPackage(ByVal ServerPath As String, _ 
              ByVal ExcelFileName As String) As ExtremeML.Packaging.SpreadsheetDocumentWrapper 
     Dim ExcelPackage = SpreadsheetDocumentWrapper.Open(ServerPath & "\" & ExcelFileName & ".xlsx") 
     Return ExcelPackage 
    End Function 

そして、これはファイルの情報を記入することです:

Public Shared Sub ExcelWorkBookPopulateDS2Table(ByRef ExcelPackage As ExtremeML.Packaging.SpreadsheetDocumentWrapper, _ 
                ByRef Data As DataSet, _ 
                ByVal DataTableName As String, _ 
                ByVal ExcelTableName As String) 
     Dim ExcelTable = ExcelPackage.WorkbookPart.GetTablePart(ExcelTableName).Table 
     ExcelTable.Fill(Data, DataTableName) 
    End Sub 
+0

私のコードをもっと見ると、ファイルをダウンロードするときに問題があることがわかりました。私のテンプレートを新しいファイルにコピーしてファイルを取り込みます。問題なく開くことができますが、タグが追加されるクライアントに一度ダウンロードされます。mimetypeと何か関係があるかどうかわかりません。 – Mario

+0

IISにはMIMEtypeが正しく追加されているため、理由はわかりません – Mario

答えて

0

私は正確に知りませんしかし、なぜ問題がpreviusly、それはこのようなものだった私のダウンロードコードしていました:

Public Sub DownloadServerFile(ByVal FileToDownload As String, ByVal MIMETYPE As MIMEType, Optional ByVal NewNameOfFileToDownload As String = "") 
    Dim FileExt As String = "" 
    Dim F2DArr As String = Path.GetFileName(FileToDownload) 

    Current.Response.ClearContent() 
    Current.Response.ClearHeaders() 

    Select Case MIMETYPE 
    Case WebFileTools.MIMEType.Excel2007 
     Current.Response.ContentType = _ 
       "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" 
     FileExt = ".xlsx" 
    Case WebFileTools.MIMEType.Word2007 
     Current.Response.ContentType = _ 
       "application/vnd.openxmlformats-officedocument.wordprocessingml.document" 
     FileExt = ".docx" 
    Case WebFileTools.MIMEType.PowerPoint2007 
     Current.Response.ContentType = _ 
       "application/vnd.openxmlformats-officedocument.presentationml.presentation" 
     FileExt = ".pptx" 
    End Select 

    If NewNameOfFileToDownload.Trim.Length > 0 Then 
    Current.Response.AppendHeader("content-disposition", "inline;attachment;filename=" _ 
          & NewNameOfFileToDownload & FileExt) 
    Else 
    Current.Response.AppendHeader("content-disposition", "inline;attachment;filename=" & F2DArr) 
    End If 

    Current.Response.Clear() 
    Current.Response.TransmitFile(Server.MapPath(".") & "\" & FileToDownload) 
    Current.Response.Flush() 
    If File.Exists(Server.MapPath(".") & "\" & FileToDownload) = True Then 
    File.Delete(Server.MapPath(".") & "\" & FileToDownload) 
    End If 
    Current.ApplicationInstance.CompleteRequest() 
End Sub 

は今、私はこの行を変更Current.Response.End用)(Current.ApplicationInstance.CompleteRequest()とファイルがダウンロードされcorreclty

を取得し、今私が直接私のダウンロードコードを呼び出すカント:

Server.ClearError() 
     WFT.DownloadServerFile("ExcelTemplates\" & vFilename, MIMEType.Excel2007, nfilename) 
     iProcess = "btnExcel_Click 28" 
    Catch ex As Exception 
     EnableErrorByState(ex.Message & ", Process: " & iProcess) 
     If File.Exists(Server.MapPath(".") & "\ExcelTemplates\" & vFilename) = True Then 
      File.Delete(Server.MapPath(".") & "\ExcelTemplates\" & vFilename) 
     End If 
    End Try 
    Finally 
    loOraClientDb.Close() 
    ShowCorrespondingWindows() 
    End Try 

正しい方法であることをsuposedていませんResponse.Endを使用すると、常にエラーが発生しますが、これがCurrent.ApplicationInstance.CompleteRequest()を使用する正しい方法であるか、Response.EndがCompleteRequestがそれを実行していない正しいMIMEタイプを取得する

関連する問題