0

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

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

在此处输入图像描述

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

现在,我正在这样做:

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

xlExcel.ActiveChart.SetSourceData(range);

如果你只有三个,这很好用Persons,但我需要访问整行数据。

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


我试着看这里,但似乎无法使用行而不是列。

4

4 回答 4

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

xlExcel.ActiveChart.SetSourceData(range);

EDIT: I am assuming that the cells in the data region won't be blank.
To test this,
1) place cursor on cell A1
2) press F5
3) click on "Special"
4) choose "Current Region" as option
5) click "OK"

This will select the cells surrounding A1 which are filled, which I believe is what you are looking for.

The translation of that in VBA code points to CurrentRegion property. I think, that should work.

于 2013-03-20T18:48:36.710 回答
0

查看选项Range.EntireRow 我不是 100% 了解如何将其扩展到包含 3 个整行的单个范围,但实现起来应该不难。

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

添加代码

int c = 2;//column b
while(true)
{
    if (String.IsNullOrEmpty(worksheet.GetRange(1,c).Value2))
    {
        c--;
        break;
    }
    c++;
}
于 2013-03-20T18:45:18.937 回答
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]]

于 2013-03-20T18:48:22.453 回答
0

Out of the box here, but why not transpose the data? Three columns for Name, Height, Weight. Convert this from an ordinary range to a Table.

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

这在我的教程“使用列表或表格的简单动态图表”中进行了说明。

于 2013-04-02T12:28:23.077 回答