C# 互操作-将Excel图表的范围设置为整行

C# 互操作-将Excel图表的范围设置为整行,c#,excel,interop,C#,Excel,Interop,如何将excel互操作图表的源数据设置为整行 我有一个.csv文件,该文件由我的程序创建,用于显示生成的一些结果。为了简单起见,假设这些结果和图表是这样显示的:(这正是我想要的) 现在我遇到的问题是人数是可变的。所以我真的需要访问整行数据 现在,我正在这样做: var range = worksheet.get_range("A1","D3"); xlExcel.ActiveChart.SetSourceData(range); 如果你只有三个人的话,这很有用,但是我需要访问整行数据 因此

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

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

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

现在,我正在这样做:

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

xlExcel.ActiveChart.SetSourceData(range);
如果你只有三个人的话,这很有用,但是我需要访问整行数据

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



我试图查找,但似乎无法使用行而不是列

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

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

添加代码

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

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

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

添加代码

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

从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]]

从a到D取一列,确保没有空单元格

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

xlExcel.ActiveChart.SetSourceData(range);
执行一些循环以查找该列中的第一个空值,它将是最后一个空值之后的一个空值

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]]

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

xlExcel.ActiveChart.SetSourceData(range);
编辑:我假设数据区域中的单元格不会为空。
要测试这一点,
1) 将光标放在单元格A1上
2) 按F5键
3) 单击“特殊”
4) 选择“当前区域”作为选项
5) 单击“确定”

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

VBA代码中的转换指向
CurrentRegion
属性。我想,这应该行得通

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

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


VBA代码中的转换指向
CurrentRegion
属性。我想,这应该行。

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

当任何公式(包括图表的系列公式)引用表中的一列时,无论该表有多长,它都会引用该列。添加其他人员(另一行),图表将显示添加人员的数据。去掉几个人,图表就会调整,最后不留空格


这在我的教程中有说明,.

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

当任何公式(包括图表的系列公式)引用表中的一列时,无论该表有多长,它都会引用该列。添加其他人员(另一行),图表将显示添加人员的数据。去掉几个人,图表就会调整,最后不留空格


这在我的教程中有说明。

尝试这个链接,它实际上是在谈论
@Jordan:看看
当前区域
属性是否有帮助,如下所述。尝试这个链接,它实际上是在谈论
@Jordan:看看
当前区域
属性是否有帮助,如下所述。是的+1为简单起见。谢谢大家!@乔丹卡罗尔:谢谢。我很高兴能帮上忙。是的+1为简单起见。谢谢大家!@乔丹卡罗尔:谢谢。我很高兴能帮上忙。