C# 使用Interop Services for WCF服务创建Excel文件流

C# 使用Interop Services for WCF服务创建Excel文件流,c#,winforms,wcf,winforms-interop,C#,Winforms,Wcf,Winforms Interop,在我的应用程序中,我尝试创建一个WCF服务,该服务接受表格json数据,并将该json数据转换为Excel文件流并发送回客户端。因此,为了创建Excel文件,我使用以下使用互操作服务的代码 object misValue = System.Reflection.Missing.Value; var xlApp = new Excel.Application(); var xlWorkBook = xlApp.Workbooks.Add(misVa

在我的应用程序中,我尝试创建一个WCF服务,该服务接受表格json数据,并将该json数据转换为Excel文件流并发送回客户端。因此,为了创建Excel文件,我使用以下使用互操作服务的代码

        object misValue = System.Reflection.Missing.Value;

        var xlApp = new Excel.Application();
        var xlWorkBook = xlApp.Workbooks.Add(misValue);

        var xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.Item[1];
        xlWorkSheet.Cells[1, 1] = "FirstName";
        xlWorkSheet.Cells[1, 2] = "Last Name";
        xlWorkSheet.Cells[1, 3] = "Age";


        xlWorkSheet.Cells[2, 1] = "Stezma";
        xlWorkSheet.Cells[2, 2] = "Seb";
        xlWorkSheet.Cells[2, 3] = "25";

        xlWorkBook.SaveAs("csharp-Excel.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);
        xlWorkBook.Close(true, misValue, misValue);
        xlApp.Quit();
**这是我的疑问**

  • 是否建议使用互操作服务来满足此要求,如果没有,我可以选择其他什么方法来创建excel文件流

  • 如果我建议如何创建创建的excel文件流,当前文件保存在机器的文档文件夹中。我不想将文件保存到本地文件夹,我如何通过互操作方法获取该文件的流


  • Excel互操作将起作用。但是,你必须小心。必须使用System.Runtime.InteropServices.Marshal.ReleaseComObject手动处置互操作对象。此外,在使用互操作时,必须避免使用属性/“双点”的属性

    否则将导致Excel应用程序进程拒绝关闭。这会导致严重的内存泄漏,最终导致服务器崩溃

    如果您希望避免互操作带来的所有麻烦,我建议您使用VisualStudioToolsforOffice。它为您处理所有的清理,同时提供比互操作更多的控制

    但是,VSTO需要本地办公室安装

    如果您所做的只是添加数据,则可以使用access的数据库驱动器ACE和OLEDB访问Excel文件

    OLEDB对于数据事务来说是快速和轻量级的,并且将Excel视为另一个数据库。但是,它无法调整文件的任何其他方面,例如格式。它也在纯SQL上运行,因此创建自定义SQL字符串可能是一件痛苦的事情

    不幸的是,这些方法都不真正支持“仅流”。Interop和VSTO将在打开新工作簿时在临时文件夹中创建工作簿。此外,如果OLEDB找不到文件,它只会创建一个新文件

    即使有人在办公桌上手动打开Excel文件进行电子表格工作,Office也会在临时文件夹中创建一份副本。“保存”按钮仅用临时副本覆盖原件

    因此,如果“永远不要将文件保存到磁盘,甚至保存到临时文件夹”是一项要求,那么您必须探索第三方工具


    “向客户端发送文件”方法将与任何其他文件的方法相同。Excel在这方面并不特别。下载方法示例:

    重复的?哪个问题?该链接已断开。抱歉,我回答了另一个问题,但作者已将其删除。在另一个回答中,我建议使用Office Open XML,因为它没有互操作要求,也没有许可问题(因为您不需要在服务器上安装Office)。这里有更多信息: