【问题标题】:Interop - Setting a range for an Excel chart to an entire row互操作 - 将 Excel 图表的范围设置为整行
【发布时间】:2013-04-02 20:28:23
【问题描述】:

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

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

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

现在,我正在这样做:

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

xlExcel.ActiveChart.SetSourceData(range);

如果您只有三个 Persons,这将非常有用,但我需要访问整行数据。

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


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

【问题讨论】:

标签: c# excel interop


【解决方案1】:
var range = worksheet.get_range("A1").CurrentRegion;

xlExcel.ActiveChart.SetSourceData(range);

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

这将选择 A1 周围已填充的单元格,我相信这就是您要查找的内容。

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

【讨论】:

  • 是的! +1 为简单起见。谢谢!
  • @JordanCarroll:谢谢。我很高兴能帮上忙。
【解决方案2】:

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

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

添加代码

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

【讨论】:

    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多