Не удается убить приложения Excel в фоновом режиме - PullRequest
0 голосов
/ 23 апреля 2020

Я новичок в программировании. это первое системное приложение, которое я сделал. Я пытаюсь закрыть или убить приложение Excel после успешной загрузки системы в хранилище. это мой код Я надеюсь, что вы можете помочь мне исправить это. Заранее спасибо.

Приватный Sub bgw_DoWork (отправитель как объект, e как DoWorkEventArgs) Обрабатывает bgw.DoWork

    srcXlApp = New Excel.Application
    dstXlApp = New Excel.Application

    Dim numToDo As Integer = CInt(e.Argument)
    Dim ComputerName As String
    Dim strMissingValues As String


    Try

        System.Runtime.InteropServices.Marshal.ReleaseComObject(srcXlWb)
        System.Runtime.InteropServices.Marshal.ReleaseComObject(dstXlWb)

        isValidUploading = True
        strMissingValues = "Cannot upload there are missing fields: "

        bgwState = e

        strRemarks = txtRemarks.Text

        srcXlApp.DisplayAlerts = False
        srcXlWbs = srcXlApp.Workbooks
        srcXlWb = srcXlWbs.Open(srcFilePath)
        srcXlWrksht = srcXlWb.Worksheets(1)
        srcXlApp.Visible = False



        'Step 1 - open source
        bgw.ReportProgress(Convert.ToInt32((1 / numToDo) * 100))
        'System.Threading.Thread.Sleep(5000)
        ComputerName = System.Net.Dns.GetHostName
        'dstFilePath = "C:\Users\" & ComputerName & "\Desktop\Mazza\trunk\QA Task Monitoring_2020.xlsx"

        If ComputerName = "jonas" Then
            'MessageBox.Show(ComputerName)
            dstFilePath = "C:\Users\jonas.ONE-SOURCE\Desktop\Mazza\trunk\QA Task Monitoring_for_testing_only.xlsx"
        Else
            dstFilePath = "C:\Users\" & ComputerName & "\Desktop\Mazza\trunk\QA Task Monitoring_for_testing_only.xlsx"
        End If

        'dstFilePath = "C:\Users\jonas.ONE-SOURCE\Desktop\Mazza\trunk\QA Task Monitoring_2020.xlsx"
        'dstFilePath = "C:\Users\" & ComputerName & "\Desktop\Mazza\trunk\QA Task Monitoring_for_testing_only.xlsx"

        dstXlApp.DisplayAlerts = False
        dstXlWbs = dstXlApp.Workbooks
        dstXlWb = dstXlWbs.Open(dstFilePath)
        dstXlApp.Visible = False

        'Step 2 - open destination
        bgw.ReportProgress(Convert.ToInt32((2 / numToDo) * 100))
        'System.Threading.Thread.Sleep(5000)


        'Step 3 - Copy Range
        bgw.ReportProgress(Convert.ToInt32((3 / numToDo) * 100))
        'System.Threading.Thread.Sleep(3000)

        'Code for copying cells

        srcXlWrksht = srcXlWb.Worksheets(1)

        strTicketNumber = srcXlWrksht.Range("B3").Value
        strCID = srcXlWrksht.Range("B4").Value
        strIteration = srcXlWrksht.Range("B13").Value
        If Not IsNothing(strIteration) Then
            strIteration = strIteration.Substring(2)
        End If

        strSystem = srcXlWrksht.Range("B17").Value
        strAssignedBy = srcXlWrksht.Range("B10").Value
        strPMOBA = srcXlWrksht.Range("B9").Value
        strRequest = srcXlWrksht.Range("B5").Value
        strAssign = srcXlWrksht.Range("B6").Value
        strStart = srcXlWrksht.Range("B14").Value
        strEnd = srcXlWrksht.Range("B15").Value
        strStatus = srcXlWrksht.Range("C24").Value
        strTask = srcXlWrksht.Range("B16").Value


        If srcXlWb.Worksheets.Count >= 2 Then
            srcXlWrksht = srcXlWb.Worksheets(2)
            strDescription = srcXlWrksht.Range("D3").Value
        Else
            'strMissingValues = strMissingValues & vbCrLf & "Title/Description"
            isValidUploading = False
        End If


        'srcXlWrksht = srcXlWb.Worksheets(2)
        'strDescription = srcXlWrksht.Range("D3").Value


        If strTicketNumber = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Ticket ID"
            isValidUploading = False
        End If


        If strCID = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Change ID"
            isValidUploading = False
        End If


        If strIteration = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Iteration Number"
            isValidUploading = False
        End If


        If strSystem = "" Then
            strMissingValues = strMissingValues & vbCrLf & "System Name"
            isValidUploading = False
        End If


        If strAssignedBy = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Assigned By"
            isValidUploading = False
        End If


        If strPMOBA = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Assigned PMO/BA"
            isValidUploading = False
        End If


        If strRequest = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Requested Date"
            isValidUploading = False
        End If


        If strAssign = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Assigned Date"
            isValidUploading = False
        End If

        If strStart = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Start Date"
            isValidUploading = False
        End If

        If strEnd = "" Then
            strMissingValues = strMissingValues & vbCrLf & "End Date"
            isValidUploading = False
        End If


        If strStatus = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Status"
            isValidUploading = False
        End If


        If strTask = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Task type"
            isValidUploading = False
        End If


        If strDescription = "" Then
            strMissingValues = strMissingValues & vbCrLf & "Title/Description"
            isValidUploading = False
        End If

        'If CheckBox1.CheckState = CheckState.Checked And txtRemarks.Text = "" Then
        '    strMissingValues = strMissingValues & vbCrLf & "Empty Remarks"
        '    MessageBox.Show("Please input remarks", "Empty Remarks", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        '    isValidUploading = False
        'End If
        If Not isValidUploading Then
            MessageBox.Show(strMissingValues, "ERROR", MessageBoxButtons.OK, MessageBoxIcon.Error)

            srcXlWb.Close()
            dstXlWb.Close()
            srcXlApp.UserControl = True
            dstXlApp.UserControl = True
            srcXlApp.Quit()
            dstXlApp.Quit()


            Marshal.ReleaseComObject(dstXlWrksht)
            Marshal.ReleaseComObject(dstXlWb)
            Marshal.ReleaseComObject(dstXlWbs)
            Marshal.ReleaseComObject(dstXlApp)
            Marshal.ReleaseComObject(dstXlWrksht)
            Marshal.ReleaseComObject(srcXlWb)
            Marshal.ReleaseComObject(srcXlWbs)
            Marshal.ReleaseComObject(srcXlApp)

            GC.Collect()
            GC.WaitForPendingFinalizers()
            GC.Collect()
            GC.WaitForPendingFinalizers()
            GC.Collect()
            GC.WaitForPendingFinalizers()

            bgw.CancelAsync()
            e.Cancel = True
            Exit Sub
        End If

        'strTicketNumber = srcXlWrksht.Range("B4").Value.ToString


        'code for pastespecial
        dstXlWb.Worksheets("Tasks").Range("A3").Select()
        Last_Row = dstXlWb.Worksheets("Tasks").Range("A3").End(Excel.XlDirection.xlDown).Row + 1
        dstXlWb.Worksheets("Tasks").Range("A" & Last_Row).Select()

        'Step 4 - Pasting values
        bgw.ReportProgress(Convert.ToInt32((4 / numToDo) * 100))

        'System.Threading.Thread.Sleep(3000)

        dstXlWb.Worksheets("Tasks").Range("C" & Last_Row).Value = strTicketNumber
        dstXlWb.Worksheets("Tasks").Range("B" & Last_Row).Value = strQAT
        dstXlWb.Worksheets("Tasks").Range("D" & Last_Row).Value = strCID
        dstXlWb.Worksheets("Tasks").Range("E" & Last_Row).Value = strIteration
        dstXlWb.Worksheets("Tasks").Range("F" & Last_Row).Value = strDescription
        dstXlWb.Worksheets("Tasks").Range("G" & Last_Row).Value = strSystem
        dstXlWb.Worksheets("Tasks").Range("H" & Last_Row).Value = strAssignedBy
        dstXlWb.Worksheets("Tasks").Range("I" & Last_Row).Value = strPMOBA
        dstXlWb.Worksheets("Tasks").Range("J" & Last_Row).Value = strSBU
        dstXlWb.Worksheets("Tasks").Range("K" & Last_Row).Value = strTypes
        dstXlWb.Worksheets("Tasks").Range("L" & Last_Row).Value = strProcess
        dstXlWb.Worksheets("Tasks").Range("M" & Last_Row).Value = strRequest
        dstXlWb.Worksheets("Tasks").Range("N" & Last_Row).Value = strAssign
        dstXlWb.Worksheets("Tasks").Range("O" & Last_Row).Value = strStart
        dstXlWb.Worksheets("Tasks").Range("P" & Last_Row).Value = strEnd
        dstXlWb.Worksheets("Tasks").Range("Q" & Last_Row).Value = strStatus
        dstXlWb.Worksheets("Tasks").Range("S" & Last_Row).Value = strRemarks
        dstXlWb.Worksheets("Tasks").Range("Y" & Last_Row).Value = strTask
        dstXlWb.Worksheets("Tasks").Range("W" & Last_Row).Value = "=+TEXT(QATM[[#This Row],[End Date]]," & """MM""" & ")"
        dstXlWb.Worksheets("Tasks").Range("X" & Last_Row).Value = "=+TEXT(QATM[[#This Row],[End Date]]," & """YYYY""" & ")"


        If CheckBox1.CheckState = CheckState.Checked Then
            dstXlWb.Worksheets("Tasks").Range("R" & Last_Row).Value = "=""FOR QAT"" " & "& " & "TEXT(" & dstXlWb.Worksheets("Tasks").Range("E" & Last_Row).Value + 1 & ", ""00"")"
        Else
            dstXlWb.Worksheets("Tasks").Range("R" & Last_Row).Value = "YES"
        End If

        'Step 5 - Saving
        bgw.ReportProgress(Convert.ToInt32((5 / numToDo) * 100))
        'System.Threading.Thread.Sleep(3000)

        dstXlApp.ActiveWorkbook.Save()

    Catch ex As Exception

        'MsgBox(ex.Message)
        Me.Cursor = Cursors.Default
        MessageBox.Show("Please check excel file.")
        'MsgBox("Error has occured. " & ex.Message, MsgBoxStyle.OkOnly + MsgBoxStyle.Critical, "Error")

        bgw.CancelAsync()
        Exit Sub

        srcXlWb.Close()
        dstXlWb.Close()
        srcXlApp.UserControl = True
        dstXlApp.UserControl = True
        srcXlApp.Quit()
        dstXlApp.Quit()

        Marshal.ReleaseComObject(dstXlWb)
        Marshal.ReleaseComObject(dstXlWbs)
        Marshal.ReleaseComObject(dstXlApp)
        Marshal.ReleaseComObject(srcXlWb)
        Marshal.ReleaseComObject(srcXlWbs)
        Marshal.ReleaseComObject(srcXlApp)

        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
        GC.WaitForPendingFinalizers()

    Finally

        'srcXlWb.Close()
        'dstXlWb.Close()
        'srcXlApp.UserControl = True
        'dstXlApp.UserControl = True
        'srcXlApp.Quit()
        'dstXlApp.Quit()

        Marshal.ReleaseComObject(dstXlWb)
        Marshal.ReleaseComObject(dstXlWbs)
        Marshal.ReleaseComObject(dstXlApp)
        Marshal.ReleaseComObject(srcXlWb)
        Marshal.ReleaseComObject(srcXlWbs)
        Marshal.ReleaseComObject(srcXlApp)

        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
        GC.WaitForPendingFinalizers()
        GC.Collect()
        GC.WaitForPendingFinalizers()

    End Try




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