它并不完美,您可能需要调整一些参数,我没有检查它是否获得了正确的区域,这就是您的工作。
但正如您所要求的,它从 Excel 工作表中获取数据表。
我更喜欢创建一个将列作为属性的自定义对象列表,而不是数据表,但这只是我。
public System.Data.DataTable READExcel(string path,int row,int col, int rowamount, int colamount, int worksheetindex)
{
Microsoft.Office.Interop.Excel.Application objXL = null;
Microsoft.Office.Interop.Excel.Workbook objWB = null;
objXL = new Microsoft.Office.Interop.Excel.Application();
objWB = objXL.Workbooks.Open(path);
Microsoft.Office.Interop.Excel.Worksheet objSHT = objWB.Worksheets[worksheetindex];
int rows = objSHT.UsedRange.Rows.Count;
int cols = objSHT.UsedRange.Columns.Count;
System.Data.DataTable dt = new System.Data.DataTable();
// Change that for other column names
for (int c = col; c <= col + colamount; c++)
{
dt.Columns.Add(objSHT.Cells[row, c].Text);
}
// read the content
for (int r = row; r <= row+rowamount; r++)
{
DataRow dr = dt.NewRow();
for (int c = col; c <= col+colamount; c++)
{
dr[c - 1] = objSHT.Cells[r, c].Text;
}
dt.Rows.Add(dr);
}
objWB.Close();
objXL.Quit();
return dt;
}
这样称呼它:
// A2 -> row:2,col:1 till F6 row:2+4, col1+5
READExcel(@"path", 2, 1, 4, 5, 3);
更快的方法是使用 Value2,例如:var range = xlWorksheet.Range["A3", "B4"].Value2;
(get_Range() 不适用于我的 Excel)
并迭代它,填充数据表。range[1,1]
在此示例中将是 A3 的内容。