[C#]Excelファイルへのデータの書き込み

Excelファイルを操作したい

業務系のシステムを開発していると、結構な頻度でこんな案件にぶち当たります

「データを集計してExcelファイルを作成してほしい」

プログラムで実績なんかを集計かけて、一発で会議資料で使うためのExcelシートを吐き出すのです
Excelであれば、そのあともグラフを簡単に作ったりできますからね

そんな案件の時、C#(.net)なら簡単に実装できてしまいます

サンプルについて

今回のサンプルでは、”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 WriteCells 
	//-------------------------------------------------------------------- 
	public int cellsWrite(int iLine, int iRow, string writeValue) { 
		oSheet.Cells[iLine, iRow] = writeValue;
		return 0;
	} 

	//-------------------------------------------------------------------- 
	// 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;
			string stWrite = "TestData";

			//書き込む内容 
			// インスタンス作成 
			myExcel excel = new myExcel();

			// Excelオープン 
			excel.excelOpen(stFileName, stSheetName);
			
			// Sheet内のセルを上書き 
			excel.cellsWrite(iLine, iRow, stWrite);

			// Excelクローズ(上書き保存) 
			excel.excelClose();
		} 
	} 
}

 

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

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

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です