2016-07-01 2 views
0

그래서 EPPlus를 사용하여 스프레드 시트에 데이터를 채 웁니다. 특정 조건 하에서 시트는 의도적으로 삭제되어 하나의 시트 만 데이터로 남게됩니다. 코드는 오류없이 실행되고 모든 시트가 남아있을 때 실행되지만 시트를 삭제 한 후 통합 문서를 저장하고 열면 일련의 경고 및 오류가 발생합니다. 통합 문서 은 보통 이후에 열리 며 다른 프로세스는 정상적으로 작동합니다. 이견있는 사람? OOXML이 무효화되는 원인이되는 시트를 삭제하고 있으며 단계가 빠졌습니까? 감사.EPPlus 및 시트 삭제

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

시간이 지체되어이 게시물을 포맷하면 Stack에서이를 수락합니다. – Steve

답변

0

enter image description here enter image description here

enter image description here

은 내가 삭제하는 데 필요한 시트를 삭제 돌아서 저장된 통합 문서를 열 수 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