cancel
Showing results for 
Search instead for 
Did you mean: 

Problemas en la ejecución utilizando Excel

Sofia
Level 3
Buenos dias!

Estoy teniendo un problema con BP, cuando lo corro solo, el proceso se detiene cuando quiere trabajar con un excel, apareciendo el siguiente error :

ERROR: Internal : Could not execute code stage because exception thrown by code stage: El valor no puede ser nulo.
Nombre del parámetro: s

y cuando lo corro manualmente lo hace bien.

Alguien sabe que puede ser? 
Saludos!

------------------------------
Sofia Danieli
------------------------------
1 BEST ANSWER

Best Answers

Buenas,

Perdonarme la insistencia con el tema del código, pero creo que es la solución mas elegante, ya que estar con un sistema de reintentos poco "solido" es jugarsela mucho en un entorno productivo. Para que te sea mas facil, te paso un fragmento de código rapido:

Primeramente te vas a tener que instalar el componte de conexiónes que proporciona Microsoft en su página oficial: https://www.microsoft.com/es-es/download/confirmation.aspx?id=13255

Seguidamente, en un objeto nuevo que crees, tienes que: 
- añadir la referencia a la DLL System.Data.OleDb.dll
- añadir el espacio de nombres System.Data.OleDb (el de la libreria)
- despues añade en un fragmento de codigo lo siguiente:

Como valores de entrada; el fichero Excel y el nombre de la hoja

Y el codigo es el siguiente
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelFile + ";");
connection.Open();

OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = "SELECT * FROM " + strNombreHoja;

DataTable dt = new DataTable();
dt.Load(command.ExecuteReader());

Result = dt;


Esto te devuelve una collection que tienes que almacenar como valor de salida. Creala conforme venga tu Excel.


Un saludo,

------------------------------
Pablo Sarabia
Programmer
Altamira AM
------------------------------

View answer in original post

9 REPLIES 9

ConradoMeli
Level 5
Hola Sofia,

TIenes un poco mas de antecedentes?, que objeto/accion/stage esta tirando ese error?

Saludos,

------------------------------
Conrado Meli
Managing Partner
Primus IA
America/Santiago
------------------------------

Buenas,

Generalmente, los fallos de este tipo pueden venir por falta de algun "sleep" que de tiempo a la aplicación de Excel a cargarse.

De todas formas, dos preguntas:

1. El "debug" y la ejecución de la control Room las haces en la misma máquina? De no ser así, revisa que las librerías que usas estén bien en la máquina donde ejecutas en "automático"
2. ¿La conexión al Excel la haces en modo visual? o ¿con alguna clase por código?


Un saludo

------------------------------
Pablo Sarabia
Programmer
Altamira AM
------------------------------

Hola Sofia,

Cuál es la versión de Blue Prism? Con 6.4.2 o anterior, el portapapeles podría ser la causa del error.

Aquí hay un artículo sobre este mensaje de error:
https://portal.blueprism.com/customer-support/support-center#/path/Automation-Design/Application-Integration/EXCEL/1323720772/Why-do-I-get-Value-cannot-be-null-Parameter-name-s-error-when-using-the-MS...

------------------------------
Patrick Aucoin
Senior Product Consultant
Blue Prism
------------------------------

La versión de BP que tengo es la 6.7.2.. no se si también puede ocurrir ese problema con esta versión

------------------------------
Sofia Danieli
------------------------------

Le agregué un sleep antes de que haga Get Worksheet as Collection, pero igual sigue fallando.  La ejecución de la control Room la hago desde otra máquina.

------------------------------
Sofia Danieli
------------------------------

Buenas,

¿Te aseguras de que abra visualmente el excel y no lo deje en segundo plano o algo similar?

Mira también que no haya lineas vacías, cuando se borran datos en Excel hay veces que se quedan con datos nulos que luego dan problemas. Por hacer la prueba, te recomiendo que "elimines" el resto de lineas y columnas que no tengan datos. Puedes seleccionar la primera linea vacía haciendo clic en el numero, y con la combinación de teclas [Control] + [Shift] + [Tecla de dirección abajo] seleccionarlas todas, después, clic derecho y eliminar. De la misma manera repite esta acción con las columnas.

De todas formas, si lo que quieres es transformar los datos del Excel a una colección, puedes probar a utilizar OLEDB VBO y hacer las consultas como si se tratara de un origen de datos de SQL. No sería demasiado código.

Un saludo,



------------------------------
Pablo Sarabia
Programmer
Altamira AM
------------------------------

Buenos días Sofía. 
Si abrís el objeto de Excel VBO en el Object Studio te muestra que tiene errores?

------------------------------
Aníbal Facundo Urrestarazu
Lead Developer
Ctrl365 - Argentina
------------------------------

Leyendo otros post, efectivamente pone que en algunas versiones de BluePrism cuando el "Clipboard" está en uso por otro usuario o recurso arroja esa excepción.

Hay uno que lo solvento con un sistema de reintentos sobre la actividad. Poniendo un  bloque y un recover, un sleep y posteriormente un decision(Reintentos<Contador). De aquí conectaba a un Exception o un Calculate (Contador+1) para que lo reintentase las veces que considerase que era oportuno reintentarlo y de ahí al resume y de nuevo a la actividad.

Porque en principio aun dejando las variables tanto del workbook name, como el handle y el WorkSheet  name vacíos no debería devolverte ese error (en principio es la forma en la que funciona el método fast del get worksheet as collection).

Mi versión es anterior a la tuya 6.5.0.12573 y no me ha sucedido en mi propia máquina. En otro recurso no te puedo decir.

------------------------------
Jesús Miguel Bravo Díaz
RPA Developer
Atento
Europe/Madrid
------------------------------

Buenas,

Perdonarme la insistencia con el tema del código, pero creo que es la solución mas elegante, ya que estar con un sistema de reintentos poco "solido" es jugarsela mucho en un entorno productivo. Para que te sea mas facil, te paso un fragmento de código rapido:

Primeramente te vas a tener que instalar el componte de conexiónes que proporciona Microsoft en su página oficial: https://www.microsoft.com/es-es/download/confirmation.aspx?id=13255

Seguidamente, en un objeto nuevo que crees, tienes que: 
- añadir la referencia a la DLL System.Data.OleDb.dll
- añadir el espacio de nombres System.Data.OleDb (el de la libreria)
- despues añade en un fragmento de codigo lo siguiente:

Como valores de entrada; el fichero Excel y el nombre de la hoja

Y el codigo es el siguiente
OleDbConnection connection = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelFile + ";");
connection.Open();

OleDbCommand command = new OleDbCommand();
command.Connection = connection;
command.CommandText = "SELECT * FROM " + strNombreHoja;

DataTable dt = new DataTable();
dt.Load(command.ExecuteReader());

Result = dt;


Esto te devuelve una collection que tienes que almacenar como valor de salida. Creala conforme venga tu Excel.


Un saludo,

------------------------------
Pablo Sarabia
Programmer
Altamira AM
------------------------------