从c#导出时Excel图表不绑定

时间:2017-12-08 09:55:12

标签: c# excel winforms interop

我正在进行批量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;

enter image description here

2 个答案:

答案 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模板中添加了我需要的格式。我将数字列更改为数字格式和日期。酷对我有用。