[C#] Excel Interop: User defined functions met celverwijzing

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Maxonic
  • Registratie: September 2000
  • Laatst online: 05-09 22:23
Beste,

Ik ben momenteel aan het spelen met user defined functions in C# voor Excel 2007. Nu lukt het om een functie 'Foo(int key)' in C# te maken, waarna ik deze in Excel met =Foo(100) kan aanroepen. Echter wanneer ik een aanroep =Foo(A1) doe (waarbij cel A1 in Excel een integer bevat) geeft Excel niet de waarde van A1 door. Hij roept de functie in zijn geheel niet aan en ook andere parameters waren geen succes. Kennelijk doet Excel een soort pass-by-reference want =Foo(Round(A1;0)) werkt weer wel. :?

Msdn geeft aan:
Single cells As with most arrays or ranges returned in Excel, if applied to a single cell, the first value in the array (index 0 for one-dimensional arrays and indexes 0,0 for two-dimensional arrays) goes into the cell.
Maar of ik nu een parameter als array, object of Range toelaat, de functie wordt niet aangeroepen. Kan iemand mij vertellen hoe ik toch zo ver kan komen dat functie aanroepen met referenties naar andere cellen in C# afgevangen kunnen worden?

Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Laatst online: 22:01

Creepy

Tactical Espionage Splatterer

Oeh, Excel 2007! Daar hebben ze in Officesuites en -software meer kaas van gegeten.

Move Programming -> Officesuites en -software

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

Verwijderd

eventjes googelen:

(Excel.Range)currentWorksheet.Cells[1, 1];

Misschien helpt dit je op weg...

bron: http://www.csharpfriends....howPost.aspx?PostID=67963

Acties:
  • 0 Henk 'm!

  • Maxonic
  • Registratie: September 2000
  • Laatst online: 05-09 22:23
Sorry, wellicht ben ik niet helemaal duidelijk geweest. Het gaat om het aanroepen van 'user defined functions'. Ik heb op het moment ook een beter beeld van het probleem en dat betreft overloading.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
public string foo(object range)
{
  Excel.Range cells = range as Excel.Range;
  string key = cells.FormulaR1C1Local.ToString();
  return bar(key);
}

public string bar(string key)
{
  string value = DoeIetsMetKey(key);
  return value;
}


Nu kan ik in Excel zowel =bar("key") als =foo(A1) gebruiken, waarbij er zich een key in cel A1 bevindt. Echter ik Zou graag zowel =foo(A1) als =foo("key") willen gebruiken. Maar als ik 'bar()' naar 'foo()' hernoem, dan wordt foo(object range) nooit meer aangeroepen.

Acties:
  • 0 Henk 'm!

  • Lustucru
  • Registratie: Januari 2004
  • Niet online

Lustucru

26 03 2016

Wat ik hier zie werkt dat idd anders en definieer je één functie die een object accepteert en ga je verder dmv typeoff.

De oever waar we niet zijn noemen wij de overkant / Die wordt dan deze kant zodra we daar zijn aangeland


Acties:
  • 0 Henk 'm!

  • Maxonic
  • Registratie: September 2000
  • Laatst online: 05-09 22:23
Dat lijkt inderdaad de oplossing te zijn. Van harte bedankt!
Pagina: 1