1
所以我想讀取一個excel文件並將數據插入到類屬性中。我認爲這是一個問題時,我instanitae類,但是我做這件事之前,我解析並將值添加到類。數據綁定返回空值
一旦解析完成 - 我調用綁定類,但它返回空值。
號呼叫
TestData td = new TestData();
XLReader.GetClassFromExcel<TestData>(1,1,1);
var ddddd = td.Title; //this is null.
的Class
public class TestData
{
public string Title { get; set; }
public string Site { get; set; }
public string StartDate { get; set; }
public string EndDate { get; set; }
public string Email { get; set; }
public string OrderRef { get; set; }
public string ReqBy { get; set; }
public string ApprovedBy { get; set; }
}
的Excel的
public static class XLReader
{
/// <summary>
/// The deployment files folder name
/// </summary>
private static readonly string deploymentFilesFolderName =
Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
public static List<T> GetClassFromExcel<T>(int fromRow, int fromColumn, int toColumn = 0)
{
var path = Path.Combine(deploymentFilesFolderName, @"Tools\TestData.xlsx");
List<T> retList = new List<T>();
using (var pck = new ExcelPackage())
{
using (var stream = File.OpenRead(path))
{
pck.Load(stream);
}
//Retrieve first Worksheet
var ws = pck.Workbook.Worksheets.First();
//If the to column is empty or 0, then make the tocolumn to the count of the properties
//Of the class object inserted
toColumn = toColumn == 0 ? typeof(T).GetProperties().Count() : toColumn;
//Read the first Row for the column names and place into a list so that
//it can be used as reference to properties
List<string> columnNames = new List<string>();
// wsRow = ws.Row(0);
foreach (var cell in ws.Cells[1, 1, 1, ws.Cells.Count()])
{
columnNames.Add(cell.Value.ToString());
}
//Loop through the rows of the excel sheet
for (var rowNum = fromRow; rowNum <= ws.Dimension.End.Row; rowNum++)
{
//create a instance of T
T objT = Activator.CreateInstance<T>();
//Retrieve the type of T
Type myType = typeof(T);
//Get all the properties associated with T
PropertyInfo[] myProp = myType.GetProperties();
var wsRow = ws.Cells[rowNum, fromColumn, rowNum, ws.Cells.Count()];
foreach (var propertyInfo in myProp)
{
if (columnNames.Contains(propertyInfo.Name))
{
int position = columnNames.IndexOf(propertyInfo.Name);
//To prevent an exception cast the value to the type of the property.
var blah = Convert.ChangeType(wsRow[rowNum, position + 1].Value, propertyInfo.PropertyType);
propertyInfo.SetValue(objT,blah);
}
}
retList.Add(objT);
}
}
return retList;
}
}
'變種TD = XLReader.GetClassFromExcel(1,1,1)[0];' –
由於@KooKiz,工程。對我來說,下一步是如何在類中獲取數據,所以無論何時我調用TestData()。Site(在任何其他類中)它都會返回數據? –
難道你只是'td.Site'來獲取數據嗎? – Ernie