LinqToExcel returns 空
LinqToExcel returns null
我有一个 excel sheet 的 xls 格式,我正在使用 LinqToExcel 读取它,然后将其导入我的数据库。
这个 sheet 由大约 3K 行和只有 6 列组成。我正在使用 .addmapping 将我的 class 属性映射到列名
我遇到的问题是:尽管单元格中有数据,但列 "web-code" 的单元格有时返回为空。
这是一个空的示例数据!
我的代码手表
这是一个数据正确的示例数据:
我的代码观察
我已经尝试应用 ExcelColumn 属性进行映射,但没有成功!
代码:
var factory = new ExcelQueryFactory(_excelFilePath);
factory.AddMapping<ExcelPriceEntity>(x => x.WebCode, "WEB-CODE");
factory.AddMapping<ExcelPriceEntity>(x => x.Type, "TYPE");
factory.AddMapping<ExcelPriceEntity>(x => x.Style, "STYLE");
factory.AddMapping<ExcelPriceEntity>(x => x.Qty, "QTY");
factory.AddMapping<ExcelPriceEntity>(x => x.UnitPrice, "Unit Price");
factory.AddMapping<ExcelPriceEntity>(x => x.Bucket, "WEBCODE W/BUCKET");
factory.StrictMapping = StrictMappingType.ClassStrict;
factory.TrimSpaces = TrimSpacesType.Both;
factory.ReadOnly = true;
var prices = factory.Worksheet<ExcelPriceEntity>(_allPricesSheetName).ToList();
var priccerNP = prices.Where(p => p.Type.Contains("900 ARROW TAPE")).ToList();
我的 PriceEntity Class:
public class ExcelPriceEntity
{
//[ExcelColumn("TYPE")]
public string Type { get; set; }
public string WebCode { get; set; }
//[ExcelColumn("STYLE")]
public string Style { get; set; }
//[ExcelColumn("QTY")]
public string Qty { get; set; }
//[ExcelColumn("Unit Price")]
public string UnitPrice { get; set; }
//[ExcelColumn("WEBCODE W/BUCKET")]
public string Bucket { get; set; }
}
这里的 Contains 不像 string contains。它将单元格值列表与您在 contains 方法中给出的确切值进行比较。只需尝试使用全文“900 AMMONIA STOCK OR CUST...)
替代解决方案:
我最终将 excel sheet 保存为 csv 文件,然后导入到 SQL table.Then 我使用 linq-to-sql 读取数据。
根本原因:
经过研究,我发现问题是该列(网络代码)的第一个单元格是整数,excel 试图通过查看第一行来找出该列的数据类型!
因此(网络代码)列的下一行是一些文本数据。所以excel无法将其解析为整数,并为其分配空值!
我可以做的是,将文本值赋给第一个单元格,这样 excel 就会猜测数据类型为字符串。但我没有测试那个。对于阅读此答案的任何人,如果您遇到相同的问题,请尝试在第一行输入文本值
@alsafoo 的另一种替代解决方案是将列从 "general" 转换为 "text"。
步骤如下:
1. 右击列中的任意单元格。
2. 在数字选项卡中,select 文本。
3. Select格式化单元格
4. 按确定。
之后,库将读取所有值作为字符串。
我有一个 excel sheet 的 xls 格式,我正在使用 LinqToExcel 读取它,然后将其导入我的数据库。
这个 sheet 由大约 3K 行和只有 6 列组成。我正在使用 .addmapping 将我的 class 属性映射到列名
我遇到的问题是:尽管单元格中有数据,但列 "web-code" 的单元格有时返回为空。
这是一个空的示例数据!
我的代码手表
这是一个数据正确的示例数据:
我的代码观察
我已经尝试应用 ExcelColumn 属性进行映射,但没有成功!
代码:
var factory = new ExcelQueryFactory(_excelFilePath);
factory.AddMapping<ExcelPriceEntity>(x => x.WebCode, "WEB-CODE");
factory.AddMapping<ExcelPriceEntity>(x => x.Type, "TYPE");
factory.AddMapping<ExcelPriceEntity>(x => x.Style, "STYLE");
factory.AddMapping<ExcelPriceEntity>(x => x.Qty, "QTY");
factory.AddMapping<ExcelPriceEntity>(x => x.UnitPrice, "Unit Price");
factory.AddMapping<ExcelPriceEntity>(x => x.Bucket, "WEBCODE W/BUCKET");
factory.StrictMapping = StrictMappingType.ClassStrict;
factory.TrimSpaces = TrimSpacesType.Both;
factory.ReadOnly = true;
var prices = factory.Worksheet<ExcelPriceEntity>(_allPricesSheetName).ToList();
var priccerNP = prices.Where(p => p.Type.Contains("900 ARROW TAPE")).ToList();
我的 PriceEntity Class:
public class ExcelPriceEntity
{
//[ExcelColumn("TYPE")]
public string Type { get; set; }
public string WebCode { get; set; }
//[ExcelColumn("STYLE")]
public string Style { get; set; }
//[ExcelColumn("QTY")]
public string Qty { get; set; }
//[ExcelColumn("Unit Price")]
public string UnitPrice { get; set; }
//[ExcelColumn("WEBCODE W/BUCKET")]
public string Bucket { get; set; }
}
这里的 Contains 不像 string contains。它将单元格值列表与您在 contains 方法中给出的确切值进行比较。只需尝试使用全文“900 AMMONIA STOCK OR CUST...)
替代解决方案: 我最终将 excel sheet 保存为 csv 文件,然后导入到 SQL table.Then 我使用 linq-to-sql 读取数据。
根本原因: 经过研究,我发现问题是该列(网络代码)的第一个单元格是整数,excel 试图通过查看第一行来找出该列的数据类型!
因此(网络代码)列的下一行是一些文本数据。所以excel无法将其解析为整数,并为其分配空值!
我可以做的是,将文本值赋给第一个单元格,这样 excel 就会猜测数据类型为字符串。但我没有测试那个。对于阅读此答案的任何人,如果您遇到相同的问题,请尝试在第一行输入文本值
@alsafoo 的另一种替代解决方案是将列从 "general" 转换为 "text"。
步骤如下: 1. 右击列中的任意单元格。 2. 在数字选项卡中,select 文本。 3. Select格式化单元格 4. 按确定。
之后,库将读取所有值作为字符串。