我正在使用 Interop lib从excel文件中读取数据。我能够连接到excel并从中读取数据。
我将返回类型作为对象[,]。我不确定它究竟指明了什么。我知道object []是一个对象数组。
不确定object[,]
。我试过谷歌搜索,但没有找到任何有用的解释。
此外,我想将其转换为datatable并将其绑定到winforms中的数据网格视图。
我们是否需要在绑定之前将上面的数组转换为数据表,还是有其他方法将其绑定到网格?
请给我一些想法让自己抬起头来。
请在下面找到代码:
void ReadSheetData(string strFilePath)
{
Workbook workBook = _excelApp.Workbooks.Open(strFilePath,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Type.Missing,
Type.Missing, Type.Missing);
int numSheets = workBook.Sheets.Count;
for (int sheetNum = 1; sheetNum < numSheets + 1; sheetNum++)
{
Worksheet sheet = (Worksheet)workBook.Sheets[sheetNum];
Range excelRange = sheet.UsedRange;
object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault);
PrepareData(valueArray);
}
}
System.Data.DataTable PrepareData(object[,] valueArray)
{
System.Data.DataTable dtTemp = new System.Data.DataTable();
dtTemp=????? // How to convert object[,] to datatable
return dtTemp;
}
答案 0 :(得分:1)
您可以使用第一个索引和第二个索引数组长度来枚举行和列。
var rowCount = valueArray.GetLength(0);
var columnCount = valueArray.GetLength(1);
var dtTemp = new DataTable();
foreach(var c in Enumerable.Range(1, columnCount))
dtTemp.Columns.Add();
foreach (var r in Enumerable.Range(1, rowCount))
dtTemp.Rows.Add(Enumerable.Range(1, columnCount)
.Select(c => valueArray[r - 1, c - 1]).ToArray());