[C#]Excelファイルからデータの読み込み

Excelファイルを参照したい

 

業務システムとExcelは切ってもきれない関係

Excelで登録しているデータを読みとって、プログラム上に展開したい
そんな案件が結構な頻度であったりします

でもさすがMicrosoft!
Visual Studio , C# , Excel

役者が揃えば簡単に実装できます

サンプルについて

今回のサンプルでは、”C:\\openFileName.xlsx”というExcelファイルを開き、 A1のセルからメッセージボックスに情報を表示しています。

VisualStudioからExcelを扱う場合、プロジェクトで[COM]の[Microsoft Excel [バージョン番号] Object Library]を 参照する必要があります。

開発環境

Visual Studio 2013 Express
.NET Framework 4.0

Microsoft Excel 2013

サンプルコード

C# – エクセルを制御するクラスの定義

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Excel = Microsoft.Office.Interop.Excel; 

class myExcel { 
	private static Excel.Application oXls; 
	private static Excel.Workbook oBook; 
	private static Excel.Worksheet oSheet; 

	//-------------------------------------------------------------------- 
	// Excel OpenExcel 
	//-------------------------------------------------------------------- 
	public int excelOpen(string openFileName, string openSheetName) { 
		openExcelFile(); 
		openExcelWorkbook(openFileName); 
		openExcelWorkSheet(openSheetName); 

		return 0; 
	} 

	//-------------------------------------------------------------------- 
	// Excel ReadCells 
	//-------------------------------------------------------------------- 
	public string cellsRead(int iLine, int iRow) { 
		return oSheet.Cells[iLine, iRow].Text; 
	} 

	//-------------------------------------------------------------------- 
	// Excel Close 
	//-------------------------------------------------------------------- 
	public int excelClose() { 
		oBook.Close(true, Type.Missing, Type.Missing); 
		oXls.Quit(); 

		return 0; 
	} 

	// Excel Open 
	private static int openExcelFile() { 
		oXls = new Excel.Application(); 
		oXls.Visible = false; 
		return 0; 
	} 

	// Excel WorkBook Open 
	private static int openExcelWorkbook(string openFileName) { 
		oBook = (Excel.Workbook)(oXls.Workbooks.Open(openFileName)); 
		return 0; 
	} 

	// Excel WorkSheet Open 
	private static int openExcelWorkSheet(string openSheetName) { 
		oSheet = (Excel.Worksheet)oBook.Sheets[getSheetIndex(openSheetName, oBook.Sheets)]; 
		return 0; 
	} 

	// 指定されたワークシート名のインデックスを返す 
	private static int getSheetIndex(string sheetName, Excel.Sheets shs) { 
		int i = 0; 
		foreach (Excel.Worksheet sh in shs) { 
			if (sheetName == sh.Name) { 
				return i + 1; 
			} 
			i += 1; 
		} 

		return 0; 
	} 
}

C# – 上記クラスを使用してデータの読み込み

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; 

namespace ExcelTest { 
	public partial class excelText : Form { 
		public excelText() { 

			InitializeComponent(); 

			// 変数定義 
			string stFileName = "C:\\openFileName.xlsx"; 
			string stSheetName = "Sheet1"; 
			int iLine = 1; 
			int iRow = 1; 

			// インスタンス作成 
			myExcel excel = new myExcel(); 

			// Excelオープン 
			excel.excelOpen(stFileName, stSheetName); 

			// Sheetの中を参照して表示 
			MessageBox.Show( excel.cellsRead(iLine, iRow) ); 

			// Excelクローズ excel.excelClose(); 
		} 
	} 
}

 

サンプルコード使用時の注意点

今回のサンプルコードでは、妥当性のチェックを行っていません。
例外が発生する場合があります。
実際の実装では妥当性の確認を行うように注意してください。