** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Otros de Microsoft: Windows y Office > Excel
  Mensajes nuevos Mensajes nuevos RSS - Cambio de caracteres en memoria
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoCambio de caracteres en memoria

 Responder Responder
Autor
Mensaje
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Tema: Cambio de caracteres en memoria
    Enviado: 13/Marzo/2023 a las 15:45
Buenos días.


Accedo a una página web.
Copio una serie de datos. (texto, texto, fecha, fecha, datos numéricos (7 datos), todo esto por varias filas (entre una y 10, normalmente)
Los pego en Excel y aparecen incorrectos.

¿Qué ocurre?, pues es un poco enrevesado, aviso.

Tengo Windows en español, pero configurado para inglés americano.
Tengo Excel en español.

Selecciono una página web donde aparecen los datos numéricos con la separación decimal con punto en lugar de coma.

Si selecciono y copio, al pegarlo en Excel, lo pegue como lo pegue, siempre me cambia este número a fecha.

He probado a cambiar formatos, pegar de todas las formas posibles, antes y después de pegar los datos.

Con muchas pruebas enrevesadas, he descubierto que si cambio el punto decimal por la coma, todo funciona de maravilla.

En consecuencia, lo que necesito hacer es marcar en la web lo que quiero copiar (que son muchos números, no uno solo) y cuando lo tengo en memoria, me gustaría poder cambiar los puntos por comas.

En el peor de los casos lo que puedo hacer es crear un fichero texto, escribirlo ahí e ir modificando, pero lo que me gustaría hacer, y no tengo ni idea de si se puede o no, es acceder a la memoria donde está copiado y cambiarlo ahí.

No me importa si hay que copiarlo a una variable, o algo así, pero sin tener que crear un fichero.


Ah, la opción de cambiar la configuración del ordenador a español, de momento no es posible. se me pega con la VPN del cliente.

¿Alguna idea, por favor?


Luis
El Búho es un pajarraco
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 13/Marzo/2023 a las 16:31
Me medio respondo:

Buscando he visto varias formas más o menos similares de hacerlo, las he combinado y me queda esto:

Public Function fLeeMemoria() As String
    Dim objObjeto As Object                 ' Instanciar objeto
    
    Set objObjeto = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")  ' Crear la entrada nueva en el registro de Windows, que es donde vamos a trabajar
    
    objObjeto.GetFromClipboard              ' Get the DataObject from the clipboard (internally calling OleGetClipboard)
    fLeeMemoria = objObjeto.GetText    ' Get the text and set the return value of the function
    Set objObjeto = Nothing                 ' Liberar memoria
End Function

Con eso paso lo que tenía en memoria a texto.

Claro que.... esto crea una entrada en el registro de Windows, lo cual, no me hace ni la más mínima gracia y además, probablemente fallará en muchos ordenadores que tengan el registro manejado por el administrador de dominio.

Así que, de momento voy tirando con esto, pero si alguien tiene algo mejor, soy todo ojos.


Luis


Editado por lbauluz - 13/Marzo/2023 a las 16:35
El Búho es un pajarraco
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 13962
Enlace directo a este mensaje Enviado: 13/Marzo/2023 a las 17:44
Si lo tienes en el portapapeles, en Access se puede hacer un:

me.texto.setfocus
Docmd.runcommand accmdpaste

¿no hay nada equivalente en Excel?

También se supone que puedes manejar el portapapaples con API's ...
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
chucho Ver desplegable
Nuevo
Nuevo


Unido: 03/Agosto/2020
Localización: Asturias
Estado: Sin conexión
Puntos: 13
Enlace directo a este mensaje Enviado: 13/Marzo/2023 a las 21:48
Entiendo que haces un copia-pega y es lo que te causa los problemas.

Quizá con Excel Web Queries (Excel-Datos-Desde Web) te sea más sencillo.

Saludos,


De DBIII a Clipper luego con access y para mis apaños feliz con Excel.
Arriba
pitxiku Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 27/Septiembre/2017
Localización: En mi casa
Estado: Sin conexión
Puntos: 1506
Enlace directo a este mensaje Enviado: 13/Marzo/2023 a las 21:56
Más que una entrada nueva, entiendo que lo que hace es crear un objeto basado en ese Id.

Otro objeto que también permite usar el portapapeles es el Html:

Public Function PegarPP() As String
    Dim obj As Object
    Dim s As String
    
    Set obj = CreateObject("HTMLFile")
    
    s = obj.ParentWindow.ClipboardData.GetData("Text")
    Set obj = Nothing
    
    If s = vbNullString Then
        PegarPP = "Portapapeles vacío"
    Else
        PegarPP = "Texto en el portapapeles: " & s
    End If
End Function
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5968
Enlace directo a este mensaje Enviado: 15/Marzo/2023 a las 10:38

Me he acostumbrado a que (en Excel) pasan meses con cero consultas ... que...  me entero cuando ya está resuelto. :-(


Y, para 'postre', estos días estoy metido en obras en casa (no tenía que haberme jubilado).



No entiendo bien tu situación.

¿Al pegar los datos, se pegan en una celda (celdas de una misma columna) tipo: 15321.Pedro.75.12345.7.0,4.200  en cada celda?


Si es así, (tal vez ya lo conoces pero...) en: Datos > Herramientas de datos > Texto en columnas, podemos separar los datos, en celdas adyacentes, eligiendo 'punto' (u otro) como separador, e indicar de que tipo es cada dato (fecha, texto, general, etc.).


Si es otra cosa... ¿...?




Editado por AnSanVal - 15/Marzo/2023 a las 10:51
Saludos desde Tenerife.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 17/Marzo/2023 a las 11:01
¡Perdón!

Unos días bastante liado y no he podido venir al foro.

Explico un poco más lo que tengo, ante la petición de D. Antonio.

Tengo en una página web un "grid" con los siguientes datos (más o menos), para separar he puesto el símbolo "|", pero solo para que se vea más claro en este ejemplo (y los porcentajes no suman 100%, lo sé)

Nombre | Apellidos |%asignado proyecto productivo | % asignado proyecto administrativo | % desasignado | %vacaciones.

Luis | Torres | 27.3 | 30.7 | 0.8 | 9.2
Manuel | López | 24.3 | 32.1 | 1.4 | 9.8
Juan | Pérez | 24.8 | 32.4 | 2.6 | 11.3





Y así un montón de filas.

Si lo que hago es seleccionar estos datos en la página web y pegarlos en Excel, me queda algo similar a esto:

Luis | Torres | 27.03.00 | 30.07.00 | 00.08 | 09.02
Manuel | López | 24.03.00 | 32.01.00 | 01.04 | 09.08
Juan | Pérez | 24.08.00 | 32.04.00 | 02.06 | 11.03


Eso "visible", porque si por ejemplo voy a la celda donde aparece "27.03.00 "y veo lo que realmente contiene, me aparece "01/01/1900  03.03.00" Y así en todas.

PERO, si en lugar de pegarlo en Excel lo pego en el "notepad", me aparece correctamente (con puntos en lugar de comas, pero es lo lógico).

He probado a cambiar el formato de las celdas antes y después de pegar los datos, lo he configurado como general, number, currency, accounting, date, time, percentage, fraction.... (lo siento, es en inglés) pero no hay manera, siempre lo cambia a esa extraña fecha.


Así que mi idea era, hacer el copy a la memoria de windows y cambiarlo ahí, pero evidentemente, eso probablemente requeriría alguna rutina en ensamblador, así que nada que hacer.

Por lo tanto, mi solución de momento ha sido poner la función que he publicado más arriba, con esto paso lo que hay en memoria a un string de VBA y ahí si que puedo cambiar los puntos por comas y luego pegarlo en la hoja Excel sin que me de problemas (uno a uno mediante un bucle en VBA).

La verdad es que el "fallo" tiene sentido, no se pueden mezclar configuraciones como quién prepara in cóctel y asumir que va a salir todo como quieres, como decía un profe mío hace años, "el ordenador no hace lo que tu quieres, hace lo que le mandas" y en este caso, le estoy dando órdenes en distintos  idiomas, normal que no se entere.

Ahora me toca probar la rutina de Pitxiku, a ver si va mejor que la mía y listo.

NOTA: Más tarde probaré que pasa si en lugar de coger caracteres de la página web cojo imágenes... pero eso ya es solo curiosidad malsana... científica.
El Búho es un pajarraco
Arriba
AnSanVal Ver desplegable
Administrador
Administrador
Avatar

Unido: 16/Marzo/2005
Localización: España
Estado: Sin conexión
Puntos: 5968
Enlace directo a este mensaje Enviado: 17/Marzo/2023 a las 21:49

Para reproducir que se vea "27.03.00" cuando el contenido de la celda es "01/01/1900  03.03.00", necesito forzarlo a mano:

→ [B3]   "01/01/1900  03.03.00"

→ [B3]   Formato celda Personalizada:  ;;;"27.03.00"


Pero que esto se produzca por Copiar/Pegar desde la web... no consigo entenderlo.


¿Has probado a pegar sólo valores?, te libras de muchos formatos y 'ordenes' ocultas.


Yo suelo pegar en el Bloc de notas pues lo que pego es texto llano y con ello desaparecen muchos problemas 'aparentemente ilógicos'.


Editado: En esta ocasión no se me ocurre como ayudarte.





Editado por AnSanVal - 17/Marzo/2023 a las 21:51
Saludos desde Tenerife.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: La Gloria
Estado: Sin conexión
Puntos: 3849
Enlace directo a este mensaje Enviado: 21/Marzo/2023 a las 21:04
Perdón por la tardanza.

Antonio, el problema es el carajal de configuraciones que tengo en el ordenador, es decir, en español pero en inglés a la vez... me parece que interpreta el punto como una separación de fecha y de ahí viene todo.

Lo peor es que no puedo cambiarlo, porque tengo que conectar a una VPN que entre otras cosa, si no tienes la configuración en inglés o árabe, no te deja entrar... bueno, eso además de las tropecientas validaciones que hay que hacer.

Por cierto, si lo copio y lo pego en el notepad, me lo pega bien, con punto (obviamente) pero sin problemas, pero si lo copio del notepad y lo intento pegar en Excel, otra vez el error, aunque lo haga solo con los números, incluso una sola celda.

De hecho, haciendo pruebas, si en la celda escribo 2,2 funciona, si escribo 2.2 falla... lo que me hace alucinar más.

Pero vamos, que ya me he hecho la macro que cambia todos los puntos por comas y de momento, me resuelve el problema.

Así que doy por hecho que he encontrado una situación no prevista por microsoft, pero a la que tampoco se le puede llamar fallo.

Consejo a cualquiera, ¡no juguéis con las configuraciones de países!
El Búho es un pajarraco
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable