2016-02-17 36 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'包含多个项目吗? –