gpt4 book ai didi

c# - 通过反射读取 Excel 到类

转载 作者:行者123 更新时间:2023-12-04 20:06:50 24 4
gpt4 key购买 nike

我似乎找不到这样的东西,但如果我错过了,请链接。

我正在尝试从 Excel 电子表格 (xlsx) 导入大量数据。对于每一行,我想创建一个 List(MyClass),其中 MyClass 有一个键/值对属性。对于每一列,我想用 Name = [Column Name], Value = [Column Value] 填充 MyClass。

我开始使用 OLEDB 将电子表格中的数据提取到 DataTable 中,但我不确定这是否是最好的阅读器。电子表格可能有超过 50,000 行,所以我需要考虑速度/性能。

到目前为止,这就是我所拥有的,我想不出如何用列数据填充 MyClass 。

var fileName = string.Format("C:/HAM.xlsx");
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", fileName);

var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "hardcatAssets");

var data = ds.Tables["hardcatAssets"].AsEnumerable();

foreach(var row in data)
{
List<MyClass> assets = new List<MyClass>();
// Do I need another foreach on row.columns?, and then add to assets.
}

我的课
public class MyClass
{
public string AssetCode { get; set; }

public string Barcode { get; set; }

public string Description { get; set; }

public string RFIDTag { get; set; }
}

电子表格
Columns: "Asset Code", "Barcode", "Description", "RFID Tag"

我已经更新了我原来的问题,因为我改变了我想要存储每一行​​的对象的结构。我将在下面发布我所做的作为答案。

最佳答案

这是我在下面的答案,它允许我将电子表格的每一行捕获到一个对象中,该对象具有与电子表格列同名的属性(单词之间的减去空格)。

List<MyClass> assets = new List<MyClass>();
var fileName = string.Format("C:\\HAM.xlsx");
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0}; Extended Properties=Excel 12.0;", fileName);

var adapter = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", connectionString);
var ds = new DataSet();

adapter.Fill(ds, "hardcatAssets");
DataTable data = ds.Tables["hardcatAssets"];

foreach (DataRow row in data.Rows)
{
MyClass asset = new MyClass();

foreach(PropertyInfo pinfo in asset.GetType().GetProperties())
{
pinfo.SetValue(asset, row.Field<string>(this.SplitCamelCase(pinfo.Name)));
}

assets.Add(asset);
}

return assets;

我需要添加 SplitCamelCase 以在反射中使用,以将类属性名称与电子表格列名称匹配。这种方法本质上是在 CamelCased 单词之间添加空格。发现于 Insert spaces between words on a camel-cased token .

关于c# - 通过反射读取 Excel 到类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21706911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com