C# 使用报表设计器设计报表,然后将其导出到excel文件要容易得多。它可以生成流,您甚至不必生成文件。您是否尝试过在不保存的情况下强制关闭它?尝试WB.Close(false)在您的oXL.Quit()之前您从未释放获得的COM对象。excel永远不会完全退出
C# 使用报表设计器设计报表,然后将其导出到excel文件要容易得多。它可以生成流,您甚至不必生成文件。您是否尝试过在不保存的情况下强制关闭它?尝试WB.Close(false)在您的oXL.Quit()之前您从未释放获得的COM对象。excel永远不会完全退出,c#,excel,C#,Excel,使用报表设计器设计报表,然后将其导出到excel文件要容易得多。它可以生成流,您甚至不必生成文件。您是否尝试过在不保存的情况下强制关闭它?尝试WB.Close(false)在您的oXL.Quit()之前您从未释放获得的COM对象。excel永远不会完全退出,除非您这样做so@Steve将引用设置为null,使用GC.Collect,并调用Quit将足以清理Excel。@DaveCousineau并不总是这样。这样可能会导致内存损坏。在过去的几年中,我经历过这种情况past@Steve“内存损坏”
使用报表设计器设计报表,然后将其导出到excel文件要容易得多。它可以生成流,您甚至不必生成文件。您是否尝试过在不保存的情况下强制关闭它?尝试
WB.Close(false)代码>在您的oXL.Quit()之前代码>您从未释放获得的COM对象。excel永远不会完全退出,除非您这样做so@Steve将引用设置为null
,使用GC.Collect
,并调用Quit
将足以清理Excel。@DaveCousineau并不总是这样。这样可能会导致内存损坏。在过去的几年中,我经历过这种情况past@Steve“内存损坏”?我有几十个这样做的应用程序没有问题。你有没有尝试过在不保存的情况下强制关闭它?尝试WB.Close(false)代码>在您的oXL.Quit()之前代码>您从未释放获得的COM对象。excel永远不会完全退出,除非您这样做so@Steve将引用设置为null
,使用GC.Collect
,并调用Quit
将足以清理Excel。@DaveCousineau并不总是这样。这样可能会导致内存损坏。在过去的几年中,我经历过这种情况past@Steve“内存损坏”?我有几十个这样做的应用程序,没有问题。我使用了ClosedXML一点,它非常好。我更熟悉EPPLus,也就是指甲。如果你还没有试过,那就试一下。正如您在ClosedXML中所说的,它确实消除了使用互操作的许多痛苦。interops的真正痛苦之一是使用Intellisense的能力减弱。同意尽可能避免在服务器上安装Excel,这也会使许可证发放变得非常复杂,MS强烈建议不要使用:当前的许可证发放准则禁止在服务器上使用Office应用程序为客户端请求提供服务,除非这些客户自己拥有Office的许可副本。
interops的真正痛苦之一是使用Intellisense的能力减弱。我怎么能忘记呢?在使用互操作库时,我花在寻找可能的方法和属性而不是实际工作上的时间太多了,我使用了ClosedXML,这非常好。我更熟悉EPPLus,也就是指甲。如果你还没有试过,那就试一下。正如您在ClosedXML中所说的,它确实消除了使用互操作的许多痛苦。interops的真正痛苦之一是使用Intellisense的能力减弱。同意尽可能避免在服务器上安装Excel,这也会使许可证发放变得非常复杂,MS强烈建议不要使用:当前的许可证发放准则禁止在服务器上使用Office应用程序为客户端请求提供服务,除非这些客户自己拥有Office的许可副本。
interops的真正痛苦之一是使用Intellisense的能力减弱。我怎么能忘记呢?在使用互操作库时,我花在寻找可能的方法和属性而不是实际工作上的时间实在太多了
Set objExcel = CreateObject("Excel.Application")
set ObjWorkbook =objExcel.Workbooks.Open(blankFile)
`...
objWorkbook.Saveas(outputFile)
objExcel.Quit
public FileResult filledOutWorkbook()
{
Excel.Application oXL;
Excel._Workbook oWB;
Excel._Worksheet oSheet;
Excel.Range oRng;
oXL = new Excel.Application();
oXL.Visible = false;
oWB = oXL.Workbooks.Open(Server.MapPath("~/Content/Worksheet2.xlsm"));
oSheet = oWB.Sheets["Information Sheet"];
oSheet.Range["V2"].Value2 = "customer test lol";
if (!Directory.Exists(Server.MapPath("~/App_Data/temp")))
{
Directory.CreateDirectory(Server.MapPath("~/App_Data/temp"));
}
var filename = Server.MapPath("~/App_Data/temp/") + DateTime.Now.ToString("o").Replace(":", "") + ".xlsm";
oWB.SaveCopyAs(filename);
oXL.Visible = false;
oXL.Quit();
return File(filename, "application/vnd.ms-excel.sheet.macroEnabled.12", "Worksheet.xlsm");
}
oWB.Close(false);
oXL.Workbooks[0].Close(false);
application.DisplayAlerts = false;
application.Quit();
application.DisplayAlerts = true;