必须从MS Excel文件读取数据,该数据包含名称DOB以及一些数字值...
最佳答案
据我所知,给定此“规范”,您可以为此使用MS-COM或VBA。 C++ COM示例如下。当然,如果您使用的是带有XML存储的更新版本,那么它变得简单得多。毕竟是XML。 :-)
//为此线程初始化COM ...
CoInitialize(NULL);
//获取服务器的CLSID ...
CLSID clsid;
HRESULT hr = CLSIDFromProgID(L“Excel.Application”,&clsid);
if(FAILED(hr)){
::MessageBox(NULL,“CLSIDFromProgID()失败”,“错误”,0x10010);
返回-1;
}
//启动服务器并获取IDispatch ...
IDispatch * pXlApp;
hr = CoCreateInstance(clsid,NULL,CLSCTX_LOCAL_SERVER,IID_IDispatch,(void **)&pXlApp);
if(FAILED(hr)){
::MessageBox(NULL,“Excel未正确注册”,“Error”,0x10010);
返回-2;
}
//使其可见(即app.visible = 1)
{
变量x;
x.vt = VT_I4;
x.lVal = 1;
AutoWrap(DISPATCH_PROPERTYPUT,NULL,pXlApp,L“Visible”,1,x);
}
//获取工作簿集合
IDispatch * pXlBooks;
{
各种结果;
VariantInit(&result);
AutoWrap(DISPATCH_PROPERTYGET,&result,pXlApp,L“工作簿”,0);
pXlBooks = result.pdispVal;
}
//调用Workbooks.Add()以获取新的工作簿...
IDispatch * pXlBook;
{
各种结果;
VariantInit(&result);
自动换行(DISPATCH_PROPERTYGET,&result,pXlBooks,L“Add”,0);
pXlBook = result.pdispVal;
}
//创建15x15的变体安全数组...
变量arr;
arr.vt = VT_ARRAY | VT_VARIANT;
{
SAFEARRAYBOUND sab [2];
sab [0] .lLbound = 1; sab [0] .cElements = 15;
sab [1] .lLbound = 1; sab [1] .cElements = 15;
arr.parray = SafeArrayCreate(VT_VARIANT,2,sab);
}
//用一些值填充safearray
for(int i = 1; iRelease();
pXlSheet-> Release();
pXlBook-> Release();
pXlBooks-> Release();
pXlApp-> Release();
VariantClear(&arr);
//为此线程取消初始化COM ...
CoUninitialize();
More here.
给定我们所在的小节标签,我不会显示VBA示例,但是如果需要搜索“VBA开放Excel代码”,您将获得很多示例代码。