Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用报表设计器设计报表,然后将其导出到excel文件要容易得多。它可以生成流,您甚至不必生成文件。您是否尝试过在不保存的情况下强制关闭它?尝试WB.Close(false)在您的oXL.Quit()之前您从未释放获得的COM对象。excel永远不会完全退出_C#_Excel - Fatal编程技术网

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;