- ベストアンサー
VB.net2003のエクセルからデータを取得したいのですが・・・
お世話になります。 VB.NET2003でExcel XPのセルの数値を取得しTextBoxなどで表示させたいのですが、うまいこといきません。 下に考えてみたコードを書いてみます。 とりあえずExcelのA1セルの値を取得してみたいのですが、後ほどループで他のセルの値も取得したいと思っています。 これを回すと、num(1, 1) = sheet.cells(1, 1)(下から3行目)で”追加情報 : 型 'Range' から型 'String' へのキャストが有効ではありません。”とされます。 どなたかご教授お願いしますm(__)m Private Sub exel_open() '------配列設定----- Dim app As Object 'エクセルアプリケーションの定義 Dim book As Object 'ブックの定義 Dim sheet As Object 'シートの定義 Dim col, row As Integer 'colは行、rowは列 Dim num(1, 1) As String '各セルの値を取得 '------エクセルファイルを開く&表示------- app = CreateObject("Excel.Application") app.application.visible = True book = app.Workbooks.Open("D:\test.xls") 'エクセルファイルのopen sheet = book.Worksheets(1) '-----エクセルデータの読み込み------ num(1, 1) = sheet.cells(1, 1) TextBox1.Text = num(1, 1) End Sub
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
num(1, 1) = sheet.cells(1, 1) ↓ num(1, 1) = sheet.cells(1, 1).value にするとキャストエラーは消えます。 convert.toString()がよいときもあります。 これでだめなら 下記コードを参考に Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim CN As New ADODB.Connection Dim RS As New ADODB.Recordset Dim FileName, SheetNeme As String Dim strSQL As String AxMSHFlexGrid1.Clear() : System.Windows.Forms.Application.DoEvents() AxMSHFlexGrid1.FixedCols = 0 AxMSHFlexGrid1.FixedRows = 0 'なぜ必要かコメントアウトして見てネ 'データファイルの読込み処理 FileName = "C:\Documents and Settings\name\デスクトップ\Book1.xls" 'データファイルのフルパス SheetNeme = "Sheet4" 'Excelファイルのシート名 'データベースに接続するための情報を設定する CN.Provider = "Microsoft.Jet.OLEDB.4.0" CN.Properties("Extended Properties").Value = "Excel 8.0;HDR=NO;IMEX=1" CN.Open(FileName) 'Connection をオープン 'Recordsetオブジェクトのオープン strSQL = "Select * From [" & SheetNeme & "$]" RS.Open(strSQL, CN, ADODB.CursorTypeEnum.adOpenDynamic, _ ADODB.LockTypeEnum.adLockOptimistic, ADODB.CommandTypeEnum.adCmdText) AxMSHFlexGrid1.DataSource = RS 'MSHFlexGridにデータを代入 '接続終了処理 RS.Close() 'Recordset・Connection を閉じる CN.Close() RS = Nothing '参照を解放。 CN = Nothing AxMSHFlexGrid1.FixedRows = 1 'なぜ必要かコメントアウト End Sub
その他の回答 (1)
- 1050 円(@1050YEN)
- ベストアンサー率69% (477/687)
'VB.NET限定での方法 num(1, 1) = sheet.Cells(1, 1).ToString 'VB6でも通用する方法 num(1, 1) = sheet.Cells(1, 1).Value
お礼
有難うございました。助かりました
お礼
どうも有難うございましたm(_ _)m .valueで解決できました。 toStringも今後の参考にさせていただきます。