2016-02-17 41 views
1

我目前正在從網頁中選擇HTML表格數據,並存儲任何包含錨定標記的內容,然後導出該列表以顯示在Excel中。C#解析列表數據到excel

我遇到的問題是我無法在Excel中正確顯示它。 列表確實包含正確的數據,但在Excel中它只顯示列表中的最後一項(似乎它每次遍歷列表時重寫)。

列表(cellList)是包含正確數據的列表,嘗試了很多不同的變化,試圖讓它正確顯示,但似乎無法確定爲什麼下面的工作不正常。

我已經使用了或多或少相同的foreach代碼來顯示從SQL數據列表到excel以相同的方式。

任何幫助,或指導將不勝感激。

HtmlTable tabletest = ActiveBrowser.Find.ById<HtmlTable>("MainContent_ucLicensees_gviGeneric"); 
IList<HtmlAnchor> myList = tabletest.Find.AllByTagName<HtmlAnchor>("a"); 

foreach (HtmlAnchor item in myList) 
{ 
    string celltext = item.InnerText.ToString(); 
    List<string> cellList = new List<string>(); 
    cellList.Add(celltext); 

    int row = 2; 
    int col = 2; 
    foreach (var cellitem in cellList) 
    { 
     excelApp.Cells[row, col] = cellitem; 
     row++; 
     if (cellList.IndexOf(cellitem) == cellList.Count - 1) 
     { 
      col = 2; 
     } 
    } 
} 
+0

該列表將如何產生多列數據?只有一個列表,不應該產生一個列?我沒有看到'cellList'列表和第二個循環的需要。看起來你應該只循環一次,並且每次只增加行號。 –

+0

正確,上面的代碼只有1列(其他列由另一個列表創建,但顯示正確)。當我嘗試只顯示「myList」列表時,我不能顯示它裏面的實際項目,它只會顯示像HtmlAnchor引用(HtmlAnchor:),只有當我顯示第二個列表(cellList),我可以看到正確的數據。 – Ian

回答

0

看來,你應該只循環一次,簡單地增加行數每一次。像這樣的東西應該工作:

int row = 2; //Should this be 1? 
int col = 2; //Should this be 1? 

foreach (HtmlAnchor item in myList) 
{ 
    string celltext = item.InnerText.ToString(); 

    excelApp.Cells[row, col] = celltext; 

    row++; 
} 
+0

上面不幸的是,具有相同的問題,它只顯示第一行(第2行)列表中的最後一項。它就像它現在應該在下一行時一樣。也是關於int變量的問題第1行包含標題,第1列包含其他數據是爲什麼row/col = 2 – Ian

+0

您確定每次迭代都會增加「row」嗎? –

+0

另外,你確定'myList'包含多個項目嗎? –