首先引用相应的命名空间,例如using excel = Microsoft.Office.Interop.Excel;
然后打开你的Excel,或者你的worksheet,例如var app = new excel.Application();
var wb = app.Workbooks.Open(file);
var sht = wb.Worksheets["我的工作表"];
最后就是读取数据。需要声明一个承载读取结果的二维数组,然后填充数组,例如object[,] datas = sht.Range["B2:AC2"].Value2;

解决方案 »

  1.   

    关于什么DataTable的,我就不管了。我也不用DataTable。我只是提醒你一些更需要了解的知识点而已。这里最关键地是,不要一个单元一个单元地去读取数据,而是应该仅仅跨进程跟Excel通讯一次,就填充完毕整个二维数组。你也可以试试代码object[,] datas = sht.Range["B2:AC2,B3:AC3,B4:AC4,B5:AC5"].Value2;或者object[,] datas = sht.Range["B2:AC14"].Value2;类似这样的代码,总之不要零碎地去跟excel进程交互,应该尽量一次性完成取数操作。
      

  2.   

    SP哥回答的很好,如果用DataTable的话也是可以的,逐行读取然后赋值,不过效率略低,推荐使用第三方组件:Aspose和NPOI进行操作
      

  3.   

    你直接说导入B2:AC2到B14:AC14这个矩型区域的数据不就行了。代码粘贴习惯了吧。
    用oledb连接Excel数据源,SELECT * FROM Sheet1把Excel整体读入DataTable,然后取DataTable中相应区域的数据就行了。说不定它们满足什么条件,你还可以改造一下sql语句
      

  4.   

    nuget 使用 linqtoexcel 吧,应该最简单了。
    var excel = new ExcelQueryFactory("excelFileName");
    var rows = from c in excel.WorksheetRange("B2", "AC14","Sheet1") 
                     select c;