Avatar billede jennemaan Nybegynder
02. december 2005 - 14:39 Der er 3 kommentarer og
1 løsning

Returnere array fra c# til excel

Hej folks,

jeg har følgende automation add-in i c#

using System;
using System.Runtime.InteropServices;
using Microsoft.Win32;

namespace dotnet4XL
{
    [ClassInterface(ClassInterfaceType.AutoDual), ComVisible(true)]
    public class XLFunctions
    {
        public XLFunctions()
        {
        }
        public double MultiplyNTimes(double Number1, double Number2, double TimesToMultiply)
        {
            double result = Number1;
            for (double i = 0; i < TimesToMultiply; i++)
            {
                result = result * Number2;
            }

            return result;
        }

        public double[] darray(int elms)
        {
            return new double[0];

        }

    }
}

Klassen kompiles og regasm køres. Nu kan jeg i Excel vælge min add-in og anvende MultiplyNTimes direkte som funktion i sheetet. Jeg kan lave funktioner der returnerer double, string osv... Nu vil jeg gerne vide hvad jeg skal gøre for at kunne returnere arrays. Jeg har været på jagt flere steder, bl.a. i System.Runtime.InteropServices (VariantWrapper) men har ikke lige kunne finde guldkornet.

Jeg er ved at være af den overbevisning at det ikke kan lade sig gøre. -Alle eksempler jeg har kunne støve op har involveret excel automation (hvor man refererer Microsoft.Office.Core) og skriver direkte til celler mm. Jeg er dog _kun_ interesseret i en løsning der kan anvendes direkte som funktioner i sheet'et.

/Jens
Avatar billede jennemaan Nybegynder
02. december 2005 - 14:43 #1
ps:

jeg er heller ikke interesseret i at anvende værktøjer ala managedXLL.

:)

/Jens
Avatar billede Syska Mester
02. december 2005 - 17:42 #2
lytter med
Avatar billede jennemaan Nybegynder
08. december 2005 - 09:44 #3
Fandt selv en løsning...

[return: MarshalAs(UnmanagedType.SafeArray)]
        public double[] varTest()
        {
            double[] dbl = new double[10];
            for(int i=0;i<10;i++)
                dbl[i]=(double)i;

            return dbl;

        }

og vupti kan man returnere arrays i en worksheet funktion i excel...

woot :)
Avatar billede jennemaan Nybegynder
08. december 2005 - 09:46 #4
og man kan forresten benytte funktionen fra vba også :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester