Interop - 将Excel图表的范围设置为整行

时间:2013-03-20 18:32:39

标签: c# excel interop

如何将excel互操作图表的源数据设置为几个整行?

我有一个由我的程序创建的.csv文件,用于显示生成的一些结果。为了简单起见,我们假设这些结果和图表显示如下:(这正是我想要的那样)

enter image description here

现在我遇到的问题是人数是多变的。所以我真的需要访问整行数据。

现在,我这样做:

var range = worksheet.get_range("A1","D3");

xlExcel.ActiveChart.SetSourceData(range);

如果您只有三个Persons,这会很有效,但我需要访问整行数据。

所以要重述我的问题,如何将我的图表的源数据设置为几个整行?


我尝试查看here,但似乎无法使用行而不是列。

4 个答案:

答案 0 :(得分:3)

var range = worksheet.get_range("A1").CurrentRegion;

xlExcel.ActiveChart.SetSourceData(range);

编辑:我假设数据区域中的单元格不是空白的 为了测试这一点,
1)将光标放在单元格A1上 2)按 F5
3)点击“特殊”
4)选择“当前区域”作为选项
5)单击“确定”

这将选择填充的A1周围的单元格,我相信这正是您要找的。

VBA代码中的转换指向CurrentRegion属性。我认为,这应该有用。

答案 1 :(得分:0)

签出选项Range.EntireRow我不是100%关于如何将其扩展到包含3个整行的单个范围,但它应该不难实现。

您可以做的另一件事是扫描以获得您需要的实际最大列索引(假设名称中没有间隙),然后在声明范围时使用该索引。

添加代码

int c = 2;//column b
while(true)
{
    if (String.IsNullOrEmpty(worksheet.GetRange(1,c).Value2))
    {
        c--;
        break;
    }
    c++;
}

答案 2 :(得分:0)

从A到D取一列您确定没有空单元格。

执行一些循环以找到该列中的第一个空循环,它将是最后一个循环。

Range Cell = SHeet.Range["A1"]; //or another column you're sure there's no empty data

int LineOffset = 0;

 while (Cell.Offset[LineOffset, 0].Value != "")  //maybe you should cast the left side to string, not sure.
{
 LineOffset++;
}

int LastLine = LineOffset - 1;

然后你可以得到Range [Sheet.Cells [1,1],Sheet.Cells [LastLine,4]]

答案 3 :(得分:0)

此处开箱即用,但为何不转置数据?名称,高度,重量的三列。将其从普通范围转换为表格。

当任何公式(包括图表的SERIES公式引用表的列)时,无论表格获得多长时间,它始终引用该列。添加另一个人(另一行),图表显示添加的人员的数据。删除一些人,图表调整后不会留下空白。

我的教程Easy Dynamic Charts Using Lists or Tables中说明了这一点。