c++写excel图表:指定的维对当前的图表类型无效

本文详细介绍了如何在Excel中创建饼状图,并解决在使用ChartWizard函数时遇到的‘指定的维对当前的图表类型无效’错误。通过调整参数和测试数据,确保图表类型的正确应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

往excel里写入数据并插入图表,以下是网上某人的例子,原本为插入柱状图,查询得知改了ChartWizard()函数中第二个参数为5后应为饼状图。
但总提示“指定的维对当前的图表类型无效”这样的错误,推测是数据不满足表类型,但各种测试均无效,求救!!!

C/C++ code ?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
try  {
         _Application app;
         Workbooks books;
         _Workbook book;
         Worksheets sheets;
         _Worksheet sheet;
         _Chart chart;
         Range range;
         Font font;
         Range cols;
         ChartObjects chartobjects;
         Charts charts;
         LPDISPATCH lpDisp;
         COleVariant    covTrue(( short )TRUE), covFalse(( short )FALSE), 
             covOptional(( long )DISP_E_PARAMNOTFOUND, VT_ERROR);
         
         if (!app.CreateDispatch( "Excel.Application" ))
         {
             AfxMessageBox( "Couldn't start Excel and get an application 0bject" );
             return ;
         }
         app.SetVisible(TRUE);
 
         books=app.GetWorkbooks();
         book=books.Open( "D:\\Result" ,    // Filename
             COleVariant(( short )0),        // Donot update link
             covFalse,                    // Not Read-only
             COleVariant(( short )3),        // Format: Delim is space
             covOptional,                // Password
             covOptional,                // WritePassword
             covTrue,                    // 不显示建议只读消息
             covOptional,                //    Current OS
             covOptional,                // Delimeter
             covTrue,                    //    Editable
             covFalse,                    // Not Notify
             covOptional,                // Converter
             covOptional, 
             covTrue,                    // Local 
             covOptional);  // .Add(covOptional);
         sheets=book.GetSheets();
         sheet=sheets.GetItem(COleVariant(( short )1));
         
         range = sheet.GetRange(COleVariant( "B1" ), COleVariant( "B1" ));
         range.SetValue2(COleVariant( "阻塞率" ));
         range = sheet.GetRange(COleVariant( "C1" ), COleVariant( "C1" ));
         range.SetValue2(COleVariant( "利用率" ));
         range = sheet.GetRange(COleVariant( "D1" ), COleVariant( "D1" ));
         range.SetValue2(COleVariant( "消耗时间" ));
         range = sheet.GetRange(COleVariant( "A2" ), COleVariant( "A2" ));
         range.SetValue2(COleVariant( "未分域" ));
         range = sheet.GetRange(COleVariant( "A3" ), COleVariant( "A3" ));
         range.SetValue2(COleVariant( "分域后" ));
         
         range = sheet.GetRange(COleVariant( "B2" ), COleVariant( "B2" ));
         range.SetValue2(COleVariant( "0.2" ));
         range = sheet.GetRange(COleVariant( "C2" ), COleVariant( "C2" ));
         range.SetValue2(COleVariant( "0.5" ));
         range = sheet.GetRange(COleVariant( "D2" ), COleVariant( "D2" ));
         range.SetValue2(COleVariant( "10" ));
         
         
         range = sheet.GetRange(COleVariant( "B3" ), COleVariant( "B3" ));
         range.SetValue2(COleVariant( "0.3" ));
         range = sheet.GetRange(COleVariant( "C3" ), COleVariant( "C3" ));
         range.SetValue2(COleVariant( "0.8" ));
         range = sheet.GetRange(COleVariant( "D3" ), COleVariant( "D3" ));
         range.SetValue2(COleVariant( "9" ));
     
         long  left, top, width, height;
         left = 200;
         top = 50;
         width = 350;
         height = 250;
         
         lpDisp = sheet.ChartObjects(covOptional);
         ASSERT(lpDisp);
         chartobjects.AttachDispatch(lpDisp); 
         if  (chartobjects.GetCount() != 0)  //当excel中存在原有图表时,删除之
         {
             chartobjects.Delete();
         }
         ChartObject chartobject = chartobjects.Add(left, top, width, height); 
 
         chart.AttachDispatch(chartobject.GetChart());        
         lpDisp = sheet.GetRange(COleVariant( "A2" ), COleVariant( "B3" ));
         ASSERT(lpDisp);
         range.AttachDispatch(lpDisp);
         
         VARIANT var;  // ChartWizard needs a Variant for the Source range.
         var.vt = VT_DISPATCH; 
         var.pdispVal = lpDisp; 
         chart.ChartWizard(var,        // Source.
             COleVariant(( short )5),  // Gallery: 3d Column.
             //(long)Excel::xlXYScatter,
             covOptional,              // Format, use default.
             COleVariant(( short )2),    // PlotBy: xlRows.
             COleVariant(( short )0),    // CategoryLabels. 第一行是分类标签
             COleVariant(( short )1),    // SeriesLabels. 第一列是系列标签
             COleVariant(( short )TRUE),  // HasLegend.
             COleVariant( "仿真结果对比图" ),   // Title.
             COleVariant( "结果类别" ),     // CategoryTitle.
             COleVariant( "数值" ),   // ValueTitles.
             covOptional               // ExtraTitle.
             );       
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值