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

C# 如何在C中将对象[,]转换为数据表#,c#,winforms,excel,casting,C#,Winforms,Excel,Casting,我正在使用互操作库从excel文件读取数据。我能够连接到excel并从中读取数据 我将返回类型设置为对象[,]。我不确定它具体说明了什么。我知道object[]是一个对象数组 不确定对象[,]。我试着用谷歌搜索,但没有找到任何有用的解释 此外,我想将其转换为datatable,并将其绑定到winforms中的数据网格视图 我们需要在绑定之前将上述数组转换为datatable,还是有其他方法将其绑定到网格? 请给我一些想法让我清醒一下 请查找以下代码: void ReadSheetData(str

我正在使用互操作库从excel文件读取数据。我能够连接到excel并从中读取数据

我将返回类型设置为对象[,]。我不确定它具体说明了什么。我知道object[]是一个对象数组

不确定
对象[,]
。我试着用谷歌搜索,但没有找到任何有用的解释

此外,我想将其转换为datatable,并将其绑定到winforms中的数据网格视图

我们需要在绑定之前将上述数组转换为datatable,还是有其他方法将其绑定到网格?

请给我一些想法让我清醒一下

请查找以下代码:

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;
    }
void ReadSheetData(字符串strFilePath)
{
工作簿工作簿=_excelApp.Workbooks.Open(strFilePath,
类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,
类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,
类型。缺失,类型。缺失,类型。缺失,类型。缺失,类型。缺失,
类型。缺失,类型。缺失);
int numSheets=workBook.Sheets.Count;
对于(int sheetNum=1;sheetNum
您可以使用第一个索引和第二个索引数组长度枚举行和列

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

使用EPPLUS该库是免费的,可以读/写xlsx文件,比互操作快很多,更稳定,转换为数据表是简单的命令ToDataTable().是的..你是对的..我们希望没有外部依赖性..这就是不使用oledb连接的原因,或者根据我的个人经验,经常使用reading EXCLE和import data。建议通过创建一种表示Excel记录的类来解决此问题,加载一个数据数组。当你有一个数据数组时,你可以做你想做的事情。如果您愿意,我会像我所做的那样将您放入解决方案中。对于excel中可以显示的数据类型没有任何限制。因此,它必须是动态的,并且应该接受任何excel表格。我不知道要创建什么类,因为我不知道数据库中的数据excel@SaiAvinashExcel是一个外部依赖项,也是一个相当重的依赖项。此外,您无法真正将excel控制到所需的程度。可能未安装,可能安装了行为不同的旧/新版本。可能是由于某种原因(不受信任的网络共享上创建安全对话框的文件?)错误5“System.Collections.Generic.IEnumerable”不包含“Select”和“System.Linq.Enumerable.Select”的最佳扩展方法重载的定义(System.Collections.Generic.IEnumerable,System.Func)“有一些是无效的arguments@SaiAvinash,我刚刚意识到我正在使用扩展方法
Each
,我刚刚将其更改为使用foreach,它现在应该可以工作了,但仍然存在一些问题。我可以看到整张桌子上都摆满了相同的数值。这是我的错误。它现在工作得很好。日期字段将转换为浮点值。有什么建议吗?非常感谢。