VB.NET覚書

VB.NETの覚書
[個人メモ] [仕事メモ] [アイデア] [Ruby]
[TIPS] [対応表] [コメント書き方] [.NET Tips] [VB中学校] [VB.NET の入門サイト] [VB.NET コーディング標準 ] [VBレスキュー] [NonSoft]

2017-05-31

ExcelグラフVB.netで表示

http://www.officepro.jp/excelvba/chart/index4.html

'[参照設定の追加]-[COM]タブから

'Microsoft Excel xx.0 Object Libraryを選択する必要あり。

Imports Microsoft.Office.Core
Imports Microsoft.Office.Interop
Imports Microsoft.Office.Interop.Excel

Public Class ClsExcel

    Dim CurrentSheet As Integer

    Public Property ExcelObj As Excel.Application

    ''' <summary>
    ''' 現在のワークブック
    ''' </summary>
    ''' <remarks></remarks>
    Public Property Book As Excel.Workbook
    Private Property fileName As String
    ''' <summary>
    ''' 現在のワークシート
    ''' </summary>
    ''' <remarks></remarks>
    Public Property Sheet As Excel.Worksheet

    Public Sub New()
        ExcelObj = New Excel.Application()
        ExcelObj.Visible = True  ' Excel を表示する場合のみ
        ExcelObj.DisplayAlerts = False  ' 保存時の確認メッセージボックスを表示しない場合のみ
    End Sub



    ''' <summary>
    ''' ブックを開く
    ''' </summary>
    ''' <param name="fileName">Excelファイル</param>
    Public Sub Open(ByVal fileName As String)
        Book = ExcelObj.Workbooks.Open(fileName)
        CurrentSheet = 1
        Me.fileName = fileName
    End Sub
    ''' <summary>
    ''' 新しいブックを作成する
    ''' </summary>
    Public Sub CreateBook()
        Book = ExcelObj.Workbooks.Add()
        Sheet = Book.Worksheets(1)
    End Sub
    ''' <summary>
    ''' 新しいワークシートを追加する。
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub AddSheet()
        Sheet = Book.Worksheets.Add()
    End Sub
    ''' <summary>
    ''' ブックを選択する
    ''' </summary>
    Public Sub setBook(bookname As String)
        Sheet = Book.Worksheets(bookname)
    End Sub
    ''' <summary>
    ''' ブックを選択する
    ''' </summary>
    Public Sub setBookByNo(bookno As Integer)
        Sheet = Book.Worksheets(bookno)
    End Sub
    ''' <summary>
    ''' セルの値を得る
    ''' </summary>
    ''' <param name="row">行番号(1から始まる)</param>
    ''' <param name="col">列番号(1から始まる)</param>
    ''' <returns>セルの値</returns>
    Public Function GetCellValue(ByVal row As Integer, ByVal col As Integer) As Object
        Return Sheet.Cells(row, col).Value
    End Function

    ''' <summary>
    ''' セルに値を書く
    ''' </summary>
    ''' <param name="row">行番号(1から始まる)</param>
    ''' <param name="col">列番号(1から始まる)</param>
    ''' <param name="val">セルの値</param>
    Public Sub SetCellValue(ByVal row As Integer, ByVal col As Integer, ByVal val As Object)
        Sheet.Cells(row, col).Value = val
    End Sub

    ''' <summary>
    ''' レンジを読む
    ''' </summary>
    ''' <param name="rng">レンジ</param>
    ''' <returns>データテーブル</returns>
    Public Function GetRange(ByVal rng As String) As System.Data.DataTable
        Dim dr As DataRow
        Dim cells As String() = rng.Split(CChar(":"))
        ' Range オブジェクトを作成する。
        Dim r As Excel.Range
        If cells.Length = 1 Then
            r = Sheet.Range(cells(0))
        Else
            r = Sheet.Range(cells(0), cells(1))
        End If
        Dim dt As New System.Data.DataTable
        Dim cols As Integer = 1
        Dim rows As Integer = 1
        ' レンジのサイズを得る。
        If cells.Length > 1 Then
            cols = Asc(cells(1).Substring(0, 1)) - Asc(cells(0).Substring(0, 1)) + 1
            rows = Asc(cells(1).Substring(1, 1)) - Asc(cells(0).Substring(1, 1)) + 1
        End If
        ' カラムを追加する。
        For i = 1 To cols
            dt.Columns.Add()
        Next
        ' DataTable を作成する。
        For j = 1 To rows
            dr = dt.NewRow()
            For i = 1 To cols
                dr(i - 1) = r.Cells(j, i).Value
            Next
            dt.Rows.Add(dr)
        Next
        Return dt
    End Function
    ''' <summary>
    ''' ブックを閉じる
    ''' </summary>
    Public Sub Close()
        If Book IsNot Nothing Then
            Book.Close()
        End If
    End Sub

    ''' <summary>
    ''' Excel を閉じる
    ''' </summary>
    Public Sub Quit()
        ExcelObj.Quit()
    End Sub

    ''' <summary>
    ''' ブックをファイル保存する
    ''' </summary>
    ''' <param name="fileName">Excelワークブックのファイル名</param>
    Public Sub SaveAs(ByVal fileName As String)
        Book.SaveAs(fileName)
    End Sub

    ''' <summary>
    ''' ブックを上書き保存する
    ''' </summary>
    Public Sub Save()
        Book.Save()
    End Sub

    Public Sub test(f As Form1)
        Dim chartObj As ChartObject
        Dim chart1 As Chart

        chartObj = Sheet.ChartObjects(1)
        chart1 = chartObj.Chart
        chart1.SetSourceData(Book.Worksheets("Sheet1").Range("B2:E6"))

        chart1.Export(Filename:=My.Application.Info.DirectoryPath & "\test001.GIF", FilterName:="GIF")

        Using fs As System.IO.FileStream = New System.IO.FileStream(My.Application.Info.DirectoryPath & _
       "\test001.GIF", System.IO.FileMode.Open, System.IO.FileAccess.Read)
            f.PictureBox1.Image = System.Drawing.Image.FromStream(fs)
        End Using
    End Sub

End Class

Excel操作クラス

'[参照設定の追加]-[COM]タブから

'Microsoft Excel xx.0 Object Libraryを選択する必要あり。

Imports Microsoft.Office.Core
Imports Microsoft.Office.Interop

Public Class ClsExcel

    Dim CurrentSheet As Integer

    Public Property ExcelObj As Excel.Application

    ''' <summary>
    ''' 現在のワークブック
    ''' </summary>
    ''' <remarks></remarks>
    Public Property Book As Excel.Workbook
    Private Property fileName As String
    ''' <summary>
    ''' 現在のワークシート
    ''' </summary>
    ''' <remarks></remarks>
    Public Property Sheet As Excel.Worksheet

    Public Sub New()
        ExcelObj = New Excel.Application()
        ExcelObj.Visible = True  ' Excel を表示する場合のみ
        ExcelObj.DisplayAlerts = False  ' 保存時の確認メッセージボックスを表示しない場合のみ
    End Sub



    ''' <summary>
    ''' ブックを開く
    ''' </summary>
    ''' <param name="fileName">Excelファイル</param>
    Public Sub Open(ByVal fileName As String)
        Book = ExcelObj.Workbooks.Open(fileName)
        CurrentSheet = 1
        Me.fileName = fileName
    End Sub
    ''' <summary>
    ''' 新しいブックを作成する
    ''' </summary>
    Public Sub CreateBook()
        Book = ExcelObj.Workbooks.Add()
        Sheet = Book.Worksheets(1)
    End Sub
    ''' <summary>
    ''' 新しいワークシートを追加する。
    ''' </summary>
    ''' <remarks></remarks>
    Public Sub AddSheet()
        Sheet = Book.Worksheets.Add()
    End Sub
    ''' <summary>
    ''' ブックを選択する
    ''' </summary>
    Public Sub setBook(bookname As String)
        Sheet = Book.Worksheets(bookname)
    End Sub
    ''' <summary>
    ''' ブックを選択する
    ''' </summary>
    Public Sub setBookByNo(bookno As Integer)
        Sheet = Book.Worksheets(bookno)
    End Sub
    ''' <summary>
    ''' セルの値を得る
    ''' </summary>
    ''' <param name="row">行番号(1から始まる)</param>
    ''' <param name="col">列番号(1から始まる)</param>
    ''' <returns>セルの値</returns>
    Public Function GetCellValue(ByVal row As Integer, ByVal col As Integer) As Object
        Return Sheet.Cells(row, col).Value
    End Function

    ''' <summary>
    ''' セルに値を書く
    ''' </summary>
    ''' <param name="row">行番号(1から始まる)</param>
    ''' <param name="col">列番号(1から始まる)</param>
    ''' <param name="val">セルの値</param>
    Public Sub SetCellValue(ByVal row As Integer, ByVal col As Integer, ByVal val As Object)
        Sheet.Cells(row, col).Value = val
    End Sub

    ''' <summary>
    ''' レンジを読む
    ''' </summary>
    ''' <param name="rng">レンジ</param>
    ''' <returns>データテーブル</returns>
    Public Function GetRange(ByVal rng As String) As DataTable
        Dim dr As DataRow
        Dim cells As String() = rng.Split(CChar(":"))
        ' Range オブジェクトを作成する。
        Dim r As Excel.Range
        If cells.Length = 1 Then
            r = Sheet.Range(cells(0))
        Else
            r = Sheet.Range(cells(0), cells(1))
        End If
        Dim dt As New DataTable
        Dim cols As Integer = 1
        Dim rows As Integer = 1
        ' レンジのサイズを得る。
        If cells.Length > 1 Then
            cols = Asc(cells(1).Substring(0, 1)) - Asc(cells(0).Substring(0, 1)) + 1
            rows = Asc(cells(1).Substring(1, 1)) - Asc(cells(0).Substring(1, 1)) + 1
        End If
        ' カラムを追加する。
        For i = 1 To cols
            dt.Columns.Add()
        Next
        ' DataTable を作成する。
        For j = 1 To rows
            dr = dt.NewRow()
            For i = 1 To cols
                dr(i - 1) = r.Cells(j, i).Value
            Next
            dt.Rows.Add(dr)
        Next
        Return dt
    End Function
    ''' <summary>
    ''' ブックを閉じる
    ''' </summary>
    Public Sub Close()
        If Book IsNot Nothing Then
            Book.Close()
        End If
    End Sub

    ''' <summary>
    ''' Excel を閉じる
    ''' </summary>
    Public Sub Quit()
        ExcelObj.Quit()
    End Sub

    ''' <summary>
    ''' ブックをファイル保存する
    ''' </summary>
    ''' <param name="fileName">Excelワークブックのファイル名</param>
    Public Sub SaveAs(ByVal fileName As String)
        Book.SaveAs(fileName)
    End Sub

    ''' <summary>
    ''' ブックを上書き保存する
    ''' </summary>
    Public Sub Save()
        Book.Save()
    End Sub

End Class

Public Class Form1

    Public Property m_CE As New ClsExcel

    Private Sub QuitQToolStripMenuItem_Click(sender As System.Object, e As System.EventArgs) Handles QuitQToolStripMenuItem.Click
        End
    End Sub

    Private Sub BtnRead1_Click(sender As System.Object, e As System.EventArgs) Handles BtnRead1.Click

    End Sub

    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
        m_CE.Open("C:\temp\book1.xlsx")
        m_CE.setBook("Sheet1")
        MsgBox(m_CE.GetCellValue(1, 1))
        m_CE.SetCellValue(2, 1, "ABC")
        MsgBox(m_CE.GetCellValue(2, 1))
        m_CE.Save()
        m_CE.Close()
        m_CE.Quit()
    End Sub

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load


    End Sub
End Class
トラックバック - http://sub.g.hatena.ne.jp/garyo/20170531