如何在C#中将对象[,]转换为数据表

时间:2014-09-11 07:48:00

标签: c# winforms excel casting

我正在使用 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;
    }

1 个答案:

答案 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());