我有一个控制台应用程序,可以从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++;
}
答案 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