C# 使用Interop Services for WCF服务创建Excel文件流
在我的应用程序中,我尝试创建一个WCF服务,该服务接受表格json数据,并将该json数据转换为Excel文件流并发送回客户端。因此,为了创建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
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互操作将起作用。但是,你必须小心。必须使用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)。这里有更多信息: