Невозможно удалить лист из Excel, и он даже не дает ошибок при использовании VB.NET? - PullRequest
0 голосов
/ 27 июля 2011

У меня есть:

Public Class ExcelProcess
    Private App As New Excel.Application
    Private Books As Excel.Workbooks = App.Workbooks
    Private WB As Excel.Workbook

Public Sub deleteSheets()
    Dim sheet As Excel.Worksheet = getSheetToDelete()
    sheet.Activate()
    sheet.Delete()
    WB.Save()
    WB.Close()
End Sub

Private Function getSheetToDelete() As Excel.Worksheet
     Try
        WB = Books.Open("file.xlsx")
    Catch ex As Exception
        InputOutput.print(ex.Message)
        End
    End Try
    Return WB.Sheets(1)
End Function

End Class

Я запустил вышеуказанный код, и он запустился успешно, без каких-либо ошибок или исключений!

Но листне был удален!

<ОБНОВЛЕНИЕ>

Я также пытался:

sheet.Select()
sheet.Delete()

' Now, this gave me an exception:
Unhandled Exception: System.Runtime.InteropServices.COMException: Exception from HRESULT: 0x800A03EC
at Microsoft.Office.Interop.Excel._Worksheet.Select(Object Replace)
at DealerCapReport.ExcelProcess.deleteSheets()
at DealerCapReport.MainModule.Main()

<Другое ОБНОВЛЕНИЕ>

Я пытался проверить sheet.Delete () для успешного завершения ошибки:

If sheet.Delete() Then        ' Error: Expression does not produce a value.
    Console.WriteLine("Can-not Delete")
End If

Он говорит Ошибка: выражение не выдает значение. в sheet.Delete ().

Странно то, что ссылка Microsoft API говорит о том, что она выдаст логическое значение, ноэто не так, как Sub, а не функция.

Как и что происходит?

Я что-то не так делаю?

Пожалуйста, помогите мнеисправить это!

Ответы [ 2 ]

2 голосов
/ 27 июля 2011

Следующий код работает для меня ( ИЗМЕНЕНО, чтобы включить некоторую проверку ошибок ):

Public Class ExcelProcess
    Private xlApp As Excel.Application
    Private xlBook As Excel.Workbook
    Private xlSheet As Excel.Worksheet

    Public Sub New(ByVal file As String)
        xlApp = New Excel.Application
        'xlApp.Visible = True 'for debugging
        xlApp.DisplayAlerts = False 'prevent user dialogs
        xlBook = xlApp.Workbooks.Open(file)
    End Sub

    Public Sub Quit()
        If Not IsNothing(xlBook) Then
            xlBook.Save()
            xlBook.Close()
        End If
        If Not IsNothing(xlApp) Then xlApp.Quit()
    End Sub

    Public Sub deleteSheet(ByVal Index As Integer)
        If Index > xlBook.Worksheets.Count Then
            Throw New Exception("You cannot delete a worksheet that does not exist")
            Exit Sub
        End If
        If xlBook.Worksheets.Count = 1 Then
            Throw New Exception("You cannnot delete the only worksheet in a workbook")
            Exit Sub
        End If
        xlSheet = CType(xlBook.Worksheets(Index), Excel.Worksheet)
        xlSheet.Activate()
        xlSheet.Delete()
    End Sub

End Class
0 голосов
/ 27 июля 2011

Я бы посоветовал вам сохранить свою книгу после удаления (используя SaveAs). В противном случае он просто удалит рабочий лист в памяти, а когда ваш объект Excel выйдет за рамки, он просто закроет рабочую книгу без сохранения изменений.

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