Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
1

Excel остается в процессах после чтения

31.03.2015, 17:11. Просмотров 1993. Ответов 36
Метки нет (Все метки)

читал тему ВладКонна, и инфу в интернете, все сделано как надо, но процессы все равно полодятся. убиваются только нажатием кнопки выход на главней форме (вставил туда appExcel.Quit() )

у меня есть главная форма меню
при выборе определенных параметров в меню, в другую форму передаются соответствующие ячейки экселя,
процедуры передачи у меня в главной формы, все имеют вконце appExcel.Quit() (appExcel - создаваемый мной объект для чтения книги)

вот код процедуры:
находится на главной форме


vb.net
1
2
3
4
5
6
7
8
9
10
        sub test
        appExcel = CreateObject("Excel.Application")
        appExcel.Workbooks.Open(Application.StartupPath & "\SFv3.xlsx")
        appExcel.Visible = False
 
        'куча работы по приравниванию ячеек экселя к полям другой формы
 
        appExcel.Workbooks(1).Close(True)
        appExcel.Quit()
        end sub
Добавлено через 6 минут
ставил после строки выхода мсгбокс, работает,значит строку обрабатывает
но почему из процессов не уходит вопрос (сидел смотря на диспетчер задач)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2015, 17:11
Ответы с готовыми решениями:

При закрытии формы программа закрывается, но остается в процессах
Всем привет, очередной вопрос новичка к знатокам, вот структура программы...

Excel остается в памяти. Как убить процесс?
Я пытаюсь открыть и закрыть имеющийся EXCEL файл. Как убить процесс? Мой код не...

После движения шарика остается след
Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick ...

После закрытия приложения оно продолжает висеть в процессах
Несколько форм. В настройках выставлено закрытие проекта после закрытия...

Пробная база данных.EndOfException: Unable to read the end of the stream (после попытки чтения первой строки)
Написал на С# учебно-тренировочную базу данных,но работать она не...

36
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 18:26 2
.Close без (True) не пробовал? Просто .Close()
0
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
31.03.2015, 18:52  [ТС] 3
Yury Komar

да, все равно. не помогает.

вот главное в кнопке выход стоит та же фараза "appExcel.Quit()" и все равно. в ней траблы
0
Памирыч
Почетный модератор
20893 / 8777 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
31.03.2015, 19:26 4
Есть такая расхожая проблема, о которой говорит andryshka69. Что ни пиши, процесс продолжает висеть.
Именно по этой причине я в части проектов с Excel перешел на ADO.
Серьезно выиграл в скорости работы + никаких процессов.
Но это надо изучать технологию ADO.NET
0
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
31.03.2015, 19:40  [ТС] 5
можешь привести пример чтения

мне важно считать с экселя. все остальное не так важно!
0
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 19:48 6
Цитата Сообщение от Памирыч Посмотреть сообщение
Но это надо изучать технологию ADO.NET
вот то-то и оно

Добавлено через 1 минуту
andryshka69,
ну убивай тогда процесс насильно, делов то... Вот только на мою программу как-то ругался антивирус, так как считал эту строчку кода угрозой ))))))

вот так делай и не будет тебе процесса больше
vb.net
1
Process.GetProcessesByName("excel")(0).Kill()
0
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
31.03.2015, 20:06  [ТС] 7
Yury Komar

а если отрыт эксел отдельно тоже убьет?

Добавлено через 6 минут
в плане если у пользователя открыт эксель параллельно, то убьет его отрытый эксель тоже?
0
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 20:25 8
Цитата Сообщение от andryshka69 Посмотреть сообщение
а если отрыт эксел отдельно тоже убьет?
Тогда сделай так:
vb.net
1
        Try : Process.GetProcessesByName("excel")(1).Kill() : Catch ex As Exception : Process.GetProcessesByName("excel")(0).Kill() : End Try
если Excel открыт то его не тронет а убиет следующий Excel(видимо который завис), если нет открытого, то убьет тот что завис
0
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
31.03.2015, 20:29  [ТС] 9
проверил. не убьет.
где кнопка помочь проекту?

Добавлено через 1 минуту
непривычно сишнику с вба) изучал его лет 10 назад, когда можно было скомилить ехе файл весом 40кб и все довольны
0
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 20:32 10
Цитата Сообщение от andryshka69 Посмотреть сообщение
где кнопка помочь проекту?
Вот она КНОПКА
0
Изображения
 
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 20:34 11
Цитата Сообщение от andryshka69 Посмотреть сообщение
вба
VBA - это не есть VB.NET
А зачем вы на VB.NET перешли, если знаете C-шный язык?
Ведь было бы проще изучить C#.NET, имея глаз, заточенный под C-шный синтаксис?
0
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
31.03.2015, 20:40  [ТС] 12
я начал на вб.нет
стало интересно
0
Памирыч
Почетный модератор
20893 / 8777 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
31.03.2015, 20:46 13
Цитата Сообщение от andryshka69 Посмотреть сообщение
где кнопка помочь проекту?
Помочь проекту можно вступив в ряды модераторов и помогать наводить порядок.
Помочь можно, написав хорошие FAQ (не тот, что прикреплен в данном разделе, а самый настоящий, есть раздел специальный)
Помочь можно даже, не нарушая Правил и хорошо вести себя на форуме.

Цитата Сообщение от Yury Komar Посмотреть сообщение
Вот она КНОПКА
Эта кнопка помогает не проекту, а конкретному пользователю.
При чем ТС не имеет такой репутации, чтобы ставить хоть сколько-нибудь внятные отзывы.

Цитата Сообщение от Yury Komar Посмотреть сообщение
Ведь было бы проще изучить C#.NET, имея глаз, заточенный под C-шный синтаксис?
Сходство заканчивается на синтаксисе, ТС выиграет не слишком.
Давайте не будем про "лучше/хуже", писать можно на чем угодно, лишь бы решалась поставленная задача как можно быстрее и эффективнее.

andryshka69, по теме: убивать процессы - дурной тон, лучше оставить эту затею.
Если все же очень хочется, то каждый процесс вроде как имеет свой идентификатор, можно проверять его, но все это не дает стопроцентной уверенности, что программа посчитает ненужным именно тот процесс, что породила сама.
0
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 20:47 14
andryshka69,
Цитата Сообщение от andryshka69 Посмотреть сообщение
стало интересно
поддержу. Просто, интересно и затягивает

и еще, если вы обращаетесь к кому либо в теме, то думаю будет правильней сперва выбрать человека, кому пост адресован, а то так не видно. есть ли сообщение МНЕ или нет.
0
Миниатюры
Excel остается в процессах после чтения  
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 20:53 15
Памирыч, да вы правы.

Добавлено через 3 минуты
Цитата Сообщение от Памирыч Посмотреть сообщение
каждый процесс вроде как имеет свой идентификатор
хотя, и правда, если уж очень хочется, то можно при чтении данных запоминать этот идентификатор и затем по нему проверять, закрылся он или нет.
0
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
31.03.2015, 21:00  [ТС] 16
Памирыч
а как иначе мне считать данные с экселя и вывести их?

Добавлено через 1 минуту

Yury Komar
вы писали код
vb.net
1
2
3
4
5
Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
        Dim Settings As String() = IO.File.ReadAllLines(IO.Path.Combine(Application.StartupPath, "Settings.txt"), System.Text.Encoding.Default)
        Dim GetSetting As String() = Split(Settings(0), ";") '0=1я строка, 1=2я строка, 2=3я строка, 3=4я строка
        MsgBox(GetSetting(2)) '0=A1, 1=B1, 2=C1, 3=D1, 4=E1 
    End Sub
насколько я понимаю он же просто номера ячеек выдает. мне от них смысла нету..

а ваш код
vb.net
1
Try : Process.GetProcessesByName("excel")(1).Kill() : Catch ex As Exception : Process.GetProcessesByName("excel")(0).Kill() : End Try
рубит эксель файлы открытые юзером параллельно с работой((

Добавлено через 29 секунд
в общем мужики
советуйте как считать с экселя данные и не сойти с ума?

Добавлено через 4 минуты
идея с считыванием числа процессов считаю самой оптимальной, но если юзер во время работы программы наоткрывает экселей?!
0
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 21:10 17
Цитата Сообщение от andryshka69 Посмотреть сообщение
но если юзер во время работы программы наоткрывает экселей?!
руками закроешь

Цитата Сообщение от andryshka69 Посмотреть сообщение
насколько я понимаю он же просто номера ячеек выдает
вы видимо код не изучили вовсе... то что он выдаёт, это данные из текстового файла, вместо номеров ячеек вы можете забить значения из реальных ячее вашего файла.... и забыть про этот ексель файл, и работать (читать\сохранять) именно в\из этого текстового файла.

Добавлено через 2 минуты
сохрани свой ексельфайл как *.csv, открой этот файл в блокноте, отредактируй его согласно тому формату, который я тебе писал, затем забудь про ексель и работай с текстом. тебе ведь не важно откуда грузить информацию? Важно чтобы эта информация появилась у тебя в программе. верно?
0
Памирыч
Почетный модератор
20893 / 8777 / 1080
Регистрация: 11.04.2010
Сообщений: 11,013
31.03.2015, 21:11 18
Цитата Сообщение от andryshka69 Посмотреть сообщение
идея с считыванием числа процессов считаю самой оптимальной, но если юзер во время работы программы наоткрывает экселей?!
У его процессов будут другие ID.

Пример, чтоб Вы поняли. Он не про Excel, но понятие даст.
На форме две кнопки
vb.net
1
2
3
4
5
6
7
8
9
10
11
    Dim Id As Integer
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim P() As Process = Process.GetProcessesByName("notepad")
        Id = P(0).Id
    End Sub
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
        For Each P As Process In Process.GetProcessesByName("notepad")
            If P.Id <> Id Then P.Kill()
        Next
    End Sub
Запустите блокнот, нажмите кнопку 1.
Программа запомнит идентификатор процесса.
Наоткрывайте еще блокнотов (файлов), и нажмите кнопку 2.
Будут убиты все процессы, кроме первого запомненного
1
andryshka69
3 / 3 / 0
Регистрация: 26.11.2013
Сообщений: 129
31.03.2015, 21:47  [ТС] 19
Yury Komar

сделал как вы написали, у меня он сохранил не имена ячеек, а содержание..

Памирыч
т.е. я все верно понял, надо так:

vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sub test
        appExcel = CreateObject("Excel.Application")
        appExcel.Workbooks.Open(Application.StartupPath & "\SFv3.xlsx")
        appExcel.Visible = False
        Dim P() As Process = Process.GetProcessesByName("notepad")
        Id = P(0).Id
 
 
        'куча работы по приравниванию ячеек экселя к полям другой формы
 
        appExcel.Workbooks(1).Close(True)
        For Each P As Process In Process.GetProcessesByName("notepad")
            If P.Id <> Id Then P.Kill()
        Next
        end sub
0
Yury Komar
Модератор
Эксперт .NET
2388 / 2194 / 349
Регистрация: 27.01.2014
Сообщений: 3,925
Завершенные тесты: 1
31.03.2015, 21:53 20
Цитата Сообщение от andryshka69 Посмотреть сообщение
не имена ячеек, а содержание
а вы какие данные собрались в совю программу грузить???? Имена ячеек или данные, взятые из ячеек?
0
31.03.2015, 21:53
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.03.2015, 21:53

Экспорт данных в Excel после фильтрации
Экспорт из бд, данных в Excel после фильтрации, после фильтрации необходимо...

Создание второго листа Excel после первого?
Прошу помощи как сделать правильно. Создаю документ Excel, соответствено сразу...

Как завершить процесс Excel после работы с ним?
Суть вот в чем: программа берет некоторые данные из файла Excel после чего...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru