[BCB] ExcelApp->Open(..) error

Pagina: 1
Acties:

  • Woohooo
  • Registratie: Februari 2001
  • Laatst online: 21-04 10:14

Woohooo

Smilie, James Smilie

Topicstarter
Hoi hoi,

Ik ben een hier bezig met een programmatje waarbij ik vanuit een C++ Builder applicatie gegevens wil invoegen in een bestaande excel sheet.

Werkt allemaal perfect wanneer ik een nieuwe lege excel sheet aanroep, maar zodra ik een bestaande excel sheet wil openen gaat het een beetje mis:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
WideString Filename;

ExcelApplication1->Connect();
ExcelApplication1->Visible[0]=true;

Filename = "C:\test.xls";
ExcelWorksheet1->ConnectTo(ExcelApplication1->Workbooks->Open(Filename, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0));

ExcelWorksheet1->Cells->Select();
ExcelWorksheet1->Columns->AutoFit();
ExcelApplication1->Visible[0] = true;

ExcelWorksheet1->Cells->set_Item(Variant(1), Variant(1),Variant(WideString("Datum:")) );
ExcelWorksheet1->Cells->set_Item(Variant(1), Variant(2),Variant(WideString(Edit1->Text)) );
ExcelWorksheet1->Cells->set_Item(Variant(2), Variant(1),Variant(WideString("Naam:")) );
ExcelWorksheet1->Cells->set_Item(Variant(2), Variant(2),Variant(WideString(Edit2->Text)) );


Bij de code van:
code:
1
2
3
ExcelWorksheet1->ConnectTo(ExcelApplication1->Workbooks->Open(Filename, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0));

slaat hij helemaal vast met een foutmelding:
[C++ Error] Unit1.cpp(149): E2285 Could not find a match for 'Workbooks::Open(WideString,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,
OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,int)'


Heeft er iemand raad voor mij hoe ik dit zou kunnen oplossen?

Heb heel google vandaag al afgezocht maar kwam bijna alleen maar chinese website hierover tegen.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Dit is een COM interactie foutmelding. Hij probeert jouw aanroep te matchen met de juiste versie van de open methode van het Excel object. Blijkbaar roep jij dat niet op de juiste manier aan.

Je moet dus kijken welke parameters je mee mag geven aan een Open commando en welk type die horen te hebben.

Ik heb net ff in Excel2000 gekeken en volgens de autocompletion heeft de Open methode op het Workbooks object 13 parameters en volgens mij heb jij er 14. Dat kan dus niet :) Ervan uitgaande dat jij Excel 2000 gebruikt natuurlijk :)

[ Voor 28% gewijzigd door bigbeng op 05-10-2005 15:39 ]


  • Woohooo
  • Registratie: Februari 2001
  • Laatst online: 21-04 10:14

Woohooo

Smilie, James Smilie

Topicstarter
Van al die parameters word ik ook niet veel slimmer van
Afbeeldingslocatie: http://82.176.191.197/pics/excelbcb.jpg

En ik gebruik Excel 2000 ja, maar zodra ik 1 van die EmptyParam's weg doe krijg ik nog die melding

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Zo te zien moet je een long meegeven als laatste (blijkbaar klopte jouw aanroep wel gewoon). Je geeft nu (impliciet) een int mee en daar kan ie niks mee. Volgens mij kun je dat forceren, maar hoe precies daarvoor is mn c++ te roestig. Ik geloof door voor achter je 0 een L te zetten, maar pin me er niet op vast.

[ Voor 3% gewijzigd door bigbeng op 05-10-2005 15:54 ]


  • Woohooo
  • Registratie: Februari 2001
  • Laatst online: 21-04 10:14

Woohooo

Smilie, James Smilie

Topicstarter
Woohooo schreef op woensdag 05 oktober 2005 @ 15:33:
[C++ Error] Unit1.cpp(149): E2285 Could not find a match for 'Workbooks::Open(WideString,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,
OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,int)'
Bij die foutmelding geeft hij juist een INT als laatste..

Dat met L werkt niet
Een aparte long aanmaken werkt ook niet, zelfde voor int :'(




Delphi zooi:
Assuming an application variable, Excel, and an integer variable LCID that you've assigned the value GetUserDefaultLCID:
Early binding:

var
WBk: _Workbook;
WS: _WorkSheet;
Filename: OleVariant;
...
Filename := 'C:\Test.xls';
WBk := Excel.Workbooks.Open(Filename, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam,
EmptyParam, LCID);
WS := WBk.Worksheets.Item['Sheet1'] as _Worksheet;
WS.Activate(LCID);


Late binding:

In late binding, you don't have to specify optional parameters, so you can just do this:

var
WBk, WS, SheetName: OleVariant;
...
WBk := Excel.WorkBooks.Open('C:\Test.xls');
WS := WBk.Worksheets.Item['SheetName'];
WS.Activate;

[ Voor 55% gewijzigd door Woohooo op 05-10-2005 16:06 ]


  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Luistert, de foutmelding die hij geeft is dat hij jou functie (met een int aan het einde) niet kan matchen met een aan de compile bekende functie van het Workbooks object. Kun je niet een variabele definieren van het type long en die een waarde 0 geven en deze vervolgens doorgeven?
Heb je inmiddels wel die ene parameter weer terug gezet?

En als het nu weer fout gaat, geef dan even de "nieuwe" foutmelding door.

edit:
zo te zien moet je ook een variabele meegeven van het type _WorkbookPtr eerst kijken dan blaten, sorry :)


offtopic:
eerste pogingen om met BCB te werken?

[ Voor 24% gewijzigd door bigbeng op 05-10-2005 16:12 ]


  • Woohooo
  • Registratie: Februari 2001
  • Laatst online: 21-04 10:14

Woohooo

Smilie, James Smilie

Topicstarter
Ja ik begreep die foutmelding niet goed denk ik

code:
1
2
3
4
5
6
long lcid = 0;

ExcelWorksheet1->ConnectTo(ExcelApplication1->Workbooks->Open("C:\test.xls",
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,lcid));

[C++ Error] Unit1.cpp(151): E2285 Could not find a match for 'Workbooks::Open(char *,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,OleVariant,
OleVariant,OleVariant,OleVariant,OleVariant,long)'

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Ik zeg nu eerste parameter matched niet. char * moet w_char * zijn.
Welkom in de mooie wereld van strongtyped (en bij c++ ultra strong :) ) programmeertalen. Maar verder moet je eruit kunnen komen lijkt me.

  • Woohooo
  • Registratie: Februari 2001
  • Laatst online: 21-04 10:14

Woohooo

Smilie, James Smilie

Topicstarter
Naja het lukt nog niet helemaal maar ik ga wel weer ff een dagje googelen
Pagina: 1