- ベストアンサー
C# Excelファイルを生成したい
只今Excelファイルの出力について悩んでいます。 DataGridViewやListViewのデータをExcelに吐き出そうと思っています。 が、ネットで色々と調べてもよくわかりません・・・ サンプルソースは出てくるのですが、何が必要でどのようなことができるのかが いまいちピンと来なく、なかなか実現に至っていません。 やりたいことは ・新規作成するExcelファイルの名前を任意で入力 ・保存先を指定 ・DataGridViewなどの入力データをExcelにそのまま吐き出す です。 分からないのは ・Excelファイルを生成して保存してからデータを入れるのか(処理の順番) ・データ挿入はどうやるのか ・そもそもExcelファイルの生成と保存の仕方 プログラミング初心者なので、いまいち把握しきれません できれば97-2003ブックに対応したものをと思っています。 手順など分かる方、よろしくお願いします。 念のため開発環境とExcelのバージョンを・・ VisualStudio2008 C# OS:XP Excel:2007
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> ・そもそもExcelファイルの生成と保存の仕方 についてですが。 C#にてエクセルの名前をつけて保存の方法 http://okwave.jp/qa4881377.html 回答No3で、新規Book作成~名前を付けて保存をしてます。 Excel2007は不所持なので、もし違ったらごめんなさい。
その他の回答 (2)
- nas02
- ベストアンサー率70% (22/31)
まだ出てない方法で、Microsoft Jet データベース エンジン(ACCESSのデータベースエンジン)を使うやり方があります。 この方法のメリットとしては、ExcelがインストールされてなくてもExcelファイルに出力できる事でしょうか。 (内容の確認には、Excelがないと不便ですが。。。) 以下のサイトで丁度よい例が載ってますので、参考にされたら良いと思います。 http://blog.so-net.ne.jp/jem/2009-03-07 処理は、以下のような流れになってます。 1.データベースのオープン(Excelファイル生成含む) 2.DataGridViewよりExcelにテーブル(シート)を作成 ※テーブルの項目は、DataGridViewから自動生成 3.DataGridViewのデータを作成したテーブル(シート)に出力 ※パラメータクエリで出力時に毎回パラメータを作成しているので改善の余地ありです。 4.データベースのクローズ(Excelファイル保存) ※ソースには、インデントを作るために漢字スペースが使われてますので使う場合は気を付けて下さい。 探せば他にも参考となる資料がありそうです。 まあ、出力形式に拘らなければ、CSVファイルとして出力する方が一番簡単だと思います。
お礼
なるほど、DBとして扱えるんですね 流れも丁寧に教えて頂きありがとうございます ソースをみながら試してみます 確かにCSVにして出力は簡単そうですね ですが今回はExcelに出力してそのまま印刷などもやりたいので・・・ でもCSVのほうもそのうち必要になってくると思うので こちらもやり方調べてみます アドバイスありがとうございます
- todo36
- ベストアンサー率58% (728/1234)
主に三つの方法があります。 (1)Excelオートメーションを使用する。 (2)ExcelHTML形式またはExcelXML形式のテキストファイルを作成して、拡張子はxlsで保存する。 (3)サードパーティのライブラリを使用する。(お勧めはExcelクリエータ) (1)は、.NETとの相性が悪く、Excelのバージョンの違いにより問題が発生します。 お勧めしません。 (2)は、Excel97で雛形を作ってHTML形式で保存。そのファイルを真似して作ればよい。 Excelクリエータは有料ですが、最も簡単でトラブルもなくてお勧めです。
お礼
3つも方法があるんですね 有料なものは相談する必要があるので HTMLで吐き出してxlsで保存する方法を調べてみます ありがとうございます!
お礼
おお、新規作成から保存までのサンプルソース! ありがとうございます 試してみます
補足
色々試した結果、n-jun様に示していただいたやり方を ベースにした方法に落ち着きました。 データの挿入はコピーペーストにて一気に行い 1つずつ挿入によるスピードダウンを回避。 ですがもうちょっと利口なやり方があるような気がします・・・ それはまたちょくちょく調べつつ実現していけたらと思います。 回答して頂いた方ありがとうございました! ※妙なところで、A1がCell[1,1]であることになかなか気付かず Cell[0,0]と記述していたため エラーに小一時間ほど悩んだりもしました。。。