【VB.NET】Excelファイルの操作(行の削除)

ようすけ

2012年02月29日 12:42

PCにインストールされているExcelバージョン:Excel2003
Visual Studio 2010


1.参照の追加でCOMタブの、Microsoft Excel 11.0 Object Library を指定

2.ファイルにImport
  Imports Microsoft.Office.Interop
  Imports System.Runtime.InteropServices

3.
Dim _xslFile As String = "ファイルのフルパス"
Dim objExcel As Excel.Application = Nothing 'ExcelApplication
Dim objWorkBooks As Excel.Workbooks = Nothing 'ExcelWorkBooks
Dim objWorkBook As Excel.Workbook = Nothing 'ExcelWorkbook
Dim excelSheet As Excel.Worksheet = Nothing 'ExcelWorkSheet

Try
objExcel = New Excel.Application

'エクセルのウィンドウ最小化(最大化ならxlMaximized)
objExcel.WindowState = Excel.XlWindowState.xlMinimized

'エクセル非表示
objExcel.Visible = False

'確認メッセージを表示にする
objExcel.DisplayAlerts = False

objWorkBook = DirectCast((objExcel.Workbooks.Open( _
_xslFile, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing, _
Type.Missing)), _
Excel.Workbook)

'シートの選択(1枚目のシートを指定)
excelSheet = DirectCast(objWorkBook.Sheets(1), Excel.Worksheet)
excelSheet.Select()

'シートの1,2行目を削除する(Shift:=Excel.XlDirection.xlUpは、削除時に上方向にシフトする)
excelSheet.Range("A1:A2").EntireRow.Delete(Shift:=Excel.XlDirection.xlUp)


'2シート目
excelSheet = DirectCast(objWorkBook.Sheets(2), Excel.Worksheet)
excelSheet.Select()
excelSheet.Range("A1:A2").EntireRow.Delete(Shift:=Excel.XlDirection.xlUp)

'3シート目
excelSheet = DirectCast(objWorkBook.Sheets(3), Excel.Worksheet)
excelSheet.Select()
excelSheet.Range("A1:A2").EntireRow.Delete(Shift:=Excel.XlDirection.xlUp)

'★↑1~3シート目の1・2行目を削除しようとしています。
'★本当はもっとよいやり方があると思うのですが・・・ご存知の方ご教授ください。

'保存
excelSheet.SaveAs(_xslFile)

Catch ex As Exception
Throw ex
Finally
' EXCELの終了処理

If Not IsNothing(excelSheet) Then
Marshal.ReleaseComObject(excelSheet) 'オブジェクト参照を解放
excelSheet = Nothing 'オブジェクト解放
End If

If Not IsNothing(objWorkBook) Then
objWorkBook.Close(Type.Missing, Type.Missing, Type.Missing) 'ファイルを閉じる
Marshal.ReleaseComObject(objWorkBook) 'オブジェクト参照を解放
objWorkBook = Nothing 'オブジェクト解放
End If

If Not IsNothing(objWorkBooks) Then
Marshal.ReleaseComObject(objWorkBooks) 'オブジェクト参照を解放
objWorkBooks = Nothing 'オブジェクト解放
End If

If Not IsNothing(objExcel) Then
objExcel.Quit() 'EXCELを閉じる
Marshal.ReleaseComObject(objExcel) 'オブジェクト参照を解放
objExcel = Nothing 'オブジェクト解放
End If

'.net では、Nothingしてもメモリが開放されない
'強制的にガベージコレクタを起動することにより、objExcelを開放
System.GC.Collect()

End Try

関連記事