我插入了两个输入数据(例如二月,三月),但结果只显示最后一个输入,即三月中的数据。
在测试代码后,我意识到它只显示最后的输入数据。我该怎么做才能显示所有输入数据呢?
不正确:只显示一个输出:
正确:应显示所有输入数据:
int count = 0;
foreach (DataTable dt in ds.Tables)
{
var ws = wb.Worksheets.Add(dt.TableName);
if (count == 0)
{
string[] columnNames = dt.Columns.Cast<DataColumn>().Select(x => x.ColumnName).ToArray();
string[] rowValue = new string[dt.Rows.Count];
for (int i = 0; i < dt.Rows.Count; i++)
{
rowValue = dt.Rows[i].ItemArray.Select(x => x.ToString()).ToArray();
}
DateTime dttryparse;
for (int i = 0; i < columnNames.Count(); i++)
{
ws.Cell(1, i + 1).SetValue(columnNames[i]);
}
for (int i = 0; i < rowValue.Count(); i++)
{
if (rowValue[i].Contains("$"))
{
ws.Cell(2, i + 1).SetValue(rowValue[i]);
ws.Cell(2, i + 1).Style.NumberFormat.Format = "$ #,##0.00";
ws.Cell(2, i + 1).DataType = XLCellValues.Text;
}
else if (rowValue[i].Contains("%"))
{
ws.Cell(2, i + 1).SetValue(rowValue[i]);
ws.Cell(2, i + 1).DataType = XLCellValues.Text;
ws.Cell(2, i + 1).Style.NumberFormat.Format = "0.0%";
}
else if (DateTime.TryParse(rowValue[i], out dttryparse))
{
ws.Cell(2, i + 1).SetValue(DateTime.Parse(rowValue[i]));
ws.Cell(2, i + 1).DataType = XLCellValues.DateTime;
}
}
ws.Columns().AdjustToContents();
count += 1;
}
else
{
var rowValue = dt.Rows[0].ItemArray.Select(x => x.ToString()).ToArray();
double dbltryparse = 0;
DateTime dttryparse;
for (int i = 0; i < dt.Rows.Count; i++)
{
if (rowValue[i].Contains("$"))
{
ws.Cell(2, i + 1).SetValue(rowValue[i]);
ws.Cell(2, i + 1).Style.NumberFormat.Format = "$ #,##0.00";
ws.Cell(2, i + 1).DataType = XLCellValues.Text;
}
else if (rowValue[i].Contains("%"))
{
ws.Cell(2, i + 1).SetValue(double.Parse(rowValue[i]));
ws.Cell(2, i + 1).DataType = XLCellValues.Text;
ws.Cell(2, i + 1).Style.NumberFormat.Format = "0.0%";
}
else if (DateTime.TryParse(rowValue[i], out dttryparse))
{
ws.Cell(2, i + 1).SetValue(DateTime.Parse(rowValue[i]));
ws.Cell(2, i + 1).DataType = XLCellValues.DateTime;
}
}
ws.Columns().AdjustToContents();
}
}
答案 0 :(得分:3)
此
for (int i = 0; i < dt.Rows.Count; i++)
{
rowValue = dt.Rows[i].ItemArray.Select(x => x.ToString()).ToArray();
}
遍历所有行,提取值,并用下一行值覆盖它们,直到它退出循环时到达最后一行(听起来很熟悉?),让rowValue
包含值最后一行。
如果您使用调试器逐步完成此操作,那将会发生的事情非常明显。