Завершение процесса Excel - PullRequest
1 голос
/ 31 марта 2012

Прочитав здесь много тем о том, как не использовать двойные точки при обращении к объектам Excel com, я решил реализовать это.

Это работало до тех пор, пока я не занялся циклом.

Вот мой цикл. Обратите внимание, что это работает, если я закомментирую это:

        for (int i = 1; i < dgv.Columns.Count + 1; i++)
        {
            excelWorkbook.Cells[1, i] = dgv.Columns[i - 1].HeaderText;

            var cell = excelWorkbook.Cells[1, i];
            var fontSetter = cell.Font;
            fontSetter.Bold = true; //Bolds the header row

            // Garbage collecting
            GC.Collect();
            GC.WaitForPendingFinalizers();

            Marshal.FinalReleaseComObject(fontSetter);
            Marshal.FinalReleaseComObject(cell);
        }

Разве мой код не должен правильно определять их переменные?

Вот мой полный код:

[Code removed]

Я пытаюсь выполнить шаги в Как правильно очистить объекты взаимодействия Excel? (второй ответ)

Ответы [ 2 ]

1 голос
/ 31 марта 2012

Нелегко понять это правильно.Но я удивлен следующими компиляциями:

excelWorkbook.Cells[1, i] = dgv.Columns[i - 1].HeaderText; 
var cell = excelWorkbook.Cells[1, i]; 

Возможно, вы имели в виду:

excelWorkbook.Cells[1, i].Value = dgv.Columns[i - 1].HeaderText; 
var cell = excelWorkbook.Cells[1, i]; 

, который следует заменить на:

var cell = excelWorkbook.Cells[1, i]; 
cell.Value = dgv.Columns[i - 1].HeaderText; 

Я нене вижу смысла в ваших вызовах GC.Collect и GC.WaitForPendingFinalizers, поскольку вы делаете их до того, как cell и fontSetter выйдут из области видимости.

Наконец, вызовы Marshal.FinalReleaseComObject, вероятно, должны быть вБлок finally, так что они будут выполнены, даже если выброшено исключение.

0 голосов
/ 31 марта 2012

Я сделал это, следуя методу, указанному nightcoder в Как правильно очистить объекты взаимодействия Excel? .

Вам не нужно ссылаться на что-либо, и у них наименьший беспорядок, он закрывает процесс по своему идентификатору.Надеюсь, что это помогает кому-то, кто приходит смотреть.

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