Excelファイルから数値でセル番号を指定してセルの内容を取得する

C#のプログラムで、Excelファイルを読み込みセルの値を表示するコードを紹介します。

概要

こちらの記事で紹介した方法はセルの位置を文字列("A1"など)で指定していましたが、 今回はforループを用いて複数のセルの内容を取得するため、添え字でセルの内容を参照する方法を紹介します。

事前準備: Microsoft.Office.Interop.Excel アセンブリの参照

Visual Studio を起動し、Windows Formアプリケーション(.NET Framework)を作成します。 プロジェクトの作成後、 Microsoft.Office.Interop.Excel アセンブリの参照を追加します。 参照の追加の手順はこちらの記事を参照してください。

事前準備: Excelブックの作成

以下の内容のExcelファイルを用意します。

実装例

UI

下図のフォームを作成します。ボタンとMultilineプロパティをTrueに設定したテキストボックス、OpenFileDialogを配置します。

コード

下記コードを記述します。button1 のCickイベントを実装します。
using Microsoft.Office.Interop.Excel;
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 static System.Windows.Forms.VisualStyles.VisualStyleElement;

namespace ExcelFileRead
{
  public partial class FormLoopRead : Form
  {
    public FormLoopRead()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      if (openFileDialog1.ShowDialog() == DialogResult.OK) {
        Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
        ExcelApp.Visible = false;
        Workbook wb = ExcelApp.Workbooks.Open(openFileDialog1.FileName);

        Worksheet ws1 = wb.Sheets[1];
        ws1.Select(Type.Missing);

        for (int i = 1; i < 5; i++) {
          Range rgn = ws1.Cells[i, 1];
          dynamic val = rgn.Value2;
          textBox1.Text += Convert.ToString(val) + "\r\n";
        }
        wb.Close(false);
        ExcelApp.Quit();
      }

    }
  }
}

解説

下記のコードでExcelアプリケーションオブジェクトを作成します。アプリケーションウィンドウは非表示にします。
  Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
  ExcelApp.Visible = false;

ワークブックを開き最初のワークシートを選択します。
  Workbook wb = ExcelApp.Workbooks.Open(ExcelBookFileName);
  Worksheet ws1 = wb.Sheets[1];
  ws1.Select(Type.Missing);

4回ループします。(Excel表の最初から4行を読み込みます。)
  for (int i=1; i < 5; i++) {

i行目1列のCellのRangeをrgnに格納します。左上のセルはCell[1,1]となります。rgn.Value2でセルの値を取得できます。取得したセルの内容をtextBox2に表示します。
  Range rgn = ws1.Cells[i, 1];
  dynamic val = rgn.Value2;
  textBox2.Text += Convert.ToString(val)+"\r\n";

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。ファイルを開くダイアログが表示されます。先に作成したExcelブックのファイルを選択して開きます。


ファイルを開くと、テキストボックスに下図のテキストが表示されます。Excelワークシートに入力した値を読み取り、 テキストボックスに表示する動作が実装できています。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2011-01-04
改訂日: 2024-04-13
iPentec all rights reserverd.