2012年02月29日
【VB.NET】Excelファイルの操作(行の削除)
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
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
【VB.NET】csvをDataTableに取り込む
【VB.NET】Excel操作(DataTableに取込む)
VS2005 インストールが固まる
リリースモードで実行してデバッグする
【VS2008】パッケージの読み込みエラー
ドツボにハマって
【VB.NET】Excel操作(DataTableに取込む)
VS2005 インストールが固まる
リリースモードで実行してデバッグする
【VS2008】パッケージの読み込みエラー
ドツボにハマって
Posted by ようすけ at 12:42│Comments(0)
│.Net全般