是什么导致引发带有消息“无法访问'System.IO.MemoryStream'”的COMException?

塔可炸玉米饼

我正在尝试将a导出DataTable到Microsoft Excel 2016,并且让我的代码“成功”运行了一次。当它确实运行时,我尝试打开Excel文件,它告诉我文件格式无效(尝试导出到XLSX)。这完全是另一个问题,但是我也将其包括在内,以防万一它对您有帮助。

在以下每次尝试导出时,代码都将引发COMException带有以下消息的消息:

无法访问“ System.IO.MemoryStream”。

堆栈跟踪显示:

在Microsoft.Office.Interop.Excel._Workbook.SaveAs(对象文件名,对象文件格式,对象密码,对象WriteResPassword,对象ReadOnlyRecommended,对象CreateBackup,XlSaveAsAccessMode AccessMode,对象冲突解决方案,对象AddToMru,对象TextCodepage,对象TextVisualLayout,对象本地)

在MyNamespace.btnExportToExcel_Click(Object sender,EventArgs e)在C:\ ... \ PageName.aspx.cs:line 279中

两者均无助于调试过程。我遇到过一些例外,即Stream在尝试重新打开对象之前没有关闭对象,这很容易解决,并且这里存在大量的问题。

我正在using语句中创建流,Stream即使发生异常,该也应自动关闭并处理尽管如此,我还尝试将aClose手动添加Disposefinally代码块中,但仍然会引发异常。

using (MemoryStream fs = new MemoryStream()) {
    try {
        Excel.Application xlApp = new Excel.Application();
        Excel.Workbook xlWorkBook = xlApp.Workbooks.Add(Missing.Value);
        var xlSheets = xlWorkBook.Sheets as Excel.Sheets;
        var xlNewSheet = (Excel.Worksheet)xlSheets.Add(xlSheets[1], Type.Missing, Type.Missing, Type.Missing);
        xlNewSheet.Name = "newsheet";

        System.Data.DataTable dt = (System.Data.DataTable)excelGrid.DataSource;
        for (int x = 0; x < dt.Rows.Count; x++)
            for (int y = 0; y < dt.Columns.Count; y++)
                xlNewSheet.Cells[x + 1, y + 1] = dt.Rows[x][y];

        xlWorkBook.SaveAs((Stream)fs); // Exception is thrown here.
        fs.Position = 0;
        string myName = Server.UrlEncode(SearchTitle + ".xlsx");
        Response.Clear();
        Response.Buffer = true;
        Response.AddHeader("content-disposition", "attachment; filename=" + myName);
        Response.ContentType = "application/vnd.ms-excel";
        Response.BinaryWrite(fs.ToArray());
        Response.End();

        xlWorkBook.Close(true, Missing.Value, Missing.Value);
        xlApp.Quit();
    } catch (ThreadAbortException) {
        // This exception is throw from Response.End by design. Gracefully ignore it.
    } catch (Exception ex) {
        // Log exception.
        throw ex;
    } finally {
        fs.Close();
        fs.Dispose();
    }
}

我认为也许重新启动调试会话会起作用,但这也无法解决。


是什么导致COMException该消息Cannot access 'System.IO.MemoryStream'被抛出?

马克·格雷韦尔

这里的API是一个谎言;它是Excel可以执行的操作的包装,并且Excel是可以与文件进行通讯的COM服务器。尽管它被描述为带有Stream,但实际上它受到的限制更大。它应该可以使用FileStream,但是:它不能使用MemoryStream所以...别那样 改为写入temp目录中的文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有效使用System.IO.MemoryStream(或替代System.IO.MemoryStream)

来自分类Dev

“System.IO.MemoryStream”类型的对象无法转换为“ExcelDataReader.IExcelDataReader”类型

来自分类Dev

附加信息:无法将类型为“ System.IO.MemoryStream”的对象转换为类型为“ JsonData”的对象

来自分类Dev

查询AD引发System.Runtime.InteropServices.COMException

来自分类Dev

是什么导致BackgroundAudioPlayer.get_Position()出现System.Runtime.InteropServices.COMException?

来自分类Dev

使用System.IO.MemoryStream处理相对较大的zip存档

来自分类Dev

从调试器刷新 System.IO.MemoryStream 到二进制文件

来自分类Dev

未能创建组件“reportviewer”。错误消息遵循'system.runtime.interopservices.comexception' vs 2015

来自分类Dev

字符串的ASP.NET对称加密-获取值System.IO.MemoryStream而不是加密的名称

来自分类Dev

SSIS脚本任务System.IO.File.WriteAllText引发“进程无法访问文件”错误

来自分类Dev

System.IO.IOException: '进程无法访问文件'

来自分类Dev

System.IO.Error的意义是什么

来自分类Dev

MemoryStream无法填充附件

来自分类Dev

InternetExplorer COMException:System.Runtime.InteropServices.COMexception:RPC服务器不可用

来自分类Dev

Puma .NET异常'System.Runtime.InteropServices.COMException'

来自分类Dev

System.Runtime.InteropServices.COMException(0x8004100F)

来自分类Dev

System.Runtime.InteropServices.COMException:类未注册

来自分类Dev

如何更正“System.Runtime.InteropServices.COMException”的这个错误?

来自分类Dev

使用服务结构时出现 System.Runtime.InteropServices.COMException

来自分类Dev

System.IO.File.Delete引发算术运算导致溢出

来自分类Dev

System.IO.Pipelines:接收连续消息

来自分类Dev

Postsharp引发System.Runtime.InteropServices.COMException(0x8013141C):找不到强名称密钥容器。(来自HRESULT的异常:0x8013141C)

来自分类Dev

为什么MemoryStream抛出InvalidFormatException?

来自分类Dev

资源管理器预览导致System.Runtime.InteropServices.COMException:不授予自动化权限。在ActivePresentation.name上

来自分类Dev

资源管理器预览导致System.Runtime.InteropServices.COMException:不授予自动化权限。在ActivePresentation.name上

来自分类Dev

MemoryStream:本地还是没有?

来自分类Dev

MemoryStream,kb 有多少字节?

来自分类Dev

LiteDB 5 System.IO.IOException:进程无法访问文件

来自分类Dev

System.IO.IOException:该进程无法访问该文件

Related 相关文章

  1. 1

    有效使用System.IO.MemoryStream(或替代System.IO.MemoryStream)

  2. 2

    “System.IO.MemoryStream”类型的对象无法转换为“ExcelDataReader.IExcelDataReader”类型

  3. 3

    附加信息:无法将类型为“ System.IO.MemoryStream”的对象转换为类型为“ JsonData”的对象

  4. 4

    查询AD引发System.Runtime.InteropServices.COMException

  5. 5

    是什么导致BackgroundAudioPlayer.get_Position()出现System.Runtime.InteropServices.COMException?

  6. 6

    使用System.IO.MemoryStream处理相对较大的zip存档

  7. 7

    从调试器刷新 System.IO.MemoryStream 到二进制文件

  8. 8

    未能创建组件“reportviewer”。错误消息遵循'system.runtime.interopservices.comexception' vs 2015

  9. 9

    字符串的ASP.NET对称加密-获取值System.IO.MemoryStream而不是加密的名称

  10. 10

    SSIS脚本任务System.IO.File.WriteAllText引发“进程无法访问文件”错误

  11. 11

    System.IO.IOException: '进程无法访问文件'

  12. 12

    System.IO.Error的意义是什么

  13. 13

    MemoryStream无法填充附件

  14. 14

    InternetExplorer COMException:System.Runtime.InteropServices.COMexception:RPC服务器不可用

  15. 15

    Puma .NET异常'System.Runtime.InteropServices.COMException'

  16. 16

    System.Runtime.InteropServices.COMException(0x8004100F)

  17. 17

    System.Runtime.InteropServices.COMException:类未注册

  18. 18

    如何更正“System.Runtime.InteropServices.COMException”的这个错误?

  19. 19

    使用服务结构时出现 System.Runtime.InteropServices.COMException

  20. 20

    System.IO.File.Delete引发算术运算导致溢出

  21. 21

    System.IO.Pipelines:接收连续消息

  22. 22

    Postsharp引发System.Runtime.InteropServices.COMException(0x8013141C):找不到强名称密钥容器。(来自HRESULT的异常:0x8013141C)

  23. 23

    为什么MemoryStream抛出InvalidFormatException?

  24. 24

    资源管理器预览导致System.Runtime.InteropServices.COMException:不授予自动化权限。在ActivePresentation.name上

  25. 25

    资源管理器预览导致System.Runtime.InteropServices.COMException:不授予自动化权限。在ActivePresentation.name上

  26. 26

    MemoryStream:本地还是没有?

  27. 27

    MemoryStream,kb 有多少字节?

  28. 28

    LiteDB 5 System.IO.IOException:进程无法访问文件

  29. 29

    System.IO.IOException:该进程无法访问该文件

热门标签

归档