Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Linq To excel在excel中找不到列_C#_Linq_Excel - Fatal编程技术网

C# Linq To excel在excel中找不到列

C# Linq To excel在excel中找不到列,c#,linq,excel,C#,Linq,Excel,我正在使用Linq to Excel库来访问一个Excel工作表,我遇到的问题是,我的调用不能用指定的名称填充列 public IQueryable<Cell> getExcel() { var excel = new ExcelQueryFactory(); excel.FileName = @"C:\Users\Timsen\Desktop\QUOTATION.CSV"; var indianaCompanies = fr

我正在使用Linq to Excel库来访问一个Excel工作表,我遇到的问题是,我的调用不能用指定的名称填充列

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;

    }
错误:

基本{System.SystemException}={'ARTICLE TEXT'列名不存在。有效列名为'Quote NO;Debter;ITEM;ART NO;HWS NO;BRANCH PRICE;QTY;PR;ARTICLE T',F2',F3',F4',F5'}

Excel中的表名称

引用

没有

债务人

项目

艺术

没有

硬件

没有

分支机构价格

数量

公关

文章文本

类型名

销售价格

QT%

DIS

数量

统一

B

艺术

供应

职责

Excel的更新示例:
它列出了有效的列名。它与事实数量指示的列的某些标题有问题;公共关系;意味着它解析了两个不同的列,而不是一个。F2表示它不知道实际应该调用什么标头

最简单的解决方案是验证导入以下查询的数据是否与excel文档匹配

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

我相信这会奏效。

将您的代码更改为:

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; 

} 

你能给我们看csv文件的第一行或两行吗

如果我正确解释了错误消息,则标题行中的分隔符用分号代替逗号

具体地说,错误消息似乎将这些列作为列名列出。注意,它使用单引号和逗号来尝试澄清,这似乎很有用

”“没有;债务人项目第1条;卫生福利及食物局;分支机构价格;数量;公共关系;第T条 ‘F2’ “F3” “F4” “F5” 因为第一个列名是64个字符,所以我假设它在该点被截断,如果没有这个限制,其余的列也会在其中,并且仍然以分号分隔

不确定是否可以在linq to excel项目中指定不同的分隔符,因为它似乎使用Jet作为csv文件,如

如果将其设置为“真实”csv不是一个选项,并且库不支持指定备用分隔符,那么您可能只需要通过遍历文件中除第一行之外的所有行并拉出第12列即可获取文章文本,因为这似乎是文章文本

比如说:

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];

文章文本在错误日志中被引用为文章T。你试过了吗?我看得出来,但是怎么解决呢?在Excel中,名称是文章文本,但看起来linqtoexcel只返回部分列文本名称。我熟悉ExelQueryFactory库,但您是否尝试过使用?@AnuragRanjhan-我们能否建议使用JET的解决方案,这些解决方案将来在x64操作系统上不会也无法工作?他应该使用ACE或使用他正在使用的方法。我怀疑他目前的问题是头球值的格式不正确。@Ramhound我不知道JET没有工作。ThanksQTy和PR是我格式化失败的不同列。好吧,它将得到整个工作表,但我如何从文章文本coulmn中提取数据?我希望得到行的实际内容,而不是Excel加载行时的外观。文件实际上是基于文本和逗号分隔的值吗?linq to excel库根据扩展名选择要使用的引擎,因此,如果文件不是实际的csv数据,则需要将其重命名为正确的扩展名,以便库正确处理。因为您可以将文件加载到excel中,要解决此问题,可以使用逗号作为分隔符,将文件从Excel重新保存到“真实”csv文件中。另一种可能性是,您的列表分隔符的区域设置与逗号不同——如果是这样,您可能希望尝试将其更改为逗号足够长的时间,以便将文件内容保存为实际的逗号分隔符。如果这不需要自动化,那么您也可以将文件另存为真正的Excel工作簿并使用它,因为它将完全避免分隔符问题。当他们从CiCS数据库中保存文件时,它将另存为.XLS文件,这会不会是个问题,我必须将文件重新保存为.csv格式?好的,我现在解决了,问题是文件格式。很明显,如果同一个文件和相同的数据是CSV格式的,它会像我一样出现问题。但一旦u将格式类型转换为XLS文件,问题就消失了,一切都很完美!James thatnk为了寻求帮助,你的回答让我找到了正确的方向;