- ベストアンサー
vb.netでEXCEl出力
- VB.NETを使ってDataGridViewに表示されたデータをEXCELに出力する方法について質問です。
- 現在DataGridViewに表示した内容をEXCELに出力する方法を探しています。
- VB.NETの初心者ですが、ボタンを押すとDataGridViewのデータをEXCELに表示する方法が分かりません。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> 1と2と二通り方法があるということでよろしいでしょうか? はい、そうです。説明不足ですみませんでした。 > 知識不足のため1の方がよく理解できていないので ちなみに1の方は、ODBCのデータソースにEXCELへの接続を追加して、通常のデータベースのようにデータを追加する方法です。 > 2の方の質問なんですがDataTableのデータを配列にするというのは 行と列に分けるという事でしょうか? そうですね。以下のように、行と列を持つ2次元配列にします。 --------------------------------------------------------------------- Dim count As Integer = dtTable.Rows.Count - 1 Dim data(count, 3) As String For i As Integer = 0 To count - 1 Dim row As DataRow = CType(dtTable.Rows(i), DataRow) data(i, 0) = row(0).ToString data(i, 1) = row(1).ToString data(i, 2) = row(2).ToString Next --------------------------------------------------------------------- > DataTableをそのままexcelに反映させるといった事はできないのでしょうか? 多分、無理だと思います。(私は知りません。ごめんなさい。)
その他の回答 (3)
- korin_
- ベストアンサー率69% (46/66)
> 列の追加については3の部分を変数にして範囲を決めるということで > 大丈夫ですよね? 変数でも良いのですが、dtTable.Columns.Countで列数も取得出来ると思います。 > ちなみにヘッダーについてはDataTableの情報ではなく > 自分で新たにEXCELに作成するしかないでしょうか? ヘッダーはdtTable.Columns(0).ColumnNameとかで取得出来ると思います。 それを配列の最初の行に追加するようにすれば良いと思います。 頑張ってみてください。 > とゆうように、全てにNothingと表記されているんですが > これは意味合い的には変数をNEWで宣言するのと同じような事でよろしいでしょうか? Newで宣言するのと、Nothingで宣言するのは違います。 Newをするとインスタンスが生成されます。 Nothingで宣言しただけではインスタンスは生成されません。 ただ、Nothingで宣言した後にNewをすれば、Newで宣言したのと同じ動きになります。 つまり下記の1と2はどちらにしても同じだと思って良いです。 (厳密に言うと違うのですが、気にしなくても大丈夫です。) ------------------------------------------------------ 1.Dim xlApplication As New Excel.Application ------------------------------------------------------ 2.Dim xlApplication As Excel.Application = Nothing xlApplication = New Excel.Application ------------------------------------------------------ 疑問点があれば、"インスタンスの生成" や "New" などのキーワードで検索してみてください。
お礼
回答ありがとうございます。 おかげさまで無事EXCELに出力する事ができました。 細かいレイアウト等の問題が残っているので、その部分に関しては もう少し自分で調べてみようと思います。 >疑問点があれば、"インスタンスの生成" や "New" などのキーワードで検索してみてください。 ありがとうございます。かなり基本的なことが抜けていると実感しましたので 早速検索してみようと思います。 また新しい質問をあげる事もあると思うのですが 機会がありましたらよろしくお願いします。
- korin_
- ベストアンサー率69% (46/66)
こんにちは。 簡単なサンプルです。 Excelブックを新規作成して配列のデータを表示しています。 解放等の処理は省いていますので、必要に応じて追加してください。 -------------------------------------------------------------------------------- Dim xlApplication As Excel.Application = Nothing Dim xlWorkBooks As Excel.Workbooks = Nothing Dim xlWorkBook As Excel.Workbook = Nothing Dim xlWorkSheet As Excel.Worksheet = Nothing xlApplication = New Excel.Application xlApplication.WindowState = Excel.XlWindowState.xlMinimized xlWorkBooks = xlApplication.Workbooks xlWorkBook = xlWorkBooks.Add() xlApplication.Visible = True xlWorkSheet = CType(xlWorkBook.Sheets("Sheet1"), Excel.Worksheet) xlWorkSheet.Range("A2").Resize(data.GetLength(0), data.GetLength(1)).Value = data ' ここに配列を指定 -------------------------------------------------------------------------------- また書籍の件についてですが、私もほとんど独学で本を読んだりはしていないので、お勧め出来る書籍がないです・・・すみません。
お礼
毎回ありがとうございます。 おかげさまで無事EXCELにデータを参照させることができました。 列の追加については3の部分を変数にして範囲を決めるということで 大丈夫ですよね? 今からチャレンジしてみます。 ちなみにヘッダーについてはDataTableの情報ではなく 自分で新たにEXCELに作成するしかないでしょうか? 書籍に関して、お手数をおかけしました。 こちらこそ1から10まで質問してしまってすいません。
補足
申し訳ありません、追加質問です。 Dim xlApplication As Excel.Application = Nothing Dim xlWorkBooks As Excel.Workbooks = Nothing Dim xlWorkBook As Excel.Workbook = Nothing Dim xlWorkSheet As Excel.Worksheet = Nothing とゆうように、全てにNothingと表記されているんですが これは意味合い的には変数をNEWで宣言するのと同じような事でよろしいでしょうか?
- korin_
- ベストアンサー率69% (46/66)
こんにちは。 1. Excelをデータベースとし、ODBC経由でデータをINSERTする。 2. DataTableのデータを配列にして、Excelに流し込む。 ---------------------------------------------------------- ' 作成した配列をExcelに流し込む xlSheet.Range("A1").Resize(100, 5).Value = data ---------------------------------------------------------- また、.NETからCOMオブジェクトを扱う場合は、参照カウントの解放を行わないと意図したところでプロセスが解放されません。 (ReleaseComObject で検索してみてください。)
お礼
さっそくの返答ありがとうございます。 1と2と二通り方法があるということでよろしいでしょうか? 知識不足のため1の方がよく理解できていないので 2の方の質問なんですがDataTableのデータを配列にするというのは 行と列に分けるという事でしょうか? RangeとResizeについては勉強させていただきます。 DataTableをそのままexcelに反映させるといった事はできないのでしょうか? COMオブジェクトに関しても頂いたキーワードで検索して 勉強させていただきます。
お礼
回答ありがとうございます。 おかげさまで二次元配列にする事はできました (コピーしただけですが・・) その上で根本的な質問なのですが、その配列をEXCELに反映させる 方法はどうすればいいのでしょうか? 又、vb.net作成の上で「これは分かりやすい!」などの書籍がありましたら 教えていただけますでしょうか? 一応自分でも調べてはいるのですが、どうも要領が悪いようなので