gpt4 book ai didi

c# - 正确关闭 C# excel COM 对象

转载 作者:行者123 更新时间:2023-11-30 17:03:07 24 4
gpt4 key购买 nike

我正在尝试正确关闭 excel COM 对象,例如 excel 应用程序工作簿和工作表。我浏览了本网站和其他网站上的所有解决方案。什么都不管用。唯一的方法是运行一个循环来杀死或 excel 进程。有没有更好的方法或方法来杀死单个 excel 文件进程?

        #region VARIABLE

int nColumn = 0;
int nIMPORT = 1;
int endofsheet = 0;

string IMPORTfilepath = null;
string nsheet = null;
string nCell = null;
string lastfilename = "";

double rRFDS = 0;
double cRFDS = 0;

List<String> filename = new List<String>();

object misValue1 = System.Reflection.Missing.Value;

//Opening Central DB
Excel.Application CentralDB;
Excel.Workbook CentralDBWorkBook;
Excel.Worksheet CentralDBWorkSheet;
Excel.Range CentralDBrange;

//Opening RFDS
Excel.Application IMPORT;
Excel.Workbook IMPORTWorkBook;
Excel.Worksheet IMPORTWorkSheet;

//Excel.Range RFDSrange;
Excel.Range CellAddress;

#endregion

CentralDB = new Microsoft.Office.Interop.Excel.Application();
CentralDBWorkBook = CentralDB.Workbooks.Open(Odl1.FileName, 0, false, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
CentralDBWorkSheet = CentralDB.Worksheets.get_Item(1);

IMPORT = new Microsoft.Office.Interop.Excel.Application();
IMPORTfilepath = Odl2.FileNames[nIMPORT];
IMPORTWorkBook = IMPORT.Workbooks.Open(IMPORTfilepath, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
IMPORTWorkSheet = IMPORT.Worksheets.get_Item(1);

CentralDBrange = CentralDBWorkSheet.UsedRange;

filename = Odl2.FileNames.ToList();

endofsheet = CentralDBrange.Rows.Count;

foreach(string fn in filename)
{
try
{
IMPORTWorkBook = IMPORT.Workbooks.Open(fn, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
CentralDBWorkSheet.Cells[nIMPORT + endofsheet, 1] = IMPORTWorkBook.Name;
for (nColumn = 3; nColumn <= CentralDBrange.Columns.Count; nColumn++)
{
nsheet = (string)(CentralDBrange.Cells[2, nColumn].Value2);
foreach (Excel.Worksheet ws in IMPORTWorkBook.Sheets)
{
if (ws.Name.Equals(nsheet))
{
IMPORTWorkSheet = IMPORTWorkBook.Worksheets.get_Item(nsheet);

nCell = (string)(CentralDBrange.Cells[3, nColumn].Value2);
CellAddress = CentralDBWorkSheet.get_Range(nCell, nCell);

rRFDS = CellAddress.Row;
cRFDS = CellAddress.Column;
CentralDBWorkSheet.Cells[nIMPORT + endofsheet, nColumn] = IMPORTWorkSheet.Cells[rRFDS, cRFDS];
label4.Text = nIMPORT.ToString() + "/" + Convert.ToString(Odl2.FileNames.Count());
}
}
}
nIMPORT++;
nColumn = 3;
CentralDBWorkBook.Save();
IMPORTWorkBook.Close(false, null, null);
}
catch (System.Exception ex)
{
MessageBox.Show("Unable to release the Object " + ex.ToString());
}
lastfilename = fn;
}

CentralDB.Quit();
releaseObject(CentralDBWorkSheet);
releaseObject(CentralDBWorkBook);
releaseObject(CentralDB);

IMPORT.Quit();
releaseObject(IMPORTWorkSheet);
releaseObject(IMPORTWorkBook);
releaseObject(IMPORT);
GC.Collect();
}

private void releaseObject(object obj)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(obj);
obj = null;
}
catch (System.Exception ex)
{
obj = null;
MessageBox.Show("Unable to release the Object " + ex.ToString());
}
finally
{
GC.Collect();
}

}

最佳答案

试试这个顺序(加上 .Visible = false):

    releaseObject(CentralDBWorkSheet);
releaseObject(CentralDBWorkBook);

releaseObject(IMPORTWorkSheet);
releaseObject(IMPORTWorkBook);

CentralDB.Visible = false;
IMPORT.Visible = false;

CentralDB.Quit();
IMPORT.Quit();

releaseObject(CentralDB);
releaseObject(IMPORT);

关于c# - 正确关闭 C# excel COM 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18950170/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com