QA@IT
«質問へ戻る

質問を投稿

【vb.net】エクセルの行挿入について

はじめて、投稿させていただきます。
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分行挿入をおこないたいです。
なにせ、この質問内容でわかりますでしょうか?

なにか、いい方法もしくはサンプルがあればご教授ねがいます。

質問者:アンクリ

はじめて、投稿させていただきます。
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分行挿入をおこないたいです。
なにせ、この質問内容でわかりますでしょうか?

なにか、いい方法もしくはサンプルがあればご教授ねがいます。


質問者:アンクリ