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