Я использую C#, чтобы записать некоторую информацию в файл Excel:
using System;
using System.IO;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel;
using System.Globalization;
public void OpenExcel(string folder, string filename)
{
this.folder = folder;
this.filename = filename;
path = folder + @"\" + filename;
if (File.Exists(path) != true) //if the output file does not exists, create it
{
var app = new Microsoft.Office.Interop.Excel.Application();
var temp = app.Workbooks.Add();
temp.SaveAs(path);
temp.Close();
}
wb = excel.Workbooks.Open(path);
}
После того, как я закончу и сохраню файл, я хочу закрыть его:
public void Close()
{
wb.Close(false);
excel.Quit();
excel.Application.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
workSheet = null;
wb = null;
excel = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
Обе пустоты выше являются частью объекта класса с именем ExcelFile
. Однако, когда я использую приведенный выше код и выхожу из созданной мной программы, Excel все равно остается в качестве фонового процесса, как в этом вопросе: C# закрытие Excel после использования
У меня есть Я видел, что в этом topi c есть несколько потоков в stackoverflow, но мне кажется, что решение не работает. Я хочу по возможности избегать уничтожения всех процессов Excel, так как это программа, которая будет производить вычисления с использованием thread pool
, на выполнение которых уйдут часы.