範囲を指定してExcel表から複数の値を取り出す - C#
C#のプログラムで範囲を指定してExcel表から複数の値を取り出すコードを紹介します。
概要
Excelファイルから値を読み取るコードを紹介します。
こちらの記事では、Excelシートの単一のセルの値を読み出しましたが、
この記事ではExcelシートの範囲を指定して複数の値を読み出します。
事前準備: Microsoft.Office.Interop.Excel アセンブリの参照
Visual Studio を起動し、Windows Formアプリケーション(.NET Framework)を作成します。
プロジェクトの作成後、 Microsoft.Office.Interop.Excel アセンブリの参照を追加します。
参照の追加の手順は
こちらの記事を参照してください。
元ファイル
Excelファイルを作成します。中は以下とします。A列に値を入力してあります。
UI
以下のUIを作成します。MultiLineプロパティをTrueに設定したテキストボックスとボタンを1つ配置します。また、OpenFileDialogを配置します。
コード
以下のコードを記述します。
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 Microsoft.Office.Interop.Excel;
namespace ExcelFileAccess
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
string ExcelBookFileName = openFileDialog1.FileName;
Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
ExcelApp.Visible = false;
Workbook wb = ExcelApp.Workbooks.Open(ExcelBookFileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing);
Worksheet ws1 = wb.Sheets[1];
ws1.Select(Type.Missing);
Range range = ExcelApp.get_Range("A1", "A100");
if (range != null) {
for (int i = 1; i <= range.Count; i++) {
decimal val = Convert.ToDecimal(range.Value2[i, 1]);
textBox1.Text += string.Format("{0:g}\r\n", val);
}
}
wb.Close();
System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
range = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(ws1);
ws1 = null;
System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
wb = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
ExcelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(ExcelApp);
ExcelApp = null;
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();
}
}
}
}
解説
button1_Click イベント
下記コードでExcelファイルを参照するためのOpenFileDialogを開きます。
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) {
}
Excelファイルのファイルパスを取得し、ExcelAppオブジェクトを作成します。
ExcelAppオブジェクトのVisibleをfalseにすることでExcelアプリケーションのウィンドウを非表示にします。
string ExcelBookFileName = openFileDialog1.FileName;
Microsoft.Office.Interop.Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
ExcelApp.Visible = false;
ExcelAppオブジェクトのWorkbooksのOpen()メソッドを呼び出し、Excelファイルを開きます。
Workbook wb = ExcelApp.Workbooks.Open(ExcelBookFileName,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing);
最初のシートを操作対象のワークシートとして選択します。
Worksheet ws1 = wb.Sheets[1];
ws1.Select(Type.Missing);
範囲を指定してセルを選択します。Excelシートの"A1"セルから"A100"セルを選択します。
Range range = ExcelApp.get_Range("A1", "A100");
選択した範囲がnullでないことを確認し、選択範囲のセルの値を読み出します。
セルの値は、"range.Value2[(行番号), (列番号)]" で取得します。
if (range != null) {
for (int i = 1; i <= range.Count; i++) {
decimal val = Convert.ToDecimal(range.Value2[i, 1]);
textBox1.Text += string.Format("{0:g}\r\n", val);
}
}
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。ファイルを開くダイアログボックスが表示されます。先ほど作成したExcelワークシートのファイルを選択します。
Excel表から読み取られた値がテキストボックスに表示されます。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2013-03-21
改訂日: 2024-04-13