【问题标题】:LinqToExcel Header MappingLinqToExcel 标题映射
【发布时间】:2016-08-04 19:30:51
【问题描述】:

我正在使用 LinqToExcel 来获取 excel 文件的内容。 使用像下面这样的标题映射类,我可以将我的类的属性映射到 excel 中的列:

public class Transaction
{
    [ExcelColumn("Trans Id")]
    public string TradeNumber { get; set; }

    [ExcelColumn("Trans Version")]
    public string TransVersion { get; set; }
}

但是,有时传入的文件有不同的标题,例如有时它有标题“Trans Id”有时它有“Trans ID”,当标题为“Trans ID”时程序无法转换列

有没有办法让 LinqToExcel 在不区分大小写的模式下比较列名? 或者有地方让我重写一下LinqToExcel的比较方法。

谢谢!

【问题讨论】:

标签: c# linq-to-excel


【解决方案1】:

我尝试使用

public void AddTransformation<TSheetData>(Expression<Func<TSheetData, object>> property, Func<string, object> transformation); 

库的一部分,但只处理值,而不是列名。

不确定这是否是最好的解决方案,但它对我有用。我试图找到类似的方法,但如果你无法控制这样的列名

//Get the Header information
//Worksheet title
//List of Columns (can narrow down if you always know the placement)
ExcelQueryFactory HeaderInfo = new ExcelQueryFactory("FILE NAME.xlsx");
List<string> worksheetName = HeaderInfo.GetWorksheetNames().ToList();
IEnumerable<string> columnNames = HeaderInfo.GetColumnNames(worksheetName[0].ToString());

//Get those values that you're looking for.  Pulling in the unedited Excel column name
string TradeNumber_HeaderName = columnNames.Where(a => a.ToUpper().Trim() == "TRANS ID" || a => a.ToUpper().Trim() == "TRANSID").FirstOrDefault() ?? "Trans ID";
string TransVersion_HeaderName = columnNames.Where(a => a.ToUpper().Trim() == "TRANS VERSION").FirstOrDefault() ?? "Trans Version";

//Whatever your new connection is now to , and this will use that column value dynamically.
ExcelQueryFactory ExcelConn = ...
ExcelConn.AddMapping<Transaction>(x => x.TradeNumber, TradeNumber_HeaderName);
ExcelConn.AddMapping<Transaction>(x => x.TransVersion, TransVersion_HeaderName);

【讨论】:

    【解决方案2】:

    您可以自己定义映射:

    var excelFile = new ExcelQueryFactory(pathToExcelFile);    
    excelFile.AddMapping("Trans Id", "Trans ID");
    

    这只是一个建议,您必须为每个场景创建一个映射......呃。

    让我们知道 AddMapping 是否适合您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 1970-01-01
      • 1970-01-01
      • 2015-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多