もう1年以上更新してなかったw
久しぶりに小ネタを。
アプリからEXCELファイルを読み込むってのは業務アプリ開発で
ありがちな依頼だったりする。
で、オイラもそんなC#開発依頼を受けて。
まず、参照設定にMicrosoft.Office.Interop.Excelを追加
(サードパーティ使用不可だからw)
以下、データ取得のソース
-----------------------------------------------------------------------------------------
// データ格納エリア
object[,] RangeDatas = null;
Microsoft.Office.Interop.Excel.Application Exl = null;
Microsoft.Office.Interop.Excel.Workbooks xlsBooks = null;
Microsoft.Office.Interop.Excel.Workbook xlsBook = null;
Microsoft.Office.Interop.Excel.Sheets xlsSheets = null;
Microsoft.Office.Interop.Excel.Worksheet xlsSheet = null;
Microsoft.Office.Interop.Excel.Range xlsRange = null;
Microsoft.Office.Interop.Excel.Workbooks xlsBooks = null;
Microsoft.Office.Interop.Excel.Workbook xlsBook = null;
Microsoft.Office.Interop.Excel.Sheets xlsSheets = null;
Microsoft.Office.Interop.Excel.Worksheet xlsSheet = null;
Microsoft.Office.Interop.Excel.Range xlsRange = null;
try
{
// EXCEL起動
Exl = new Microsoft.Office.Interop.Excel.Application
{
DisplayAlerts = false
};
try
{
// Books指定
xlsBooks = Exl.Workbooks;
try
{
// Book読込
xlsBook = xlsBooks.Open(FILENAME);
try
{
//EXCEL Sheets
xlsSheets = xlsBook.Sheets;
try
{
//EXCEL Sheet(1シート目)
xlsSheet = xlsSheets[1] as Microsoft.Office.Interop.Excel.Worksheet;
try
{
//使用セル
xlsRange = xlsSheet.UsedRange;
RangeDatas = xlsRange.Value;
}
catch { }
finally
{
if (xlsRange != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRange);
}
xlsRange = null;
}
}
catch { }
finally
{
if (xlsSheet != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheet);
}
xlsSheet = null;
}
}
catch { }
finally
{
if (xlsSheets != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheets);
}
xlsSheets = null;
}
}
catch { }
finally
{
if (xlsBook != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsBook);
}
xlsBook = null;
}
}
catch { }
finally
{
if (xlsBooks != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsBooks);
}
xlsBooks = null;
}
}
catch { }
finally
{
if (Exl != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(Exl);
}
Exl = null;
}
{
// EXCEL起動
Exl = new Microsoft.Office.Interop.Excel.Application
{
DisplayAlerts = false
};
try
{
// Books指定
xlsBooks = Exl.Workbooks;
try
{
// Book読込
xlsBook = xlsBooks.Open(FILENAME);
try
{
//EXCEL Sheets
xlsSheets = xlsBook.Sheets;
try
{
//EXCEL Sheet(1シート目)
xlsSheet = xlsSheets[1] as Microsoft.Office.Interop.Excel.Worksheet;
try
{
//使用セル
xlsRange = xlsSheet.UsedRange;
RangeDatas = xlsRange.Value;
}
catch { }
finally
{
if (xlsRange != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsRange);
}
xlsRange = null;
}
}
catch { }
finally
{
if (xlsSheet != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheet);
}
xlsSheet = null;
}
}
catch { }
finally
{
if (xlsSheets != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsSheets);
}
xlsSheets = null;
}
}
catch { }
finally
{
if (xlsBook != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsBook);
}
xlsBook = null;
}
}
catch { }
finally
{
if (xlsBooks != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlsBooks);
}
xlsBooks = null;
}
}
catch { }
finally
{
if (Exl != null)
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(Exl);
}
Exl = null;
}
-----------------------------------------------------------------------------------------
使用したオブジェクトを明示的に開放してやらないと駄目なんで
めんどくさいけど仕方ない。
これでRangeDatasにEXCELセルのデータが入るのだけど・・・・
日付データとかは日付型で入るわけでもない。
EXCELに表示されている値を取り込みたいとなると
ループで各セルを回して.Textを取得する必要があるみたい。
(一括で取得する方法があれば良いけど・・・・)
0 件のコメント:
コメントを投稿