none
Usar DLL en Excel RRS feed

  • Pregunta

  • Hola, tengo una DLL que cree en Visual C# 2008, de la cual este es el codigo:

    namespace Salidasalm
    {
        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Data.SqlClient;
        public class SalidasAlmacen
        {
            public static double Salidas(int departamento, int familia, string fechainicial, string fechafinal, double Resultado)
            {
                System.Data.SqlClient.SqlConnection con;
                System.Data.SqlClient.SqlCommand command;
                System.Data.SqlClient.SqlParameter retorno;
                con = new System.Data.SqlClient.SqlConnection();
                con.ConnectionString = "Server=xx.xx.xx.xx;Database=xxxxxx;User Id=xxxxxx;Password=xxxxxx;";
                try
                {
                    con.Open();
                    command = new System.Data.SqlClient.SqlCommand("salidasinventario", con);
                    command.CommandType = System.Data.CommandType.StoredProcedure;
                    retorno = new System.Data.SqlClient.SqlParameter("GrandTotal", System.Data.SqlDbType.Float);
                    retorno.Direction = System.Data.ParameterDirection.Output;
                    command.Parameters.Add(retorno);
                    command.Parameters.AddWithValue("depto", departamento);
                    command.Parameters.AddWithValue("familia", familia);
                    command.Parameters.AddWithValue("fecha_inicial", fechainicial);
                    command.Parameters.AddWithValue("fecha_final", fechafinal);
                    command.ExecuteNonQuery();
                    Resultado = Convert.ToDouble(command.Parameters["Grandtotal"].Value);
                    return Resultado;
                    con.Close();
                }
                catch (Exception)
                {
                    return (0);
                    con.Close();
                }
            }

        }
    }

    Lo que hace esta funcion es conectarse a un Servidor SQL y ejecutar un Stored Procedure con los parametros de Departamento, Familia, Fecha Inicial y Fecha Final. Devolviendo un valor.

    Esta DLL la probe en otro proyecto de C# (agregandola como referencia) y funciona perfectamente.

    El problema es que necesito usarla en Excel, esto es crear una Funcion de excel que ejecute la funcion de la DLL y me devuelva el resultado del Stored Procedure.

    Hasta ahora tengo el siguiente codigo en Excel:

    Declare Function Salidas Lib "Invsalidasalmacen.dll" _
              (ByVal departamento As Integer, ByVal familia As Integer, ByVal fechainicial As Sting, ByVal fechafinal As String) As Double

    Esta parte segun tengo entendido es para Declarar la DLL (y la funcion correspondiente).

    ------------------------------------------------------------------------------------------------------------------------------------------------------------

    Function SALIDASALM(ByVal depto As Integer, ByVal familia As Integer, ByVal fechai As String, ByVal fechaf As String)
    Dim st As Integer, Resultado As Double
    st = Salidas(depto, familia, fechai, fechaf)
    If st <> 0 Then
       Salidasalm = CVErr(xlErrNum)
    Else
       Salidasalm = Resultado
    End If
    End Function

    Esta parte es para crear la funcion que utilizare en una celda para obtener el resultado del Stored Procedure.

    Sin embargo al momento que uso la funcion en una celda ej: =SALIDASALM(1004,102,"20121029","20121029")

    me regresa #!VALOR! y me dice que "un valor utilizado en la formula es de tipo incorrecto". Podria alguien indicarme en donde esta mi error ?

    Agradezco su ayuda

    martes, 30 de octubre de 2012 22:02

Respuestas

Todas las respuestas