
前提・実現したいこと
ご閲覧ありがとうございます。
C#を勉強中の初心者です。
下記内容に取り組んでますが、
よくわからないので、
教えてください。
■■な機能を実装中に以下のエラーメッセージが発生しました。
C#の初心者です。
グリッドビューに登録した大量のデータをExcel出力ボタンで
自分の好きなフォルダーに保存しようとしています。
下記サイトなどを参考にやってますが、
どうしても、下記の部分をコピー使用するとエラーが発生してしまいます。
どのように直せばよいでしょうか?
よろしくお願いします。
発生している問題・エラーメッセージ
問題の箇所
エクセルにgridviewのデータが正しく保存されない
objWorkSheet.get_Range( objWorkSheet.Cells[1, 1],objWorkSheet.Cells[ this.Rows.Count,this.Columns.Count]).Value2 = v; いつもこのソースで下記内容のエラーが出現します。 解決策をご教授ください Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: ''object' に 'get_Range' の定義がありません'
自分のソースコード
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Excel = Microsoft.Office.Interop.Excel; using System.Runtime.InteropServices; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { // EXCEL起動 Excel.Application objExcel = new Excel.Application(); Excel.Workbook objWorkBook = objExcel.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); Excel.Worksheet objWorkSheet = (Excel.Worksheet)objWorkBook.Sheets[1]; // DataGridViewのセルのデータ取得 String[,] v = new String[ dataGridView1.Rows.Count, dataGridView1.Columns.Count]; for (int r = 0; r <= dataGridView1.Rows.Count - 1; r++) { for (int c = 0; c <= dataGridView1.Columns.Count - 1; c++) { String dt = ""; if (dataGridView1.Rows[r].Cells[c].Value != null) { dt = dataGridView1.Rows[r].Cells[c].Value. ToString(); } v[r, c] = dt; } } // EXCELにデータ転送 objWorkSheet.get_Range( objWorkSheet.Cells[1, 1], objWorkSheet.Cells[ dataGridView1.Rows.Count, dataGridView1.Columns.Count]).Value2 = v; // エクセル表示 objExcel.Visible = true; // EXCEL解放 Marshal.ReleaseComObject(objWorkBook); Marshal.ReleaseComObject(objExcel); Marshal.ReleaseComObject(objWorkSheet); objWorkSheet = null; objWorkBook = null; objExcel = null; // //メッセージボックスを表示する // DialogResult result = MessageBox.Show("データをExcelに出力しますか?", // "質問", // MessageBoxButtons.OKCancel, // MessageBoxIcon.Exclamation); // //何が選択されたか調べる // if (result == DialogResult.Yes) // { // } // else if (result == DialogResult.No) // { // //「いいえ」が選択された時 // MessageBox.Show("「いいえ」が選択されました\nシステムを終了します。"); // return; // } } private void button2_Click(object sender, EventArgs e) { //OpenFileDialogクラスのインスタンスを作成 OpenFileDialog ofd = new OpenFileDialog(); //はじめに表示されるフォルダを指定する //指定しない(空の文字列)の時は、現在のディレクトリが表示される ofd.InitialDirectory = @"C:\"; //[ファイルの種類]に表示される選択肢を指定する //指定しないとすべてのファイルが表示される ofd.Filter = "HTMLファイル(*.html;*.htm)|*.html;*.htm|すべてのファイル (*.*)|*.*"; //[ファイルの種類]ではじめに選択されるものを指定する //2番目の「すべてのファイル」が選択されているようにする ofd.FilterIndex = 2; //タイトルを設定する ofd.Title = "開くファイルを選択してください"; //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする ofd.RestoreDirectory = true; //存在しないファイルの名前が指定されたとき警告を表示する //デフォルトでTrueなので指定する必要はない ofd.CheckFileExists = true; //存在しないパスが指定されたとき警告を表示する //デフォルトでTrueなので指定する必要はない ofd.CheckPathExists = true; ////メッセージボックスを表示する DialogResult result = MessageBox.Show("グリッドビューにExcelデータを読み込みしますか?", "質問", MessageBoxButtons.YesNo, MessageBoxIcon.Question); // //何が選択されたか調べる if (result == DialogResult.Yes) { //ダイアログを表示する if (ofd.ShowDialog() == DialogResult.OK) { int MaxColumns = dataGridView1.Columns.Count - 1; int MaxRows = dataGridView1.Rows.Count - 1; //OKボタンがクリックされたとき、選択されたファイル名を表示する MessageBox.Show("「はい」が選択されました" + " \n選択したファイル名" + ofd.FileName + " \n出力範囲 (縦 / 横) " + MaxColumns +" / "+ MaxRows, "ファイル情報", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); //Excelを読み取りをOKした場合のイベント //Excelデータのパス string fileName = ofd.FileName; // EXCEL起動&表示 Excel.Application objExcel = new Excel.Application(); //Excelファイルの中身を開いて確認 Excel.Workbook objWorkBook = objExcel.Workbooks.Open(fileName, // オープンするExcelファイル名 Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3) Type.Missing, // (省略可能)ReadOnly (True / False ) Type.Missing, // (省略可能)Format // 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;) // 5:なし / 6:引数 Delimiterで指定された文字 Type.Missing, // (省略可能)Password Type.Missing, // (省略可能)WriteResPassword Type.Missing, // (省略可能)IgnoreReadOnlyRecommended Type.Missing, // (省略可能)Origin Type.Missing, // (省略可能)Delimiter Type.Missing, // (省略可能)Editable Type.Missing, // (省略可能)Notify Type.Missing, // (省略可能)Converter Type.Missing, // (省略可能)AddToMru Type.Missing, // (省略可能)Local Type.Missing // (省略可能)CorruptLoad ); Excel.Worksheet objWorkSheet = (Excel.Worksheet)objWorkBook.Sheets[1]; // EXCELの各セルの値をDataGridViewに表示 Object v; int r = 0; dataGridView1.Rows.Clear(); do { dataGridView1.Rows.Add(); Boolean blnNew = false; for (int c = 0; c <= dataGridView1.Columns.Count - 1; c++) { v = ((Excel.Range)objWorkSheet.Cells[r + 1, c + 1]).Value2; if (v != null) { blnNew = true; dataGridView1.Rows[r].Cells[c].Value = v.ToString(); } } if (blnNew == false) { dataGridView1.Rows.RemoveAt(r); break; } r += 1; } while (true); // EXCEL解放 objWorkBook.Saved = true; objWorkBook.Close(false, Type.Missing, Type.Missing); objExcel.Quit(); Marshal.ReleaseComObject(objWorkSheet); Marshal.ReleaseComObject(objWorkBook); Marshal.ReleaseComObject(objExcel); objWorkSheet = null; objWorkBook = null; objExcel = null; } } else if (result == DialogResult.No) { //「いいえ」が選択された時 MessageBox.Show("「いいえ」が選択されました"); } } } }
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
C# 、Windows Excel 2010



回答1件
あなたの回答
tips
プレビュー