2016-07-01 67 views
0

EPPlusを使用してスプレッドシートにデータを設定しています。特定の条件の下では、シートは意図的に削除され、1枚のシートにはデータのみが残されます。コードはエラーなく実行され、すべてのシートが残っているときに実行されますが、シートを削除して保存して開くと、一連の警告とエラーが表示されます。ブックが正常に開いていて、他のプロセスは正常に動作しているようです。何かご意見は? 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

私が振り向くと、私は削除するために必要なシートを削除、保存されたブックを開くために相互運用機能を使用して終了。

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 
関連する問題