2012-02-03 25 views
0

我使用Linq to Excel庫來獲取excel表格中的一個,我遇到的問題是,我的調用不能查找帶有指定名稱的列。Linq 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' 列名不存在有效的列名稱是「QUOT NO;債務人; ITEM; ART NO; HWS NO#; BRANCH價格; QTY; PR; ARTICLE T」, 'F2', 'F3', 'F4', 'F5'「}中的Excell

QUOT

0表

名稱

NO

債務人

ITEM

ART

NO

HWS

NO。

BRANCH PRICE

QTY

PR

ARTICLE TEXT

TYPE NAME

銷售價格

QT%

DIS

AMOUNT

UNI

ARTG

SUPPL

DUTY

的Excel更新樣品: enter image description here

+0

文章正文正在在錯誤日誌,作爲第二十牛逼引用。你嘗試過嗎? – Flowerking 2012-02-03 14:33:26

+0

嗯,我可以看到,但如何解決它?在Excel中名稱是ARTICLE TEXT,但它看起來像linqtoexcel只返回列文本名稱的一部分 – Timsen 2012-02-03 14:35:18

+0

我熟悉'ExelQueryFactory'庫,但您是否嘗試過使用[OledbDataAdapter](http://bloggingabout.net/blogs/dennis/存檔/ 2008/2月29日/獲取數據 - 從 - Excel中最快速的方式 - 使用 - linq.aspx)? – 2012-02-03 14:38:52

回答

1

,你能否告訴我們CSV文件的第一行還是兩個?

如果我正確解釋錯誤信息,標題行用分號代替逗號分隔符。

具體來說,錯誤消息似乎列出這些列名稱(請注意,它使用單引號和逗號來嘗試清除,這似乎很有用)。

  1. 'QUOT NO;債務人; ITEM; ART NO; HWS NO#; BRANCH價格; QTY; PR; ARTICLE T'
  2. 'F2'
  3. 'F3'
  4. 'F4'
  5. 「F5」

由於該第一列名64個字符,我假設它在該點切斷和列的其餘部分將是在那裏以及(靜止分號分隔)如該限制不到位。

不知道離手,如果你可以使用LINQ到Excel項目指定不同的分隔符或沒有,因爲它似乎使用Jet爲CSV文件,按照https://github.com/paulyoder/LinqToExcel/blob/792e0807b2cf2cb6b74f55565ad700d2fcf31e19/src/LinqToExcel/Query/ExcelUtilities.cs

如果使其成爲一個「真正的'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]; 
+0

我用Excel的圖片更新了我的問題 – Timsen 2012-02-05 10:01:13

+0

我一直希望看到這些線條的實際內容,而不是Excel在加載它們時的樣子。該文件實際上是基於文本和逗號分隔的值嗎? linq-to-excel庫選擇要基於擴展名使用的引擎,因此如果該文件不是實際的csv數據,則需要將其重命名爲庫的正確擴展名才能正確處理。 – 2012-02-05 14:02:29

+0

由於您可以將文件加載到Excel中,因此您可以做的一件事就是將文件從Excel重新保存到「真正的」csv文件中(使用逗號作爲分隔符)。另外一種可能性是,你的區域設置與你的列表分隔符的逗號不同 - 如果是這種情況,你可能需要嘗試將它改爲逗號,以便將文件內容保存爲實際的逗號分隔。如果這不需要自動化,那麼您也可以將文件保存爲真正的Excel工作簿並使用它,因爲它可以完全避免分隔符問題。 – 2012-02-05 14:10:13

0

它列出了有效的列名稱。對於由事實QTY; PR指示的列的一些標題有問題;表示它解析了兩個不同的列而不是一個。 F2表示它不知道標題實際上應該被調用的內容。

最簡單的解決方案是驗證導入到以下查詢中的數據是否與您的Excel文檔匹配。

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

我相信會工作。

+0

QTy和PR是不同的列(我在格式化失敗)。以及它會得到整個工作表,但我如何提取僅來自ARTICLE TEXT coulmn的數據? – Timsen 2012-02-03 16:19:24

1

你的代碼改成這樣:

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; 

}