C# 使用互操作创建Excel文件时防止打开Excel

C# 使用互操作创建Excel文件时防止打开Excel,c#,excel,office-interop,C#,Excel,Office Interop,大家好,我正在使用Microsoft office interop创建excel。它成功地创建了文件。但问题是,当它创建文件时,它只是打开excel将值添加到excel中,并以指定的名称保存。当时任何意外键入都会导致异常。我正在从数据库和因此需要时间。在处理过程中,我无法执行任何任务,因为它会在excel中键入异常。是否有任何方法在后台运行该过程,以便excel应用程序不会在每次创建文件时打开 Excel.Application oXL; Excel.Workbook oWB; Excel.Wo

大家好,我正在使用Microsoft office interop创建excel。它成功地创建了文件。但问题是,当它创建文件时,它只是打开excel将值添加到excel中,并以指定的名称保存。当时任何意外键入都会导致异常。我正在从数据库和因此需要时间。在处理过程中,我无法执行任何任务,因为它会在excel中键入异常。是否有任何方法在后台运行该过程,以便excel应用程序不会在每次创建文件时打开

Excel.Application oXL;
Excel.Workbook oWB;
Excel.Worksheet oSheet;
Excel.Range oRange;

// Start Excel and get Application object. 
oXL = new Excel.Application();

// Set some properties 
oXL.Visible = true;
oXL.DisplayAlerts = false;

// Get a new workbook. 
oWB = oXL.Workbooks.Add(Missing.Value);

// Get the active sheet 
oSheet = (Excel.Worksheet)oWB.ActiveSheet;
oSheet.Name = "Sales";

// Process the DataTable 
// BE SURE TO CHANGE THIS LINE TO USE *YOUR* DATATABLE 
DataTable dt = dtt;

int rowCount = 1;
foreach (DataRow dr in dt.Rows)
{
    rowCount += 1;
    for (int i = 1; i < dt.Columns.Count + 1; i++)
    {
        // Add the header the first time through 
        if (rowCount == 2)
        {
            oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
        }
        oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
    }
}

// Resize the columns 
//oRange = oSheet.get_Range(oSheet.Cells[1, 1],
//              oSheet.Cells[rowCount, dt.Columns.Count]);


oRange = oSheet.Range[oSheet.Cells[1, 1], oSheet.Cells[rowCount, dt.Columns.Count]];
oRange.EntireColumn.AutoFit();

// Save the sheet and close 
// oSheet = null;
oRange = null;

oWB.SaveAs("" + username + " .xls", Excel.XlFileFormat.xlWorkbookNormal,
    Missing.Value, Missing.Value, Missing.Value, Missing.Value,
    Excel.XlSaveAsAccessMode.xlExclusive,
    Missing.Value, Missing.Value, Missing.Value,
    Missing.Value, Missing.Value);
oWB.Close(Missing.Value, Missing.Value, Missing.Value);
oWB = null;
oXL.Quit();

// Clean up 
// NOTE: When in release mode, this does the trick 
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
Excel.Application-oXL;
Excel.oWB工作手册;
Excel.oSheet工作表;
Excel.Range橙色;
//启动Excel并获取应用程序对象。
oXL=新的Excel.Application();
//设置一些属性
可见=真;
oXL.DisplayAlerts=false;
//获取新工作簿。
oWB=oXL.Workbooks.Add(缺少.Value);
//获取活动工作表
oSheet=(Excel.Worksheet)oWB.ActiveSheet;
oSheet.Name=“销售”;
//处理数据表
//确保将此行更改为使用*您的*数据表
数据表dt=dtt;
int rowCount=1;
foreach(数据行dr在dt.行中)
{
行计数+=1;
对于(int i=1;i
试试这个

//启动Excel并获取应用程序对象。oXL=新建Excel。应用程序{Visible=false}

  • 或- //设置一些属性oXL.Visible=false
默认情况下,通过互操作打开的Excel是不可见的。
是您的代码改变了Excel的可见性。 拆下线路

oXL.Visible = true;
或者设置为false

oXL.Visible = false;