我正在进行批量excel导出操作,在那个excel我有一个图表,图表应该根据导出的数据进行绑定。但是数据在excel中作为字符串插入。它是一个动态导出我在一个excel文件中有超过10张,我使用一种常用方法进行所有操作。所以我的整个数据被视为字符串。我无法转换int因为它的动态。
int rCnt;
int cCnt;
int rw = 0;
int cl = 0;
// Fill The Report Content Data Here
rw = dtblData.Rows.Count;
cl = dtblData.Columns.Count;
string[,] data = new string[rw, cl];
for (var row = 1; row <= rw; row++)
{
for (var column = 1; column <= cl; column++)
{
data[row - 1, column - 1] = dtblData.Rows[row - 1][column - 1].ToString();
}
}
Excel.Range endRange = (Excel.Range)xlWorkSheet.Cells[rw + (startrange.Cells.Row - 1), cl + (startrange.Cells.Column - 1)];
Excel.Range writeRange = xlWorkSheet.Range[startrange, endRange];
writeRange.WrapText = true;
writeRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous;
writeRange.Value2 = data;
data = null;
startrange = null;
endRange = null;
writeRange = null;
答案 0 :(得分:0)
之所以发生这种情况,是因为您使用string
类型的数组而不是int
来计算&#34; Count&#34;列,一种方法是使用强类型对象(在示例中它是一个表示数据对象的结构列表)来保存数据,然后将其填充到excel工作表中:
List<dataObj> data = new List<dataObj>();
for (var row = 1; row <= rw; row++)
{
for (var column = 1; column <= cl; column++)
{
dataObj d = new dataObj();
d.DeniedSourceIp = dtblData.Rows[row - 1]["YourColNameOfDeniedSourceIp"].ToString();
d.Count = int.Parse(dtblData.Rows[row - 1]["YourColNameOfCount"].ToString());
data.Add(d);
}
}
struct dataObj
{
public string DeniedSourceIp { get; set; }
public int Count { get; set; }
}
比通过范围循环并注入数据。
另外,如果你的数据表是强类型的,为什么要使用数组/对象列表(?),你可以直接从数据表中将数据注入excel工作表,你不必使用Range
你可以这样做:
xlWorkSheet.Cells[i, j] = "somevalue";
答案 1 :(得分:0)
经过一些研究后,我发现了适当的解决方案。我在分配数据后添加了以下代码行。
writeRange.Value2 = data;
writeRange.Formula = writeRange.Formula;
在此之前,我在excel模板中添加了我需要的格式。我将数字列更改为数字格式和日期。酷对我有用。