RSS

Excel 2010のワークシートをC#4でアクセスする。

20 11月

Form1.cs

using System;
using System.Windows.Forms;

namespace Excel2010
{
 /// <summary>
 /// Excel 2010のテスト
 /// </summary>
 public partial class Form1 : Form
 {
 Excel2010Class excelObj;

 /// <summary>
 /// フォームのコンストラクタ
 /// </summary>
 public Form1()
 {
 InitializeComponent();

 excelObj = null;
 }

 /// <summary>
 /// 「Excelファイルを開く」メニュー
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void mnuFileOpen_Click(object sender, EventArgs e)
 {
 if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
 {
 Cursor = Cursors.WaitCursor;
 StatusLabel1.Text = "ワークブックを読み込み中。";
 System.Windows.Forms.Application.DoEvents();

 try
 {
 excelObj = new Excel2010Class(openFileDialog1.FileName, false);

 StatusLabel1.Text = openFileDialog1.FileName;
 ShowData();
 }
 catch (Exception ex)
 {
 StatusLabel1.Text = "例外を検出。" + ex.Message;
 }
 finally
 {
 Cursor = Cursors.Default;
 System.Windows.Forms.Application.DoEvents();
 }
 }
 }

 /// <summary>
 /// 「終了」メニュー
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void mnuExit_Click(object sender, EventArgs e)
 {
 Close();
 }

 /// <summary>
 /// フォームが閉じるとき
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void Form1_FormClosing(object sender, FormClosingEventArgs e)
 {
 if (excelObj != null)
 {
 excelObj.Close();
 }
 }

 /// <summary>
 /// ワークシートのデータを表示する。
 /// </summary>
 private void ShowData()
 {
 int row = 1;
 object[] data = new object[5];

 while (excelObj.GetValue(0, row).ToString().Length > 0)
 {
 data[0] = excelObj.GetValue(0, row);
 data[1] = excelObj.GetValue(1, row);
 data[2] = excelObj.GetValue(2, row);
 data[3] = excelObj.GetValue(3, row);
 data[4] = excelObj.GetValue(4, row);
 dataGridView1.Rows.Add(data);
 row++;
 }
 }
 }
}



Excel2010Class.cs


using Excel = Microsoft.Office.Interop.Excel;

namespace Excel2010
{
 /// <summary>
 /// Excelワークシートを扱うクラス
 /// </summary>
 class Excel2010Class
 {
 Excel.Application excel = null;
 Excel.Worksheet sheet;

 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="filename">Excelファイル名</param>
 /// <param name="visible">Excelを可視にするかどうか</param>
 public Excel2010Class(string filename, bool visible = true)
 {
 excel = new Excel.Application();

 if (visible)
 {
 excel.Visible = true;
 }
 excel.Workbooks.Open(filename);
 sheet = excel.Workbooks[1].Worksheets[1];   // インデックスは1から始まる!
 }

 /// <summary>
 /// デストラクタ
 /// </summary>
 public void Close()
 {
 if (excel != null)
 {
 excel.Workbooks[1].Save();  // Excel 2010ではデータを変更しなくても保存しないと保存確認メッセージボックスが表示されるため。
 excel.Workbooks[1].Close();
 excel.Quit();
 excel = null;
 }
 }

 /// <summary>
 /// ワークシートの値を読む。
 /// </summary>
 /// <param name="col">列(0,1,2,..)</param>
 /// <param name="row">行(0,1,2,...)</param>
 /// <returns>セルの値</returns>
 public object GetValue(int col, int row)
 {
 object value = sheet.Cells[row + 1, col + 1].Value;
 if (value == null)
 {
 value = "";
 }

 return value;
 }
 }
}
 
コメントする

投稿者: : 2010/11/20 投稿先 C#

 

タグ: ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中