循环在excel的数据行列表中

时间:2016-05-09 01:09:20

标签: c# excel

我有一个控制台应用程序,可以从Web服务中检索数据。它会在excel文件上写入响应。我的逻辑很好,有一个数据行,但如果它不止一个,则需要正确写入excel文件。

int i = 0;
int j = 0;
int k = 0;

foreach (var response in responseList)
{
dt = response;
    for (i = 0; i <= dt.Rows.Count - 1; i++)
    {
        for (j = 0; j <= dt.Columns.Count - 1; j++)
        {
            xlWorkSheet.Cells[i + 1, j + 1] = dt.Rows[i].ItemArray[j].ToString();
        }
    }
}

我对此代码的问题是正在编写的excel行总是相同的。

示例:第一个响应有20行,第二个响应有10行。但是在循环之后,我的excel只生成了20行。似乎并非所有数据都没有被写入。有什么想法吗?

修改

我尝试了下面的代码,但仍然没有运气。

int jOffset = 0;
int iOffset = 0;

foreach (var response in responseList)
{
    dt = response;
    for (i = 0; i <= dt.Rows.Count - 1; i++)
    {
        for (j = 0; j <= dt.Columns.Count - 1; j++)
        {
            xlWorkSheet.Cells[i + iOffset + 1, j + jOffset + 1] = dt.Rows[i].ItemArray[j].ToString();
        }
    }
    jOffset++;
    iOffset++;
}

1 个答案:

答案 0 :(得分:0)

试试这个......

class YourClass
{
    //rowOffset as field
    int rowOffset = 0;

    void YourMethod()
    {
        //... your other codes here

        int i = 0;
        int j = 0;
        int k = 0;

        dt = response;
        for (i = 0; i <= dt.Rows.Count - 1; i++)
        {
            for (j = 0; j <= dt.Columns.Count - 1; j++)
            {
                xlWorkSheet.Cells[i + iOffset + 1, j + 1] = dt.Rows[i].ItemArray[j].ToString();

            }
        }
        rowOffset += i; //the last 'i' (row) recorded will now be added to your row offset

        //...
    }
}

基本上,您只需要一个rowOffset,您应该将其存储为field以保留其值。然后,在通过loop完成一个response之后,将最后i(行#)添加到rowOffset,这将是后续循环的偏移。< / p>

编辑:对rowOffset进行修正+ = i