更新: Microsoft は、サーバーで Excel COM サービスを使用することを実際には推奨していないようです。それでも、多くの開発者は、非 .NET (私の雇用主が行っているように) と .NET (こちらを参照) 環境の両方で行っています。代替手段はコストがかかるためです。すべての問題は、大部分が解決可能です (大量のアプリケーションで発生する可能性のあるスケーラビリティとパフォーマンスの問題、場合によってはライセンスの問題は別として)。コストのかかる代替手段は、このようなサードパーティのソリューションを使用しています。
1 つの列に異なるデータ型のデータがある場合は、OleDbConnection を使用しないでください。たとえば、Excel COM/OLE API を使用して Excel からの読み取りを試みることができます (ここからコンパイルすると、エラーが含まれる可能性があります)。
次の参照をプロジェクトに含めます。
Microsoft Excel 10.0 オブジェクト ライブラリ
Microsoft Office 10.0 オブジェクト ライブラリ
名前空間 Excel を含めます。
using Excel;
...
Excel.ApplicationClass xl = new Excel.Application();
xl.Visible = false;
xl.UserControl = false;
Excel.Workbook theWorkbook = xl.Workbooks.Open(
fileName, 0, true, 5,
"", "", true, Excel.XlPlatform.xlWindows, "\t", false, false,
0, true);
Excel.Sheets sheets = theWorkbook.Worksheets;
Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
System.Array myvalues;
Excel.Range range = worksheet.get_Range("A1", "E1".ToString());
myvalues = (System.Array)range.Cells.Value;
重要!使用したリソースを解放する必要があります。ここから:
// Need all following code to clean up and extingush all references!!!
theWorkbook.Close(null,null,null);
xl.Workbooks.Close();
xl.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject (range);
System.Runtime.InteropServices.Marshal.ReleaseComObject (sheets);
System.Runtime.InteropServices.Marshal.ReleaseComObject (xl);
System.Runtime.InteropServices.Marshal.ReleaseComObject (worksheet);
System.Runtime.InteropServices.Marshal.ReleaseComObject (theWorkbook);
worksheet=null;
sheets=null;
theWorkbook=null;
xl = null;
GC.Collect(); // force final cleanup!