【问题标题】:C# parse list data into excelC#将列表数据解析成excel
【发布时间】:2016-02-17 19:57:01
【问题描述】:

我目前正在从网页中选择 HTML 表格数据,并存储任何包含 Anchor 标记的内容,然后导出该列表以在 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;
        }
    }
}

【问题讨论】:

  • 这个列表如何产生多列数据?只有一个列表,不应该产生一个列吗?我认为不需要cellList 列表和第二个循环。看来你应该只循环一次,每次都简单地增加行号。
  • 正确,它只是上面代码的 1 列(另一个列表创建了其他列,但显示正确)。当我尝试只显示“myList”列表时,我无法让它显示里面的实际项目,它只会显示 HtmlAnchor 引用,如 (HtmlAnchor:),只有当我显示我可以看到正确数据的第二个列表(cellList)。

标签: c# html-table excel-interop


【解决方案1】:

似乎您应该只循环一次,并且每次都简单地增加行号。像这样的东西应该可以工作:

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++;   
}

【讨论】:

  • 不幸的是,上面有同样的问题,它只显示第 1 行(第 2 行)列表中的最后一项。就像它现在应该进入下一行一样。对于关于 int 变量的问题,第 1 行包含标题,第 1 列包含其他数据,这就是为什么 row/col = 2
  • 您确定每次迭代都会增加row
  • 另外,您确定 myList 包含超过 1 个项目吗?
  • int row = 2; int col = 2;是问题!因为我没有将它们移出 foreach 循环代码,所以我将它们移出,就像您在上面所做的那样,它运行良好。感谢您帮助 Yacoub,我不知道为什么将它们放在 foreach 循环中会导致它不起作用,但是吸取了教训!
  • 不客气。如果将它们保留在循环中,则每次迭代时该值将重置为 2,这将导致该值始终写入第 2 行。
猜你喜欢
  • 2021-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-24
  • 2013-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多