如何将Excel 2007宏:"ActiveChart.ChartType = xlPie"转换为C++ / VB 2005代码?
How to convert the Excel 2007 Macro: "ActiveChart.ChartType = xlPie" into C++/VB 2005 Code?
致大家,
我一直在寻找,但几乎没有找到任何答案。我一直在尝试转换这个宏:
Range("A1:B7").Select
ActiveSheet.Shapes.AddChart.Select
ActiveChart.SetSourceData Source:=Range("Sheet1!$A$1:$B$7")
ActiveChart.ChartType = xlPie
对于Excel 2007,它从单元格A1到B7的数据中制作了一个简单的2D饼图。
以下是我如何将其转换为实现自动包装函数C++代码:
-------杂项代码
-------------VARIANT darange;
IDispatch *pXlRange;
{
VARIANT range;
range.vt = VT_BSTR;
range.bstrVal = ::SysAllocString(L"A1:B7");
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_PROPERTYGET, &result, pXlSheet, L"Range", 1, range);
darange.vt = VT_DISPATCH;
darange.pdispVal = result.pdispVal;
pXlRange = result.pdispVal;
}
{
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_METHOD, &result, pXlRange, L"Select", 0);
}
IDispatch *pXlChartObjects;
{
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_PROPERTYGET, &result, pXlSheet, L"Shapes", 0);
pXlChartObjects = result.pdispVal;
}
IDispatch *pXlChartObject;
{
VARIANT result;
VariantInit(&result);
VARIANT left, top, width, height;
left.vt = VT_R8;
left.dblVal = 600.;
top.vt = VT_R8;
top.dblVal = 600.;
width.vt = VT_R8;
width.dblVal = 200.;
height.vt = VT_R8;
height.dblVal = 200.;
AutoWrap(DISPATCH_METHOD, &result, pXlChartObjects, L"AddChart", 1, left, top, width, height);
pXlChartObject = result.pdispVal;
}
{
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_METHOD, &result, pXlRange, L"Select", 0);
}
IDispatch *pXlChart;
{
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_PROPERTYGET, &result, pXlChartObject, L"Chart", 0);
pXlChart = result.pdispVal;
}
// NOT WORKING
{
VARIANT result;
VariantInit(&result);
VARIANT type;
type.vt = VT_BSTR;
type.bstrVal = ::SysAllocString(L"xlPie");
//type.vt = VT_I4;
//type.lVal = 75;
AutoWrap(DISPATCH_PROPERTYPUT, &result, pXlChart, L"Chartype", 1, type);
}
// NOT WORKING
{
VARIANT result;
VariantInit(&result);
AutoWrap(DISPATCH_METHOD, &result, pXlChart, L"SetSourceData", 1, darange);
}
/*
-------杂项代码
----------它打开 Excel 并生成一个条形图,但我需要一个饼图来实现。不幸的是,我不知道如何将"xlPie"传递给这段代码:
// NOT WORKING
{
VARIANT result;
VariantInit(&result);
VARIANT type;
type.vt = VT_BSTR;
type.bstrVal = ::SysAllocString(L"xlPie");
//type.vt = VT_I4;
//type.lVal = 75;
AutoWrap(DISPATCH_PROPERTYPUT, &result, pXlChart, L"Chartype", 1, type);
}
// NOT WORKING
有人有想法吗?
xlPie
是一个数字常量,而不是一个字符串。通过在VBA即时窗口中键入debug.print xlPie
来获取其值。在您的C++中将其定义为(我认为)长类型。然后通过它。
不要将其转换为 BSTR。
(另外,不要忘记使用 ::SysFreeString 释放您的 BSTR,否则会出现内存泄漏)。
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 如何将Excel 2007宏:"ActiveChart.ChartType = xlPie"转换为C++ / VB 2005代码?