- - PR -
【vb.net】エクセルの行挿入について
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2008-09-03 17:40
はじめて、投稿させていただきます。
VB2005にてエクセルファイルの操作を開発しております。 仕様 vb.netから、原紙となるエクセルシートをコピーし、 新規ブックに貼り付け、 対象データを貼り付ける ということを行っています。 下記のような関数を作成しました。少々長いですが。。。 ''' <param name="strPath">サンプルファイルのパス</param> ''' <param name="intSttNo">データ貼り付け行番号</param> ''' <param name="WkList">貼り付けデータ</param> Private Sub EditExcel(ByVal strPath As String, _ ByVal intSttNo As Integer, _ ByVal WkList As ArrayList) Dim xlApp As New Excel.Application Dim xlBooks As Excel.Workbooks = xlApp.Workbooks Dim xlCells As Excel.Range Dim xlRange1 As Excel.Range Dim xlRows As Excel.Range '-------------------------------------------------- '新規のファイルを開く '-------------------------------------------------- Dim xlBook As Excel.Workbook = xlBooks.Add Dim xlSheets As Excel.Sheets = xlBook.Worksheets '-------------------------------------------------- 'サンプルのファイルを開く '-------------------------------------------------- Dim xlFilePath As String = strPath Dim xlBookOp As Excel.Workbook = xlBooks.Open(xlFilePath) Dim xlSheetsOp As Excel.Sheets = xlBookOp.Worksheets Dim xlSheetOp As Excel.Worksheet = xlSheetsOp.Item(1) '-------------------------------------------------- 'Excelを表示 '-------------------------------------------------- xlApp.Visible = True '-------------------------------------------------- 'サンプルファイルのシートコピー '-------------------------------------------------- xlSheetOp.Copy(Before:=xlSheets(1)) xlCells = xlSheets(1).Cells '▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼▼ '行挿入 xlRows = xlSheets(1).Rows xlRange1 = xlRows(intSttNo & ":" & WkList.Count) '▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲▲ '-------------------------------------------------- ' 対象データの貼り付け '-------------------------------------------------- For i As Integer = 0 To WkList.Count - 1 xlRange1 = DirectCast(xlCells(intSttNo + i, 1), Excel.Range) xlRange1.Value = WkList.Item(i) FinalReleaseComObject(xlRange1) 'xlRange1 の解放 Next '-------------------------------------------------- ' 終了処理 '-------------------------------------------------- FinalReleaseComObject(xlCells) 'xlCells の解放 FinalReleaseComObject(xlSheetOp) 'xlSheet の解放 FinalReleaseComObject(xlSheetsOp) 'xlSheets の解放 xlBookOp.Close(False) 'xlBook を閉じる FinalReleaseComObject(xlBookOp) 'xlBook の解放 FinalReleaseComObject(xlBooks) 'xlBooks の解放 End Sub 引数のintSttNoより、intCount分行挿入をおこないたいです。 なにせ、この質問内容でわかりますでしょうか? なにか、いい方法もしくはサンプルがあればご教授ねがいます。 | ||||
|
投稿日時: 2008-09-03 17:49
Excelの操作を調べたいなら、Excelでマクロ記録して、生成されたVBAを見るのが良いと思います。
| ||||
|
投稿日時: 2008-09-03 17:50
コピーではなく挿入ですか? 挿入したい Range をとって Insert ですね。 行挿入の Range は 'Range1' ではなく別の変数を用意してバグの温床にならないようにしてあげてください。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-09-03 18:11
mio様、じゃんぬねっと様 返信をありがとうございます。
mio様 ご指摘ありがとうございます。 Excelでマクロ記録して、生成されたVBAを参考にして 別のエクセルのファイル操作処理も出来そうです。 じゃんぬねっと様 行挿入の Range は 'Range1'ではだめだったんですね。 'Range1'を使用してた為にバグとなってしまってました。 別の変数を用意するとうまくいきました。 皆様のおかげで、なんとか開発が前に進みそうです。 本当にありがとうございました。 | ||||
|
投稿日時: 2008-09-03 18:30
うーん... 挿入の動作自体には支障はないと思います。 ただ現状のコードですと、その後に同じ変数 'Range1' を参照カウントをデクリメントする前に参照を上書きすることになるので、それを防ぐために別の変数を用意した方が良いと書いただけなのですけどね。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2008-09-04 09:51
返信遅くなってすいません。。。
そうなんですね。 ということは、 xlRange1.Insert()の後に FinalReleaseComObject(xlRange1)処理をしてあげれば 問題ないということですよね? ご指摘ありがとうございました。 |
1