2013-03-20 51 views
0

如何将excel互操作图表的源数据设置为多行?Interop - 将Excel图表的范围设置为整行

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

enter image description here

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

现在,我这样做:

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

xlExcel.ActiveChart.SetSourceData(range); 

这个伟大的工程,如果你只有三个Persons,但我需要访问数据的整行。

因此,要重申我的问题,如何将我的图表的源数据设置为几个完整的行?


我试图寻找here,可就是不能做与行而不是列的工作。

+0

试试这个链接它实际上谈论'行'http://stackoverflow.com/questions/12363163/fastest-way-to-get-an-excel-range-of-rows – MethodMan 2013-03-20 18:45:13

+1

@Jordan:看看' CurrentRegion属性有助于解释如下。 – shahkalpesh 2013-03-20 18:52:07

回答

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

xlExcel.ActiveChart.SetSourceData(range); 

编辑:我假设细胞,在数据区域不会是空白的。
要进行测试,
1)电池放置光标A1
2)按F5
3)点击 “特殊”
4)选择 “当前区域” 选项
5)单击“OK “

这将选择周围的A1填充的细胞,我相信你正在寻找。

在VBA代码中的翻译指向CurrentRegion属性。我认为,这应该起作用。

+0

是的!为简单起见+1。谢谢! – 2013-03-20 18:53:33

+0

@JordanCarroll:谢谢。我很高兴能够有所帮助。 – shahkalpesh 2013-03-20 18:55:11

+0

你每天都会学到新的东西。很酷。 – Nevyn 2013-03-20 19:59:49

0

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

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

添加代码

int c = 2;//column b 
while(true) 
{ 
    if (String.IsNullOrEmpty(worksheet.GetRange(1,c).Value2)) 
    { 
     c--; 
     break; 
    } 
    c++; 
} 
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; 

然后你就可以得到范围[Sheet.Cells [1,1],Sheet.Cells [lastLine所,4]

0

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

当任何公式(包括图表的SERIES公式引用表的列)时,无论表获得多长时间,它总是引用该列。添加另一个人(另一行),图表显示添加人员的数据。移除几个人,最后调整图表而不留空白。

这在我的教程Easy Dynamic Charts Using Lists or Tables中进行了说明。