OVH Cloud OVH Cloud

Exel automation Visual c++ SaveAsText.

14 réponses
Avatar
mickeydisn
Bonjour a tous.


Je suis entrin de faire un petit programme qui doit enregister mes
fichier exel en fichier txt.

J'ai reussi a trouver pour word mais pour exel je bloc .

Voila un peut ce que je fais.


//J'init une word application

CLSID clsid;
CLSIDFromProgID(L"Excel.Application", &clsid);
IUnknown* pUnk;
HRESULT hr = ::CoCreateInstance( clsid, NULL, CLSCTX_LOCAL_SERVER,
IID_IUnknown, (void**) &pUnk);
if (FAILED(hr))
{
printf("Error in creating Exel application instance\n");
Destroy();
return -1;
}

//J'ouvre un book

hr = pUnk->QueryInterface(IID_IDispatch, (void**)&m_pDispApp);
DISPPARAMS dp = { NULL, NULL, 0, 0 };
DISPID dispID;
LPOLESTR szDoc = L"Workbooks";
IDispatch* pDocuments = NULL;
VARIANT varRetVal;
hr = m_pDispApp->GetIDsOfNames(IID_NULL, &szDoc, 1,
LOCALE_SYSTEM_DEFAULT, &dispID);
hr = m_pDispApp->Invoke(dispID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_PROPERTYGET, &dp, &varRetVal, NULL, NULL);
if (!SUCCEEDED(hr))
{
Destroy();
return -1;
}


Mon probleme : quand je demande d'ouvrie un fichier xls. sa passe pas

VARIANT varg[1];
varg[0].vt = VT_BSTR;
varg[0].bstrVal = _bstr_t(strFilePath);

DISPPARAMS dpOpen = { varg, NULL, 13, 0 };
DISPID dispOpenID;
LPOLESTR szOpenDoc = L"Open";
HRESULT hr = m_pDocuments->GetIDsOfNames(IID_NULL, &szOpenDoc, 1,
LOCALE_SYSTEM_DEFAULT, &dispOpenID);
hr = m_pDocuments->Invoke(dispOpenID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD, &dpOpen, &varRetVal, &excepInfo, NULL);
if (FAILED(hr))
{
printf("Error opening the document [Sa bloc ici]\n");
Destroy();
return -1;
}


J'aimerais savoir comment ouvrir un document exel.


pour enregister en txt je supose :

VARIANT test[4];

test[3].vt = VT_BSTR;
test[3].bstrVal = SysAllocString(L"C:\\delete\\docneu.txt");
test[2].vt = VT_I4;
test[2].lVal = 2; // ici pour le mode txt.
test[1] = vOpt;
test[0] = vOpt;

DISPPARAMS dpSave;
dpSave.cArgs = 4;
dpSave.cNamedArgs = 0;
dpSave.rgvarg = test;


IDispatch* pDocument = varRetVal.pdispVal;
DISPID dispSaveID;
LPOLESTR szSaveDoc = L"SaveAs";

hr = pDocument->GetIDsOfNames(IID_NULL, &szSaveDoc, 1,
LOCALE_SYSTEM_DEFAULT, &dispSaveID);
hr = pDocument->Invoke(dispSaveID, IID_NULL, LOCALE_SYSTEM_DEFAULT,
DISPATCH_METHOD, &dpSave, &varRetVal, NULL, NULL);


mais je supose que sa ne va pas marcher sa non plus !!


Si quelque a une petit idee pour me donner un coup de main sa serais
super simpas de votre par .

En vous remercien d'avance .

++
--
Mickey disn
C++ Template fan

4 réponses

1 2
Avatar
mickeydisn
Hum et si je l'ai pas quelle peur etre la raison ? ou puige le trouver?


--
Mickeydisn
Avatar
Christian ASTOR
wrote:

Hum et si je l'ai pas quelle peur etre la raison ? ou puige le trouver?



Chez MS :
http://www.microsoft.com/downloads/details.aspx?FamilyID%12D1FC-316D-4A18-A0F2-F6A78176ED81&displaylang=en
Avatar
Christian ASTOR
wrote:

Par contre j'ai chercher pas mal un endroi ou il y
avais une donc sur inferface. notamenr des interface de lesture du
texte dans les fichier. maleurheusement pas trouver .



Il y a aussi le petit tool de la KB216388 qui peut être utile.
Avatar
mickeydisn
Merci beucoup d'un aide pressieus tu a etais pour moi !!

--
mickeydisn
1 2