【问题标题】:EPPlus and Deleting sheetsEPPlus 和删除工作表
【发布时间】:2016-07-01 19:32:47
【问题描述】:

所以我使用 EPPlus 来填充电子表格的数据。在某些情况下,会故意删除一张工作表,只留下一张有数据的工作表。代码在没有错误的情况下运行,并且在所有工作表都留在其中时运行,但是当我删除工作表后,保存并打开工作簿时,我会收到一系列警告和错误。之后工作簿正常打开,而我的其他进程似乎工作正常。有什么想法吗?是否删除导致 OOXML 无效的工作表,而我错过了一个步骤?谢谢。

    Using template As New MemoryStream(My.Resources.POWER_DOCKET_V2_Template)
    Using excel As New ExcelPackage(template)

        For worksheet = excel.Workbook.Worksheets.Count To 1 Step -1
        Dim grid = CType(radPageViewList.Find(Function(page) page.Name = pageGridSheetMap.Find(Function(sheet) sheet.WorksheetName = excel.Workbook.Worksheets(worksheet).Name).PageViewPageName).Controls(0), RadGridView)
        Dim workSheetForSelectedGrid As ExcelWorksheet = excel.Workbook.Worksheets(pageGridSheetMap.Find(Function(g) g.RadGridViewName = selectedGid.Name).WorksheetName)
        Dim rowRange As String = pageGridSheetMap.Find(Function(r) r.RadGridViewName = grid.Name).RowRange
        Dim sheetRange As String = pageGridSheetMap.Find(Function(r) r.RadGridViewName = grid.Name).SheetRange
        Dim rightMostColumn As Integer = pageGridSheetMap.Find(Function(r) r.RadGridViewName = grid.Name).RightMostColumn

        If exportSelectedGridOnly = True And excel.Workbook.Worksheets(worksheet).Name <> workSheetForSelectedGrid.Name Then
            excel.Workbook.Worksheets.Delete(worksheet)
        Else
            WriteRows(excel.Workbook.Worksheets(worksheet), grid, rowRange, sheetRange, rightMostColumn)        
        End If
        Next worksheet

        If Not Directory.Exists(ConfigurationManager.AppSettings("OutlawTempFolder")) Then Directory.CreateDirectory(ConfigurationManager.AppSettings("OutlawTempFolder"))
        excel.SaveAs(New FileInfo(filename))
        Process.Start(filename)

    End Using
    End Using

【问题讨论】:

  • 花时间格式化这篇文章以便 Stack 接受它。

标签: vb.net excel openxml epplus


【解决方案1】:

我最终使用 Interop 转身打开保存的工作簿,删除了我需要删除的工作表。

请注意,即使我没有向最终用户显示 Excel GUI,我也需要设置 DisplayAlerts = False 否则工作表实际上不会被删除。

Public Sub DeleteSheets(filename As String, sheetName As String)

        Dim excelApp As New Excel.Application
        Dim excelWorkBook As Excel.Workbook

        excelApp.DisplayAlerts = False 'Must be set to false or sheets won't actually delete
        excelWorkbook = excelApp.Workbooks.Open(filename)

        For worksheet = excelWorkBook.Worksheets.Count to 1 Step -1 
            If excelWorkBook.Worksheets(worksheet).Name <> sheetName Then
                excelWorkBook.Worksheets(worksheet).Delete
            End If
        Next worksheet

        excelWorkBook.Save()
        excelWorkBook.Close()

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多