Прежде чем этот вопрос будет закрыт из-за его дубликата, я попробовал эти ответы.
Процесс Excel не закрывается в VB.net
Приложение не завершает работу после вызова quit
Программа VB.NET Excel оставляет EXCEL.EXE плавающим после завершения
Процесс Excel по-прежнему выполняется после закрытия в VB.net
Но ни один из них не работал у меня, я также пытался искать в Интернете.
Открытие файла Excel оставляет открытым процесс "EXCEL.EXE" (и множество других), но процесс остается.
Это программное обеспечение будет автоматическим загрузчиком, который будет запускаться при загрузке компьютера. затем он проверит раздел диска D компьютера и загрузит в него все файлы excel. Я уже использовал это для загрузки файлов CSV и никогда не имел таких проблем, однако теперь я пытаюсь загрузить файлы Excel.
Я хочу знать, как правильно убить процесс без использования команды «KILL». Я также пытался использовать process.kill
, но когда я открываю другую книгу Excel с компьютера, этот Excel уничтожается, а не загружается Excel.
Обратите внимание, что этот код каким-то образом изменен, чтобы просто выводить содержимое Excel, он уже работает, я просто хочу знать, как закрыть ПРОЦЕСС EXCEL, поскольку может быть время, когда эта система будет загружать сотни рабочих листов Excel.
Я использовал этот код ниже:
Sub uploadExcelFiles(ByVal locs As String)
Dim xlApp As Excel.Application
Dim xlWorkBook As Excel.Workbook
Dim xlWorkSheet As Excel.Worksheet
Dim location As String
Dim isData As Boolean = False
Dim m_CountTo As Integer = 0
filename = ""
globalloc = ""
'Gets Files from Folders
Dim counting As Integer = 0
Dim csvcount As String() = Directory.GetFiles(locs, "*.xls")
Dim ToUploadCSV As String
ExcelProcessInit()
For counting = 0 To csvcount.Count - 1
CheckListofCSV.Clear()
filename = ""
location = csvcount(counting).ToString
globalloc = location
ToUploadCSV = Path.GetFileName(location).ToString
Dim ListLines As New List(Of String)
Dim ListLinesNEW As New List(Of String)
xlApp = New Excel.Application
xlWorkBook = xlApp.Workbooks.Open(location)
xlWorkSheet = xlWorkBook.Worksheets("Sheet1")
'Use this code to read the data from EXCEL
'**DATA HEADER**
MsgBox(xlWorkSheet.Cells(2, 6).value)
MsgBox(xlWorkSheet.Cells(2, 7).value)
MsgBox(xlWorkSheet.Cells(2, 8).value)
MsgBox(xlWorkSheet.Cells(3, 2).value)
MsgBox(xlWorkSheet.Cells(3, 5).value)
MsgBox(xlWorkSheet.Cells(3, 8).value)
MsgBox(xlWorkSheet.Cells(4, 2).value)
MsgBox(xlWorkSheet.Cells(4, 5).value)
MsgBox(xlWorkSheet.Cells(4, 7).value)
MsgBox(xlWorkSheet.Cells(4, 8).value)
MsgBox(xlWorkSheet.Cells(62, 2).value)
'**DATA HEADER**
'**DATA DETAILS**
'ROWS
Dim i As Integer = 5
'COLUMNS
Dim col As Integer = 2
'SAMPLING COUNT FROM EXCEL
Dim SampQTYXcel As Integer = 0
Do While Len(xlWorkSheet.Cells(i, col).value) > 0
For i = 5 To 10
MsgBox(xlWorkSheet.Cells(i, col).value)
Next
'This is sampling QTY
getSamplingQty(xlWorkSheet.Cells(3, 2).value, xlWorkSheet.Cells(5, col).value, xlWorkSheet.Cells(3, 8).value)
'Sample Data 10 onwards
Do While Len(xlWorkSheet.Cells(i, col).value) > 0
MsgBox(xlWorkSheet.Cells(i, col).value)
i = i + 1
SampQTYXcel = SampQTYXcel + 1
Loop
'Excel data has more data than Database QTY then REPORT
If SampQTYXcel > SamplQTY Then
'SEND ERROR
MsgBox("ERROR")
End If
'Add 1 to move to next column
col = col + 1
i = 5
SampQTYXcel = 0
Loop
xlWorkBook.Save()
'**DATA DETAILS**
xlApp.DisplayAlerts = False
xlWorkBook.Close()
xlApp.Quit()
xlApp = Nothing
xlWorkBook = Nothing
releaseObject(xlWorkBook)
releaseObject(xlWorkSheet)
releaseObject(xlApp)
GC.Collect()
GC.WaitForPendingFinalizers()
ExcelProcessKill()
Next
End Sub
РЕДАКТИРОВАТЬ:
Я забыл добавить коды ExcelProcessInit()
и ExcelProcessKill()
Вот их коды:
Private Sub ExcelProcessInit()
Try
'Get all currently running process Ids for Excel applications
mExcelProcesses = Process.GetProcessesByName("EXCEL")
Catch ex As Exception
End Try
End Sub
Private Sub ExcelProcessKill()
Dim oProcesses() As Process
Dim bFound As Boolean
Try
'Get all currently running process Ids for Excel applications
oProcesses = Process.GetProcessesByName("EXCEL")
If oProcesses.Length > 0 Then
For i As Integer = 0 To oProcesses.Length - 1
bFound = False
For j As Integer = 0 To mExcelProcesses.Length - 1
If oProcesses(i).Id = mExcelProcesses(j).Id Then
bFound = True
Exit For
End If
Next
If Not bFound Then
oProcesses(i).Kill()
End If
Next
End If
Catch ex As Exception
End Try
End Sub
EXCEL
, но это не так. Затем, используяPROCESS.KILL
, он удалил процессEXCEL
, но пользователю не нужен инструмент, который внезапно закрывает его работу. Спасибо за уделенное время. - person Mr.J   schedule 05.07.2018