我正在尝试打开一个 xls 文件,读取几行数据,从数据中形成一个自定义列表,然后关闭 Excel 工作表。这就是我所拥有的:
InitializeWorkbook(Path);
List<Custom> list = new List<Custom>();
Worksheet wkSht = (Worksheet)workBk.Worksheets[3];
if (wkSht.Name.Equals("Sht3", StringComparison.OrdinalIgnoreCase))
{
Range PartNumRange = wkSht.get_Range("A:A", System.Reflection.Missing.Value);
Range RevRange = wkSht.get_Range("C:C", System.Reflection.Missing.Value);
Range SwRange = wkSht.get_Range("L:L", System.Reflection.Missing.Value);
Range NomenRange = wkSht.get_Range("M:M", System.Reflection.Missing.Value);
// Start at Row 6
int i = 6;
object Num = (PartNumRange[i, 1] as Range).Text;
object Nomen = (NomenRange[i, 1] as Range).Text;
object Sw = (SwRange[i, 1] as Range).Text;
object SwRev = (RevRange[i, 1] as Range).Text;
while (!string.IsNullOrEmpty(Num.ToString()) || !string.IsNullOrEmpty(Nomen.ToString()) || !string.IsNullOrEmpty(Sw.ToString()) || !string.IsNullOrEmpty(SwRev.ToString()))
{
if (!string.IsNullOrEmpty(Nomen.ToString()) && !string.IsNullOrEmpty(Sw.ToString()) && !string.IsNullOrEmpty(SwRev.ToString())
{
Custom item = new Custom();
item.PartNumber = (PartNumRange[i, 1] as Range).Text.ToString();
item.Nomenclature = (NomenRange[i, 1] as Range).Text.ToString();
item.SwNumber = (SwRange[i, 1] as Range).Text.ToString();
item.SwRevision = (RevRange[i, 1] as Range).Text.ToString();
list.Add(item);
}
i++;
Num = (PartNumRange[i, 1] as Range).Text;
Nomen = (NomenRange[i, 1] as Range).Text;
Sw = (SwRange[i, 1] as Range).Text;
SwRev = (RevRange[i, 1] as Range).Text;
}
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.ReleaseComObject(PartNumRange);
Marshal.ReleaseComObject(RevRange);
Marshal.ReleaseComObject(SwRange);
Marshal.ReleaseComObject(NomenRange);
Marshal.ReleaseComObject(wkSht);
workBk.Close(false, System.Reflection.Missing.Value, false);
Marshal.ReleaseComObject(workBk);
Marshal.ReleaseComObject(ExcelWorkSheets);
ExcelApp.Quit();
Marshal.ReleaseComObject(ExcelApp);
GC.Collect();
GC.WaitForPendingFinalizers();
}
我不知道为什么,但是在我完成执行后 Excel 没有关闭。只有当程序退出时 Excel 才会退出。我尝试了各种组合并避免了两个点规则,但仍然不行。关于我所缺少的任何想法?
编辑:调用 ExcelApp.Quit 会关闭 ExcelApp 和 ExcelWorksheets。