Linq excel无法在excel中find列

我正在使用Linq到Excel库来获取excel表格中的一个,我遇到的问题是,我的电话不能find指定名称的列。

public IQueryable<Cell> getExcel() { var excel = new ExcelQueryFactory(); excel.FileName = @"C:\Users\Timsen\Desktop\QUOTATION.CSV"; var indianaCompanies = from c in excel.Worksheet() select c["ARTICLE TEXT"]; return indianaCompanies; } 

错误:

有效的列名是'QUOT NO; DEBTOR; ITEM; ART NO; HWS NO#; BRANCH PRICE; QTY; PR; ARTICLE T',' F2','F3','F4','F5'“}

Excell中表的名称

QUOT

没有

债务人

项目

艺术

没有

HWS

没有。

分支价格

QTY

PR

文章

types名称

销售价格

QT%

DIS

UNI

ARTG

SUPPL

义务

Excel的UPDAte示例: 在这里输入图像说明

你能告诉我们的第一行或两个csv文件?

如果我正确地解释错误信息,标题行有分号而不是逗号分隔符。

具体来说,错误消息似乎列出这些列名称(请注意,它使用单引号和逗号来尝试清除,这似乎很有用)。

  1. 'QUOT NO; DEBTOR; ITEM; ART NO; HWS NO#; BRANCH PRICE; QTY; PR; ARTICLE T'
  2. 'F2'
  3. 'F3'
  4. 'F4'
  5. 'F5'

由于第一列名称是64个字符,因此我假定在这一点上切断了,如果这个限制没有到位,那么其余的列也将在那里(仍以分号分隔)。

不能确定,如果你可以用linq-to-excel项目指定一个不同的分隔符,因为它似乎使用Jet作为csv文件,按照https://github.com/paulyoder/LinqToExcel/blob/792e0807b2cf2cb6b74f55565ad700d2fcf31e19 /src/LinqToExcel/Query/ExcelUtilities.cs

如果使它成为一个“真正的”csv不是一个选项,库不支持指定一个替代的分隔符,你可能只能通过检查文件中的行(除了第一个)和拉在第十二列(因为这似乎是文章的文字)。

所以,像这样的:

 var articleTextValues = // Skip(1) since we don't want the header from line in File.ReadAllLines(@"C:\Users\Timsen\Desktop\QUOTATION.CSV").Skip(1) select line.Split(';')[11]; 

将您的代码更改为:

 public IQueryable<Cell> getExcel() { var excel = new ExcelQueryFactory(); excel.FileName = @"C:\Users\Timsen\Desktop\QUOTATION.CSV"; var indianaCompanies = from c in excel.Worksheet() select c["ARTICLE T"]; return indianaCompanies; } 

它列出了有效的列名称。 对于由QTY; PR所指示的列的一些标题有问题; 意味着它parsing了两个不同的列而不是一个。 F2表示它不知道实际上应该调用的标题。

最简单的解决scheme是validation正在导入到以下查询匹配您的Excel文档的数据。

 var indianaCompanies = from c in excel.Worksheet() select *; 

我相信会起作用。