4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
1

Microsoft.Office.Interop.Excel.Application процессы Excel в памяти компьютера

02.12.2018, 14:29. Показов 3276. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день, коллеги!

Программа работает с файлами Excel.
В каждой процедуре я указываю, что приложение должно быть не видимым (указать это один раз вначале работы программы я не могу, ибо есть одна процедура, которая показывает документ Excel видимым).
Соответственно в начале кода:
VB.NET
1
Public oExcelCalc As New Microsoft.Office.Interop.Excel.Application
Выполнение этой команды приводит к появлению нового процесса Excel.

В каждой процедуре в начале указываю
VB.NET
1
oExcelCalc.Visible = False
Далее открытие файла, его сохранение и закрытие.
После чего закрываю приложение
VB.NET
1
oExcelCalc.Application.Quit()
НО... почему то процесс в памяти остается.
Выполнение нескольких процедур и в памяти компьютера висит несколько процессов Excel

Подскажите, что делаю не так и если делаю все правильно, как закрывать за собой созданный процесс Excel?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.12.2018, 14:29
Ответы с готовыми решениями:

Не могу записать в файл Excel при Microsoft.Office.Interop.Excel.Application.Visible = False
Коллеги, доброго времени суток. Столкнулся с такой проблемой. Не могу записать в файл, когда...

Работа с Excel через Microsoft.Office.Interop.Excel
Необходимо реализовать програмку взаимодействующую с Excel в режиме реального времени. Проблем...

"Application" в пространстве имен "Microsoft.Office.Interop.Excel" является неоднозначным
Собственно, подключил библиотеку Microsoft Excel 11 object library, прописал Imports...

Работа с Microsoft.Office.Interop.Excel
Всем доброго времени суток. Возникает проблема работы с библиотекой Microsoft.Office.Interop.Excel...

3
8939 / 4851 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
02.12.2018, 14:46 2
В теме Работа с Excel средствами VB.net. Как перевести код из VBA в VB.net? я приводил пример работы с Excel. И там совершенно не зря есть метод
VB.NET
1
2
3
4
5
Private Shared Sub Kill(ParamArray objects As Object())
    For Each obj In objects
        Marshal.FinalReleaseComObject(obj)
    Next
End Sub
Он как раз и освобождает ресурсы, позволяя приложению Excel закрыться.
1
4 / 4 / 0
Регистрация: 24.02.2016
Сообщений: 229
02.12.2018, 15:29  [ТС] 3
ViterAlex,

В Вашем примере открывается одна рабочая книга Excel.
VB.NET
1
Dim xlWb As Xl.Workbook = xlApp.Workbooks.Open(path)
По завершению работы с приложением Вы очищаете из памяти все, что было связано с открытым документом, передавая эти данные процедуру.
VB.NET
1
Kill(xlWb, xlApp, sheetList, lo, newSheet, pt)
А если открытых документов было несколько?

У меня программа открывает все документы Excel, которые есть в указанной папке и из всех документов собирает информацию.
Т.е. выглядит это примерно так:

VB.NET
1
2
3
4
5
6
7
8
9
Public oExcelCalc As New Microsoft.Office.Interop.Excel.Application
oExcelCalc.Visible = False
For Each strCalcName As String In IO.Directory.GetFiles(strProjecrFolderCalc, "*.xlsx")
  oExcelCalc.Workbooks.Open(strCalcName)
   ....
  oExcelCalc.ActiveWorkbook.Save()
  oExcelCalc.ActiveWorkbook.Close()
Next
oExcelCalc.Application.Quit()
Т.е. в процедуре много открываемых и закрываемых документов Excel. Как допилить код, что бы подчистить за собой все оставленные процессы? Каждый раз запускать процедуру Kill после закрытия очередного документа?

Добавлено через 16 минут
И у меня ругается на Marshal
VB.NET
1
2
3
4
5
Private Shared Sub Kill(ParamArray objects As Object())
        For Each obj In objects
            Marshal.FinalReleaseComObject(obj)
        Next
    End Sub
0
1528 / 1476 / 322
Регистрация: 03.10.2012
Сообщений: 1,516
02.12.2018, 16:27 4
Цитата Сообщение от Allleksey Посмотреть сообщение
Каждый раз запускать процедуру Kill после закрытия очередного документа?
Allleksey, а что этому мешает?
Цитата Сообщение от Allleksey Посмотреть сообщение
И у меня ругается на Marshal
VB.NET
1
Imports System.Runtime.InteropServices
или укажите полное имя класса
VB.NET
1
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(obj)
1
02.12.2018, 16:27
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
02.12.2018, 16:27
Помогаю со студенческими работами здесь

Microsoft.Office.Interop.Excel.Worksheet - переключение между листами
Споткнулся на пустом месте. Начал работать с многостраничным файлом. При переключении между...

Imports Microsoft.Office.Interop не работает
Доброго времени! Имею на машине Вынь10, VB Express 2010 и 2016 офис. Хочу прикрутить к...

VS 2015. Не импортируется Microsoft.Office.Interop
Обновил студию до 2015 версии. Создаю новый проект пытаюсь импортировать данную библиотеку, и...

Excel: использовать XlCellType и XlDirection без interop
Доброго времени. Хочу, чтобы программка работала на компьютерах , на которых...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru