SpreadsheetGear で 「Corrupt OpenXML document.」例外が発生[プログラミング]
(2024-11-12 22:05:24) by shinoda


< ページ移動: 1 2 >

いやあ、今日は SpreadsheetGear という Excel 互換のスプレッドシート コンポーネントに振り回された一日・・・いや、半日だったけど(笑)・・・だった。

ASP.NET で開発している Web システムがあって、Web画面からアップロードした Excel ファイルをサーバサイドであれこれするんだけど、Excel ファイルによってちゃんと処理できるケースと、「Corrupt OpenXML document.」例外を発生するケースがあるのだ。

<asp:Label ID="lblExcelSel" runat="server" Text="Excelファイル"></asp:Label>&nbsp;
<asp:FileUpload ID="fileExcel" runat="server" />&nbsp;
<asp:Button ID="btnUpFile" runat="server" Text="取込" /> 

こんな感じで、FileUpload コントロールでアップしたデータを、サーバサイドで SpreadsheetGear を使って処理をする。

サーバサイドのプログラムがこんな感じ。

    ''' <summary>
    ''' 取込ボタン処理
    ''' </summary>
    ''' <param name="sender"></param>
    ''' <param name="e"></param>
    ''' <remarks></remarks>
    Protected Sub btnUpFile_Click(sender As Object, e As EventArgs) Handles btnUpFile.Click

        ' ファイルがアップロードされていなければ終了
        If (fileExcel.HasFile = False) Then Return

        ' ファイルをメモリーに格納
        Dim data(fileExcel.PostedFile.ContentLength - 1) As Byte
        fileExcel.PostedFile.InputStream.Read(data, 0, fileExcel.PostedFile.ContentLength)

        Dim xlsWorkBookSet As SpreadsheetGear.IWorkbookSet = SpreadsheetGear.Factory.GetWorkbookSet()
        Dim xlsWorkBook As SpreadsheetGear.IWorkbook = Nothing
        Try
            'メモリからワークブックにセット
            xlsWorkBook = xlsWorkBookSet.Workbooks.OpenFromMemory(data)
        Catch ex As Exception
            alert("Excelファイルを読み込めませんでした。(" + ex.Message + ")")
            Return
        End Try

        Dim currentSheet As SpreadsheetGear.IWorksheet = CType(xlsWorkBook.Worksheets(0), SpreadsheetGear.IWorksheet)
<以下略>

この、xlsWorkBook = xlsWorkBookSet.Workbooks.OpenFromMemory(data) しているところで「Corrupt OpenXML document.」例外エラーが発生するのである。

色々調べていたら、他のブックからシートをコピーしたり、他のブックのシートの一部をコピー&ペーストしたファイルがエラーになるようだ。元々ちゃんと読めていたファイルが読めなくなる。

xlsx ファイルは OpenXML 形式のファイルなので、コピー元の情報を書き込んだときに、何か問題が発生するんだろうなあ。日本語ファイル名をシングルクォーテーションで囲まないとか。
まだそこまで調べてないし、調べる時間もなさそうなんで、俺よりエロい人、ぜひご教示くださいませ。

< ページ移動: 1 2 >


コメント投稿
次の記事へ >
< 前の記事へ
TOPへ戻る

Powered by
MT4i 3.0.8