DataGridViewのデータをExcelに

このQ&Aのポイント
  • VB.Net初心者がDataGridViewのデータをExcelに書き込む方法について教えてください。
  • DataGridViewのデータを指定したファイル名でExcelに保存し、その後Excelファイルを開く方法を教えてください。
  • VB.NetのDataGridViewで表示されているデータをExcelファイルに書き込む方法を教えてください。
回答を見る
  • ベストアンサー

DataGridViewのデーターをExcelに

VB.Net初心者です。 フォームにDataGridViewを貼り付け、それにデーターを表示しています。 そのデーターを 全てCsvFileに保管する方法は判ったのですが・・・ Me.稟議処理作成者_STDataGridView.ClipboardCopyMode = _ DataGridViewClipboardCopyMode.EnableWithAutoHeaderText 'ヘッダーをコピーする CsvFileSave("\\Ws55\日東電工\データー引渡し用ファイル\Test2.csv") このDataGridViewの全てのデーターを指定したFile名でExcelFileに書込み、その後、そのExcelFileを立ち上げたいのですが、どうしたらいいのでしょうか。 ご存知の方教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • crowswork
  • ベストアンサー率63% (7/11)
回答No.1

Excel COMオブジェクトを使用することが必要になってくるかと思います。 DataGridViewのデータを1データづつ抽出し、Excelのセルへ貼り付けていくことになると思います。

参考URL:
http://kchon.blog111.fc2.com/blog-entry-55.html
10071007
質問者

お礼

crowsworkさんありがとうございます。 指摘のURLを見て下記のようにしました。 ' ----------------------------------------------------------- ' DataGridViewをEXCELに出力するサンプル(VB.NET/VS2005) ' Excelを参照設定する必要があります ' [参照の追加],[COM],[Microsoft Excel *.* Object Library] ' Imports Microsoft.Office.Interop (必要) ' Imports System.Runtime.InteropServices (必要) 参照設定をしました。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click ' EXCEL起動 Dim objExcel As Excel.Application = Nothing Dim objWorkBook As Excel.Workbook = Nothing objExcel = New Excel.Application objWorkBook = objExcel.Workbooks.Add ' DataGridViewのセルのデータ取得 Dim v As String(,) = New String( _ 稟議処理作成者_STDataGridView.Rows.Count - 1, 稟議処理作成者_STDataGridView.Columns.Count - 1) {} For r As Integer = 0 To 稟議処理作成者_STDataGridView.Rows.Count - 1 For c As Integer = 0 To 稟議処理作成者_STDataGridView.Columns.Count - 1 Dim dt As String = "" If 稟議処理作成者_STDataGridView.Rows(r).Cells(c).Value _ Is Nothing = False Then dt = 稟議処理作成者_STDataGridView.Rows(r).Cells(c).Value.ToString() End If v(r, c) = dt Next Next ' EXCELにデータ転送 Dim ran As String = "A1:" & _ Chr(Asc("A") + 稟議処理作成者_STDataGridView.Columns.Count - 1) & 稟議処理作成者_STDataGridView.Rows.Count objWorkBook.Sheets(1).Range(ran) = v ' エクセル表示 objExcel.Visible = True ' EXCEL解放 Marshal.ReleaseComObject(objWorkBook) <--ここでエラー Marshal.ReleaseComObject(objExcel) objWorkBook = Nothing objExcel = Nothing End Sub と書きました。 すると下記の所でエラー表示されます。 Marshal 内容は 名前"Marshal"は宣言されていません。 です。 すいませんが VB.Net全くの初心者です。 続けて教えていただけませんでしょうか。 ちなみにURLでは ボタンを押したイベントでなく Public Sub SaveExcel() で書かれていました。 よろしくお願いいたします。

その他の回答 (1)

  • crowswork
  • ベストアンサー率63% (7/11)
回答No.2

>' [参照の追加],[COM],[Microsoft Excel *.* Object Library] > ' Imports Microsoft.Office.Interop (必要) > ' Imports System.Runtime.InteropServices (必要) > >参照設定をしました。 ⇒参照設定は上記ExcelのCOMオブジェクトだけでなく、OfficeのCOMオブジェクトも必要になってくるかと思います。 >' EXCEL解放 >Marshal.ReleaseComObject(objWorkBook) <--ここでエラー ⇒エラーの内容から察するに(必要)と記載されている上記のコメント文をImports宣言されていないのではないでしょうか? できましたら、エラーが出た箇所は何を実行しようとしているのかをご自身で調べられた方が覚えられるかと思います。 あと、前回と今回の参考URLのどちらにも記載されていませんが、SheetやRangeまたはCellsなども変更として宣言し、Booksなどと同様にCOMオブジェクトを開放してあげる必要があります。 *Excel COMオブジェクト などのキーワードで検索をすればいっぱい出てくると思いますよ。

参考URL:
http://blogs.timberlandchapel.com/blogs/timberlandchapel/articles/1149.aspx

関連するQ&A

  • [非SQL]Datagridviewでのファイル読み書き

    いつもお世話になっております。 SQLを用いずにDatagridviewでデータを読み込み,書き込みする方法を教えていただきたく,質問させていただきました。 現在,txtファイル,あるいはcsvファイルを読み込み,Datagridviewを用いてデータ表示し,レコードの内容を変更し,書き込みを行えるようなプログラムを考えております。 イメージとしては,次のような感じです。 |ヘッダ1|ヘッダ2|コンボボックス| |AAAAA|aaaaa|項目1~3| |BBBBB|bbbbb|項目1~3| 環境:vb2005 ExpressEdition まだプログラミングを始めたばかりという事もあり,右も左もわかりませんが,ご教授お願い致します。

  • DataGridviewから抽出

    VB2005初心者です。 csvデータをStreamReaderを使用しDataGridviewへ表示しました。 DataGridに表示されたデータを抽出するにはどうすればいいのでしょうか?よろしくお願いします。

  • C# datagridview

    いくつかこまごまとしたものをまとめてご質問させて頂きますが, 1)csvファイルを読込,ある処理を行おうとすると 「列の FillWeight 値の合計が 65535 を超えることはできません。」 というエラーが出て処理が出来ません.このエラーの解消法を教えて頂けないでしょうか? 2)画像のように読み込んだヘッダー部分が文字化けしてしまいます. こちらの解消法をご教授頂けないでしょうか? 3)csvのすべてのデータをdatagridviewに表示させたいのですが,2列分しか表示されません. 下記に2)とも関連したプログラムを記載いたします.どなたかご教授願えないでしょうか? string strName = "xxx.csv"; // 仮のファイル名 string strPath = "c:/csv/"; // 仮のディレクトリ名 OpenFileDialog sfd = new OpenFileDialog(); sfd.InitialDirectory = strPath; sfd.FileName = strName; sfd.Filter = "CSVファイル(*.csv)|*.csv|xlsファイル(*.xls)|*.xls|xlsxファイル(*.xlsx)|*.xlsx|テキスト(*.txt)|*.txt"; sfd.Title = "開くファイルを選択してください"; sfd.RestoreDirectory = true; sfd.CheckFileExists = false; if (sfd.ShowDialog() == DialogResult.OK) { // CSVファイルオープン System.IO.StreamReader sw = new System.IO.StreamReader(sfd.FileName); // CSVファイルの各セルをDataGridViewに表示 int r = 0; String lin = ""; do { lin = sw.ReadLine(); if (lin != null) { if (r == 0) { dataGridView1.Columns.Add("clmName1", "日付"); this.dataGridView1.Columns.Add("Time", "データ"); } this.dataGridView1.Rows.Add(); String[] csv = lin.Split(','); for (int c = 0; c <= csv.GetLength(0) - 1; c++) { if (c < this.dataGridView1.Columns.Count) { this.dataGridView1.Rows[r].Cells[c].Value = csv[c]; } } r += 1; } } while (lin != null); // CSVファイルクローズ sw.Close(); tabControl1.SelectedIndex = 1; }

  • 別フォームからdatagridviewの削除

    vb.netで、form1のdatagridviewを、form2のボタンをクリックした際に、datagridviewのrowを削除したいのですが、newでform1を参照して、datagridviewのrowを削除しようとしたのですが、form1のdatagridviewの情報をform2で取得できなくて、実行時エラーになってしまい困っています。 form1のdatagridviewのデータは、csvファイルを接続して、loadイベントで表示させるようにしています。 わかるかたいらっしゃいましたら、教えていただけると助かります。 宜しくお願いいたします。

  • VB2005 DataGridViewのClipbordCopyについて

    こんにちは。 VB2005のDataGridViewに表示されている全てのセルをヘッダーも含めてClipbordにコピーしたいのですが、 どのように行えばよろしいでしょうか? MSDNには、 http://msdn2.microsoft.com/ja-jp/library/system.windows.forms.datagridview.clipboardcopymode.aspx のサンプルがありますがアクティブなセルしか取得できません。 ご教授のほどよろしくお願いします。

  • VB2008のDataGridViewにあるデータをPHP5を使ってMySQLに

    VB2008で大量のデータをサーバーにあるPHP5スクリプトにデータを送ろうと思いますが、VBとPHPで通信する何か良い方法はありますか? データベースはMySQL5です。 DataGridViewからXMLファイルにして、それをPHPに吸わせてMySQLにセットする方法を考えていますが、簡単な方法があれば知りたいです。 直接VBからMySQLへ書き込み?は可能でしょうか。

  • DataGridViewのデータの引渡しについて

    VB2005の勉強をしている者です。 いろいろ調べたのですが、どうしてもわからないことがあるので、 教えてください。 現在行なおうとしているこは、 DataGridViewで選択されている行のデータ全てを、 他のフォームに渡すということです。 いろいろ考えた結果、選択された行のデータを配列に保持して、 その配列を別のフォームに渡せば 希望どおりの動きをすることはわかったのですが、 どうも無駄な処理をしてしまっている気がするんです。 例えば、選択した行のデータのみを、 新たに宣言したDataTableにコピーして、 そのDataTableを他のフォームに渡すというようなことは、 できないのでしょうか? もしくは、 Form2.show(DataGridView1.CurrentRow) のように、直接渡すことができれば、一番嬉しいのですが・・・ なにぶん、独学で勉強している初心者なので、 かなり的外れな質問になってしまっているかもしれませんが、 もしお分かりでしたら、アドバイスを下さい。 よろしくお願いします。

  • C# datagridview csv 読込

    datagridviewにcsvファイルを読み込んでいるのですが,csvファイル内の行列数分のみ列数・行数をdatagridviewに生成したいのですが,どうも必要以上の列数・行数を生成してしまいます. 下記にそのプログラムを記載いたします. どなたか,必要分のみするにはどうすればよろしいかご教授願えないでしょうか? private void button1_Click(object sender, EventArgs e) { string strName = "xxx.csv"; // 仮のファイル名 string strPath = "c:/csv/"; // 仮のディレクトリ名 OpenFileDialog sfd = new OpenFileDialog(); sfd.InitialDirectory = strPath; sfd.FileName = strName; sfd.Filter = "CSVファイル(*.csv)|*.csv|xlsファイル(*.xls)|*.xls|xlsxファイル(*.xlsx)|*.xlsx|テキスト(*.txt)|*.txt"; sfd.Title = "開くファイルを選択してください"; sfd.RestoreDirectory = true; sfd.CheckFileExists = false; if (sfd.ShowDialog() == DialogResult.OK) { // CSVファイルオープン System.IO.StreamReader sw = new System.IO.StreamReader(sfd.FileName); // CSVファイルの各セルをDataGridViewに表示 int r = 0; String lin = ""; do { lin = sw.ReadLine(); if (lin != null) { dataGridView1.Columns.Add("clmName1", "日付"); this.dataGridView1.Columns.Add("Time","データ"); this.dataGridView1.Rows.Add(); String[] csv = lin.Split(','); for (int c = 0; c <= csv.GetLength(0) - 1; c++) { if (c < this.dataGridView1.Columns.Count) { this.dataGridView1.Rows[r].Cells[c].Value = csv[c]; } } r += 1; } } while (lin != null); // CSVファイルクローズ sw.Close(); }

  • DataGridViewのComboBoxについて

    お世話になります。 現在、VB2008にて、 csvファイルの内容をDataGridViewに書き込むという プログラムの作成をしているのですが、 csvの中身を書き込むという作業はできるのですが、 ComboBoxの列のみ、値が書き込まれません。 csvの値は、DataGridViewのComboBoxのリストと同じ値を 入力しており、リスト以外の値が入力されている ということはありません。 Dim Items() As String '一行を, (カンマ)で区切って項目ごとに分解 Items = Line.Split(",") For n = 0 To Items.Length - 1 If Items(n).Replace("""", "") = Nothing Then Items(n) = "0" End If Next n 上記のコードで、 Items()という変数に、csvの値を格納し、 DataGridVIew1.Rows(0).Cells(0).Value = Items(0) という形で値を格納していますが、 どうしてもComboBoxの列のみ変化がありません。 どなたか、解決策もしくはComboBox列などに関する 情報などをご教授願えないでしょうか、 よろしくお願いします。

  • datagridviewの並べ替え

    VB2005でDataGridViewを使用して属性番号、日時順、電圧値といったデータ行を表示させています。 複数のcsvファイルから読み込んで表示させていますが、この表示を属性番号順・日時順といった順で並べ替えをしたいのです。 DataGridView.Sortメソッドを使用して 日時列→属性番号列といった順で連続的にソート処理をしています。 が、上手くいきません。 年末の忙しいところ皆さん申し訳ないのですが、知っている方教えて下さい。 最終的には属性順には並んでいますが、最初の日時順が崩れてしまっています。 日時順を元に属性番号順に並べ替える時に、並び順が下がる対象行があるとします。 この並び順が下がる行データの移動先の位置にあった行データが日時を無視して入れ替わりに上がってきてしまっています・・・ よろしくお願いしますm(__)m

専門家に質問してみよう