C#でExcelを使っていると、特定の文字列を検索したくなることありますよね。
今回書いたのは、Excelファイルと文字列を引数で渡すとセルのアドレスを文字列で返してくれる関数です。
ちなみにワークブックの中の1枚目のワークシートしか検索しません。(^-^;
でもなかなか便利。
using Microsoft.Office.Interop.Excel;
using System.Runtime.InteropServices;
public static string findCell(string fileName, string searchStr)
{
Application xlApp = null;
Workbook wb = null;
Worksheet ws = null;
Range aRange = null;
Range firstFind = null;
string str = null;
try
{
try
{
xlApp = new Application();
}
catch
{
throw new Exception(Properties.Resources.ExcelNeeded);
}
if (xlApp != null)
{
//xlApp.Visible = true; //This code will show you Excel window.
wb = xlApp.Workbooks.Open(
fileName, // オープンするExcelファイル名
Type.Missing, // (省略可能)UpdateLinks (0 / 1 / 2 / 3)
Type.Missing, // (省略可能)ReadOnly (True / False )
Type.Missing, // (省略可能)Format
// 1:タブ / 2:カンマ (,) / 3:スペース / 4:セミコロン (;)
// 5:なし / 6:引数 Delimiterで指定された文字
Type.Missing, // (省略可能)Password
Type.Missing, // (省略可能)WriteResPassword
Type.Missing, // (省略可能)IgnoreReadOnlyRecommended
Type.Missing, // (省略可能)Origin
Type.Missing, // (省略可能)Delimiter
Type.Missing, // (省略可能)Editable
Type.Missing, // (省略可能)Notify
Type.Missing, // (省略可能)Converter
Type.Missing, // (省略可能)AddToMru
Type.Missing, // (省略可能)Local
Type.Missing // (省略可能)CorruptLoad
);
ws = (Worksheet)wb.Sheets[1];
aRange = ws.UsedRange;
firstFind = aRange.Find(searchStr,
Type.Missing, XlFindLookIn.xlValues, XlLookAt.xlPart,
XlSearchOrder.xlByRows, XlSearchDirection.xlNext, false,
Type.Missing, Type.Missing);
str = firstFind.get_Address(Type.Missing, Type.Missing,
XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
if (aRange != null)
{
Marshal.ReleaseComObject(aRange);
aRange = null;
}
if (firstFind != null)
{
Marshal.ReleaseComObject(firstFind);
firstFind = null;
}
if (ws != null)
{
Marshal.ReleaseComObject(ws);
ws = null;
}
if (wb != null)
{
wb.Close(true, Type.Missing, Type.Missing);
Marshal.ReleaseComObject(wb);
wb = null;
}
if (xlApp != null)
{
xlApp.Quit();
Marshal.ReleaseComObject(xlApp);
xlApp = null;
}
System.GC.Collect();
}
return str;
}
ちなみにExcelがないと動きません。
なお、作成にあたってたくさんのサイト様を参考にさせていただきました。