Ver Mensaje Individual
  #1  
Viejo 04/11/11, 07:15:41
NKZero NKZero is offline
Junior Member
 
Fecha de Ingreso: jun 2008
Mensajes: 5
Problemas bloqueando celda excel con OLE

Hola a todos,
os comento mi problema a ver si podéis echarme un cable.
Tengo que bloquear (hacer no editables) todas las celdas de un excel a excepción de unas cuantas que podrá rellenar el usuario. Para ello estoy usando objetos OLE de la siguiente forma:

* Crear el excel
CREATE OBJECT excel 'EXCEL.APPLICATION'.
SET PROPERTY OF excel 'VISIBLE' = 1.
CALL METHOD OF excel 'WORKBOOKS' = workbook.
CALL METHOD OF workbook 'ADD'.
CALL METHOD OF excel 'WORKSHEETS' = sheet
EXPORTING #1 = 1.
CALL METHOD OF sheet 'ACTIVATE'.

* Por cada celda a insertar, creo la referencia, doy un formato y la
* desbloqueo para que sea editable
CALL METHOD OF sheet 'CELLS' = cell
EXPORTING
#1 = gv_row
#2 = p_j.
SET PROPERTY OF cell 'LOCKED' = 0. "Unprotect cell

* Una vez creado el excel.
* Guardo en la ruta deseada
CALL METHOD OF sheet 'SAVEAS'
EXPORTING
#1 = lv_fullpath
#2 = 1.
* Protejo la hoja.
SET PROPERTY OF gv_sheet 'PROTECT' = 1.
CALL METHOD OF application 'QUIT'.

Ahora los problemas:
1 - Necesito que el procesado se haga en fondo pero si lo hago así, el excel se genera pero no se bloquean las celdas
2 - Si no lo hago en fondo, se bloquean las celdas que necesito pero al salir del excel, si no guardo (con el botón guardar del excel), al abrir de nuevo el excel las celdas no están bloqueadas.
3 - Si pongo SET PROPERTY OF gv_sheet 'PROTECT' = 1. antes de guardar con el método 'SAVEAS' me da error al guardar el archivo y no lo genera.
4 - Por último cuando protejo las celdas, las que contienen campos desplegables que no están bloqueadas se me ven mal (me salen todos en una línea).

Bueno, espero que alguien pueda ayudarme,
Un saludo.

PD: No se si esto va en este subforo, si no, siento la equivocación.

EDIT: He observado que si no protejo la hoja, las celdas tienen las propiedades correctamente puestas en el excel (marcadas como bloqueadas unicamente las que deben estar). Por lo tanto el problema es con el SET PROPERTY OF gv_sheet 'PROTECT' = 1. Sabéis alguna otra forma de Proteger una hoja de excel con abap? (opción proteger dentro de la pestaña Revisar en Excel2007).
Gracias de nuevo.

EDIT2: He encontrado la solución, justo antes de guardar con el metodo 'SAVEAS', en vez de usar:
SET PROPERTY OF gv_sheet 'PROTECT' = 1.
Usando
CALL METHOD OF gv_sheet 'PROTECT'
EXPORTING #1 = ''.
Se solucionan todos los problemas que tenía.
Además he ido marcando y desmarcando las celdas que quería proteger y las que no mientras las insertaba (OJO, marcar la propiedad de todas tanto las que si como las que no, así te aseguras que las celdas tienen la opción que quieres y no dependes del por defecto).
IF p_unlock IS INITIAL.
SET PROPERTY OF cell 'LOCKED' = 1. "Desproteger Celda
ELSE.
SET PROPERTY OF cell 'LOCKED' = 0. "Proteger Celda
ENDIF.

Un saludo.

Úlima edición por NKZero fecha: 04/11/11 a las 12:03:01.
Responder Con Cita