MUNDOSAP

Regresar   MUNDOSAP > DESARROLLO > Programación ABAP IV
Nombre de Usuario
Contraseña
Home Descargas Registrar FAQ Miembros Calendario Buscar Temas de Hoy Marcar Foros Como Leídos




 
Respuesta
 
Herramientas Buscar en Tema Desplegado
  #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
  #2  
Viejo 12/12/11, 20:31:08
Cristiana Cristiana is offline
Member
 
Fecha de Ingreso: may 2007
Localización: culiacan sin
Mensajes: 46
Smile Saludos

Hola, pudiste resolver el problema que tenia de bloquear celdas, yo necesito hacer lo mismo, me podrias ayudar a hacerlo o decir como lo solucionaste,

Gracias y Saludos.
__________________
Lo correcto no siempre es lo mas facil, Pero siempre es lo Mejor.
Dios te Bendiga.
Crysty
Responder Con Cita
  #3  
Viejo 13/12/11, 06:54:30
NKZero NKZero is offline
Junior Member
 
Fecha de Ingreso: jun 2008
Mensajes: 5
Hola Cristiana, te comento un poco el proceso a rasgos generales:
Cada celda de excel tiene un check que indica si está bloqueada o no (Boton derecho encima de la celda, Formato de celdas, Pestaña proteger).
Aunque este flag esté marcado, hasta que no se protege la hoja (Menú Revisar, Proteger Hoja) no se hace efectivo dicho bloqueo.

Por defecto el flag bloqueado viene marcado para todas las celdas (si creas un excel en blanco podrás comprobarlo), por tanto el concepto de bloquear sería a la inversa, tendríamos que desbloquear aquellas celdas que queremos que sean editables.

Todo esto es en excel, una vez compredido los pasos a realizar en excel hay que trasladarlos a SAP (hago un poco copy paste de lo que puse antes XD).

1 - Crear Excel:

* Crear el excel
CREATE OBJECT excel 'EXCEL.APPLICATION'.
SET PROPERTY OF excel 'VISIBLE' = 1. " Lo puedes poner a 0 si quieres que sea un proceso e fondo.

* Se crea el libro
CALL METHOD OF excel 'WORKBOOKS' = workbook.

* Se añade el libro
CALL METHOD OF workbook 'ADD'.

* Se selecciona la Hoja
CALL METHOD OF excel 'WORKSHEETS' = sheet
EXPORTING #1 = 1. " Este es el número de la hoja que seleccionamos

* Se pone como activa la hoja (es como hacer clic en la pestaña de la hoja que tienes seleccionada en Sheet).
CALL METHOD OF sheet 'ACTIVATE'.


2 - Seleccionar Celda con Objetos OLE y bloquear / desbloquear:

* Se selecciona la celda que queremos de la hoja
CALL METHOD OF sheet 'CELLS' = cell
EXPORTING
#1 = gv_row "FILA
#2 = p_j. "Columna (en número)

* Marcamos o desmarcamos el flag de protegido (0 - Desmarcar | 1 - Marcar)
SET PROPERTY OF cell 'LOCKED' = 0. "Unprotect cell

3 - Proteger la hoja (esto hará que las celdas protegidas no sean editables):
Justo antes de guardar los cambios en la hoja (despues de rellenar todas las celdas y demás).

* Protejemos la hoja con este método.
CALL METHOD OF gv_sheet 'PROTECT'
EXPORTING #1 = ''. " Si no se quiere password se deja vacío (ojo son 2 comillas simples).

* Se guarda el excel donde queramos
CALL METHOD OF sheet 'SAVEAS'
EXPORTING
#1 = lv_fullpath " Ruta
#2 = 1.


Tras realizar esto, todas las celdas que tengan activo el flag Bloqueado quedarán bloqueadas.

Consejo: Trata todas las celdas que rellenes con datos o formen parte de la tabla de salida, de esta forma te garantizas que cada una de ellas tiene el formato que deseas. Recorre las celdas una a una y ve marcando si la celda debe ser bloqueada o no (independientemente de como venga por defecto así siempre tendrás controlado cuales se van a desbloquear y cuales no).

Espero que te ayude, si tienes alguna duda más, tan solo tienes que decirlo.
Un saludo.

Úlima edición por NKZero fecha: 13/12/11 a las 06:59:08.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Reglas de Mensajes
no puedes crear nuevos temas
no puedes responder temas
no puedes adjuntar archivos
no puedes editar tus mensajes

El código vB está On
Las caritas están On
Código [IMG] está On
Código HTML está Off
Saltar a Foro


Husos Horarios son GMT. La hora en este momento es 23:27:23.


www.mundosap.com 2006 - Spain
software crm, crm on demand, software call center, crm act, crm solutions, crm gratis, crm web