tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルVBで作ったデータセットをエクセルのシートに貼り付けたい
記事No11729
投稿日: 2016/08/25(Thu) 19:31
投稿者耳たぶ黒
いつもお世話になってます。超初心者の耳たぶ黒です。
OS:Win10、VBバージョン:VisualStudio 2015pro、Excel2010で作業しています。

やりたい事
VBでCSVデータを読み込んだとき出来るデータセットをエクセルのシートに簡単に
貼り付ける方法はないのでしょうか?
やはりレンジを指定してセルに値を入れていく方法しかないのでしょうか。?

以前からVBでCSVデータを読み込んで、フォーム上のデータグリッドビューとチャートで
結果を確認するプログラムは一応できました。
その後の展開で
1、印刷をしたい
→フォームの印刷をしたが、画面キャプチャーな質感で綺麗じゃない
2、エクセルで作業したい
→ExcelでCSVファイルを開けばいいだけなんですが、作業を一つでも減らせという事なんで...。

上記の2点からテンプレートのExcelシートにデータセットを貼り付けてグラフと表を表示・印刷させたいです。

CSVデータ(例) 
*********************       
現場,山梨県都留郡   
作業者,耳黒
日付,20160805   
                    
0,0,0,12:10:15      
1,2,2,12:10:16
   |
50000,20,55.3,20:10:16
**********************     

読込んでいるプログラム
*************************************************************************
Dim ds As New DataSet
        Dim columns As Integer
        Dim rows As Integer
        Dim FolderPath As String
        Dim csvFileName As String
        '「開く」ダイアログを表示
        If OpenFileDialogCsv.ShowDialog() = System.Windows.Forms.DialogResult.OK Then
            'ピクチャーボックスに選択したファイル名を指定
            FolderPath = IO.Path.GetDirectoryName(OpenFileDialogCsv.FileName)

            csvFileName = IO.Path.GetFileName(OpenFileDialogCsv.FileName)
            TextBox1.Text = FolderPath & "\" & csvFileName
        End If
        Using cn As New System.Data.OleDb.OleDbConnection
            cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="
& FolderPath &
                  ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited"""
            Using da As System.Data.OleDb.OleDbDataAdapter =
               New System.Data.OleDb.OleDbDataAdapter("SELECT * FROM " & csvFileName, cn)
                da.Fill(ds, "Table1")
                Chart1.DataSource = ds                      'Chart に表示するデータソースを設定
                columns = ds.Tables(0).Columns.Count - 1      'データの系列数を取得
                rows = ds.Tables(0).Rows.Count

            End Using
        End Using
*************************************************************************
dsをそのままExcelのシートに貼り付けたいです。そんな都合のいい話はありませんか?

アドバイス頂けると助かります。

[ツリー表示へ]
タイトルRe: VBで作ったデータセットをエクセルのシートに貼り付けたい
記事No11730
投稿日: 2016/08/29(Mon) 01:37
投稿者魔界の仮面弁士
元データが CSV なのであれば、OpenText メソッドで直接 Excel 側に読み込ませるのも手かと。

…と思いきや、行によって列数の異なる、変則的なフォーマットのようですね。


> VBでCSVデータを読み込んだとき出来るデータセットをエクセルのシートに簡単に
> 貼り付ける方法はないのでしょうか?
DataSet ではなく、ADODB.Recordset でも構わないのであれば、
Range オブジェクトに CopyFromRecordset メソッドが用意されています。


> やはりレンジを指定してセルに値を入れていく方法しかないのでしょうか。?
タブ区切りテキストの形にして、Clipboard 経由で範囲選択で転記するという手もあります。

[ツリー表示へ]
タイトルRe^2: VBで作ったデータセットをエクセルのシートに貼り付けたい
記事No11731
投稿日: 2016/08/29(Mon) 11:00
投稿者耳たぶ黒
魔界の仮面弁士さん、ありがとうございます。

Excelにデータを渡すのは
@散布図を描かせるため
A沢山あるCSVデータからVBで選別した10〜20レコードを表にまとめる為
B@、Aを1枚の紙にまとめて印刷するため

@の散布図を描くためのデータはよく考えたらデータセットでなくて未処理のCSVデータでよいので、
花ちゃんさんのプログラムを頂いて対応できました。
Aの方はVBで選別しているので、そのまま持っていきたい。エクセルに持って行ったCSVデータを
再度、選別するのは宜しくない。

私がデータの受け渡しとか無知過ぎるので、アドバイスありがとうございます。

> DataSet ではなく、ADODB.Recordset でも構わないのであれば、
> Range オブジェクトに CopyFromRecordset メソッドが用意されています。
こういう手があるんですね、アドバイスを参考にしてやってみます。

[ツリー表示へ]
タイトルRe^3: VBで作ったデータセットをエクセルのシートに貼り付けたい
記事No11737
投稿日: 2016/09/16(Fri) 17:18
投稿者耳たぶ黒
魔界の仮面弁士さん、お世話になっております。

なんとかできました。でも、当初思い描いていたスマートな方法ではありません。
ADODB.Recordsetを調べたのですがいまいちおバカな私には難しく断念しました。

現状のプログラム上、フォームに貼り付けたdatagridviewにデータの選別結果が表示できていましたので、
そいつをselectAllでコピーしてエクセルの指定セルにペーストするということで、対処しました。
このプログラムはそこまで速さを求められないので、これでまぁいいか〜って感じです。
簡単でいいのですが、カッコ悪いですね。

[ツリー表示へ]