Закройте Excel в C# после сохранения файла - PullRequest
0 голосов
/ 27 апреля 2020

Я использую 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, на выполнение которых уйдут часы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...