2016-07-01 5 views
0

Так что я использую EPPlus для заполнения электронной таблицы данными. При определенных условиях лист будет намеренно удален, оставив только один лист с данными. Код работает без ошибок и запускается, когда все листы остаются, но когда после удаления листов сохраняю и открываю книгу, я получаю серию предупреждений и ошибок. Рабочая книга будет нормально открыта после этого, и мой процесс, похоже, работает нормально. Есть предположения? Удаляет ли листы, вызывающие ошибку OOXML, и мне не хватает шага? Благодарю.EPPlus и удаление листов

enter image description here enter image description here enter image description here

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 
+0

Имея адское время, форматируя это сообщение, поэтому Стек его примет. – Steve

ответ

0

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

Обратите внимание, что даже если я не показывал графический интерфейс Excel конечному пользователю, мне нужно было установить 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 
Смежные вопросы