【问题标题】:Add sparklines to excel with matlab使用 matlab 将迷你图添加到 Excel
【发布时间】:2013-08-02 12:59:03
【问题描述】:

使用 MATLAB,我可以启动 COM 服务器并以编程方式写入 Excel 工作簿。但是,我想不出添加迷你图的方法(建议采纳):

% Open new workbook
excel         = actxserver('excel.application');
excel.visible = 1;
wrkbook       = excel.Workbooks.Add();
sheet         = wrkbook.Sheets.Item(1);

% Write some data
sheet.Range('B1:Z1').Value = rand(1,25);

问题来了:

% Add column sparklines to 'A1', type 'xlSparkColumn' and DataSource: 'B1:Z1'
sheet.Range('A1').SparklineGroups.Add('xlSparkColumn','B1:Z1')

我收到以下错误:

Error using Interface.Microsoft_Excel_15.0_Object_Library.SparklineGroups/Add
Error: Object returned error code: 0x800A03EC     

关闭/清理

% Close without saving
wrkbook.Saved = 1;
wrkbook.Close
excel.Quit
delete(excel)

参考SparklineGroup Object (Excel)。我使用的是 win7 64bit、R2013a 和 Excel 2013。

【问题讨论】:

    标签: excel matlab com activex office-interop


    【解决方案1】:

    试试:

    xlSparkColumn = 2;
    sheet.Range('A1').SparklineGroups.Add(xlSparkColumn,'B1:Z1')
    

    以后如果想算出某个常量/枚举的对应值,可以使用theseposts所示的IL DASM工具。


    编辑

    好的,事实证明枚举xlSparkColumn 并不是真正的问题,您可以将其指定为字符串参数或传递枚举的底层整数值。

    您在 cmets 中提到的问题是您设置了 R1C1 reference style 而不是默认的 A1 引用样式,因此您的调用中指定的范围在该格式下无效。

    以下任何一种都可以:

    excel.ReferenceStyle = 'xlR1C1';
    sheet.Range('A1').SparklineGroups.Add('xlSparkColumn','R1C2:R1C26')
    
    excel.ReferenceStyle = 'xlA1';
    sheet.Range('A2').SparklineGroups.Add('xlSparkColumn','B1:Z1')
    

    【讨论】:

    • 想通了:显然 R1C1 参考样式有干扰(文件 > 选项 > Fromulas > 使用公式,然后取消勾选 R1C1 参考样式)。问题是为什么?现在它甚至适用于字符串类型。
    • 您的解决方案引发了同样的错误。我偶然尝试取消选中 R1C1 样式,它为您的解决方案和我的解决方案都解决了这个问题,即使用“xlSparkColumn”。因此,问题在于引用样式,而不是枚举。
    • 好的,我可以确认.. 也许您可以在开头包含以下行以确保不使用 R1C1 reference style:excel.ReferenceStyle = 'xlA1'。也许其他人可以解释为什么这里需要这样做..我也不确定字符串与整数值,我认为只有整数值有效..
    猜你喜欢
    • 2021-03-06
    • 2021-08-19
    • 2017-12-24
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-06
    • 2011-03-24
    相关资源
    最近更新 更多