Visual Basic 中学校 掲示板 投稿の管理
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
投稿一覧
教えてください!!
この投稿へのリンク
https://keijiban.umayadia.com/ThreadDetail.aspx?ThreadId=79#CommentId882
この投稿の削除
削除パスワード
削除する
コメント本文
投稿者
葉月
 (社会人)
投稿日時
2008/11/20 08:21:52
昨日、気づいたのでいまさらですが……
他の利用者の参考になるかも知れません。制約つきでサンプルコードを掲載します。
制約の説明は、以下になります。
>分解したRGBの表示まではできたのですが、座標(0,0)から(100,100)までのRGBのデータをエクセルに送るやり方が分かりません。
座標0:0~100:100のRGBを取得するのは、処理に負担がかかるため範囲を狭くしています。
スペックのあるマシーンなら制約なしでも動作しますが、処理が終わるまでビジー状態になるためプログレスバーが必要になります。
>>>サンプルコード
'参照の追加を行う必要があります。詳しくは、注意点を参考にしてください。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Excelファイルを保存するフルパスを指定してください。
Dim strPathXls As String = "フルパスを指定してください"
Dim bmpSample As Bitmap = PictureBox1.Image
Dim xlsApp As New Excel.Application
Dim xlsBooks As Excel.Workbooks = xlsApp.Workbooks
Dim xlsBook As Excel.Workbook = xlsBooks.Add
Dim xlsSheets As Excel.Sheets = xlsBook.Worksheets
Dim xlsSheet As Excel.Worksheet = xlsSheets.Item(1)
Dim xlsCells As Excel.Range
Dim xlsRange As Excel.Range
xlsCells = xlsSheet.Cells
'次のセルへ進む
Const INT_CELL_NEXT = 1
'列を1行目に戻す
Const INT_ROW_BACK = 1
'列
Dim intRow As Integer = 1
'行
Dim intLine As Integer = 1
For i As Integer = 0 To 10
For j As Integer = 0 To 10
xlsRange1 = DirectCast(xlsCells(intLine, intRow), Excel.Range)
xlsRange1.Value = bmpSample.GetPixel(i, j).A.ToString
LeaseObject(xlsRange1)
intRow += INT_CELL_NEXT
xlsRange1 = DirectCast(xlsCells(intLine, intRow), Excel.Range)
xlsRange1.Value = bmpSample.GetPixel(i, j).R.ToString
LeaseObject(xlsRange1)
intRow += INT_CELL_NEXT
xlsRange1 = DirectCast(xlsCells(intLine, intRow), Excel.Range)
xlsRange1.Value = bmpSample.GetPixel(i, j).G.ToString
LeaseObject(xlsRange1)
intRow += INT_CELL_NEXT
xlsRange1 = DirectCast(xlsCells(intLine, intRow), Excel.Range)
xlsRange1.Value = bmpSample.GetPixel(i, j).B.ToString
LeaseObject(xlsRange1)
intRow = INT_ROW_BACK
intLine += INT_CELL_NEXT
Next
Next
xlsSheet.SaveAs(strPathXls)
LeaseObject(xlsSheet)
LeaseObject(xlsSheets)
xlsBook.Close(False)
LeaseObject(xlsBook)
LeaseObject(xlsBooks)
xlsApp.Quit()
LeaseObject(xlsApp)
Me.Close()
End Sub
Private Sub LeaseObject(Of T As Class)(ByRef objCom As T, Optional ByVal lease As Boolean = False)
If objCom Is Nothing Then
Return
End If
Try
If System.Runtime.InteropServices.Marshal.IsComObject(objCom) Then
If lease Then
System.Runtime.InteropServices.Marshal.FinalReleaseComObject(objCom)
Else
Dim count As Integer = System.Runtime.InteropServices.Marshal.ReleaseComObject(objCom)
If 0 < count Then
Dim strMsg As String = "開放されていないオブジェクトがあります"
Dim strTitle As String = "オブジェクトの開放"
MessageBox.Show(strMsg, strTitle, MessageBoxButtons.OK, MessageBoxIcon.Warning)
End If
End If
End If
Finally
objCom = Nothing
End Try
End Sub
>>>注意点
①参照の追加を行う必要があります。
プロジェクト(P)→参照の追加→COMタブ→Microsoft Excel ~(*1) Object Library
*1 ~入る数字は、利用者の環境により変化します。
②strPathXls変数に、処理するExcelファイルのフルパスを指定する必要があります。
OSがVistaの場合は、パスの指定場所に注意してください。
③参考程度にしてください。