Excel не закрывается

0

Вопрос

Моя проблема в том, что у меня есть программа, которая считывает данные с листа Excel .xlsb, но когда файл Excel открыт, он просит меня сохранить. Почему?

 async Task<bool> ReadVariable()
        {
            bool succeeded = false;
            while (!succeeded)
            {
                
                //open file excel using microsoft dll
                Excel.Application app = new Excel.Application();
                

                //open workbook
                Workbook wk = app.Workbooks.Open(excelpath, ReadOnly : true);
                //get first sheet
                Worksheet sh = wk.Worksheets[1];
                //get cell
                // Cells[unten/rechts] Example: [1,2] = B1 
                var day1tag = sh.Cells[27, 2].Value.ToString();
                exceltest1.Text = day1tag;
              
                var day1früh = sh.Cells[26, 2].Value.ToString();
                Day24oee24.Text = day1früh;


               
                app.DisplayAlerts = false;
                wk.Close(SaveChanges : false);
                app.Quit();

                await Task.Delay(15000);
                //await Task.Delay(108000000);
            }
            return succeeded;
        }
c# excel
2021-11-24 05:59:11
1

Лучший ответ

1

[В дополнение к @JohnG]

Во-первых, вы должны поставить app.Quit(); командная строка вне цикла while, а затем выполните свои алгоритмы, после чего сохраните свою книгу с этим кодом;

xlWorkbook.SaveAs(saveFileDialog1.FileName + ".xlsx", Excel.XlFileFormat.xlWorkbookDefault, null, null, null, null, Excel.XlSaveAsAccessMode.xlExclusive, null, null, null, null, null);

а затем используйте

app.Quit();

В дополнение; После всего процесса zombie excel будет показан в вашем диспетчере задач, для решения которого я хотел бы рекомендовать следующее;

Импорт;

using System.Diagnostics;

Чтобы убить зомби, используйте эту функцию;

private void KillSpecificExcelFileProcess(string excelFileName)
{
    var processes = from p in Process.GetProcessesByName("EXCEL")
                    select p;

    foreach (var process in processes)
    {
        if (process.MainWindowTitle == excelFileName)
            process.Kill();
    }
}

И вызовите функцию следующим образом; (Взаимодействие отличается безымянностью из-за того, что мы должны использовать ("").

KillSpecificExcelFileProcess("");
2021-11-24 11:22:24

Спасибо вам за этот процесс KillSpecificExcelFileProcess(""); это здорово :)
Lukas Klossek

но ты пойми меня неправильно , я не хочу,чтобы это спасало, я не хочу, чтобы он больше просил меня спасать
Lukas Klossek

Тогда вам не следует использовать wk.Close(); и app.Quit(); команды.
Gürkan Özdem

На других языках

Эта страница на других языках

Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................