Autor Tema: Copiar y Pegar usando Clipboard.SetText  (Leído 6989 veces)

0 Usuarios y 1 Visitante están viendo este tema.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Copiar y Pegar usando Clipboard.SetText
« en: Noviembre 05, 2014, 06:23:02 pm »
En un textbox tengo: 00056

Ejecuto este codigo desde un boton:
Código: (VB) [Seleccionar]
Dim Str As String
           
Str = Text1.Text
Clipboard.Clear
Clipboard.SetText Str

Voy al Notepad lo pego y me da 00056
Pero abro un Excel nuevo, lo pego y me da 56 (sin los ceros)

Incluso hice pegado especial y siempre me da 56.

Presumo que el excel esta tomando el valor y no el literal de lo que pego pero me es necesario que se pegue tal y como lo mando ¿como podria hacer que copie tal cual?

Gracias



Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #1 en: Noviembre 05, 2014, 06:59:03 pm »
Al menos ya confirme que no es problema del SetText. Fui al notepad, escribí 00056, lo copie y lo pegue en Excel y obtuve 56. Ni modo, tendré que decirle al cliente que tome esa columna y la formatee.
Me encuentras en YAcosta.com

Bazooka

  • Terabyte
  • *****
  • Mensajes: 951
  • Reputación: +31/-20
  • El pibe Bazooka
    • Ver Perfil
    • Desof sistemas
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #2 en: Noviembre 05, 2014, 06:59:56 pm »
Excel por defecto te toma valores numericos!! si escribes 00056 veras que al salir te los convierte.
Ahora si el formato de celda esta en Texto es otra cosa !
Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las mismas cosas.

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #3 en: Noviembre 05, 2014, 07:07:03 pm »
Si, efectivamente, tambien me fastidia los valores que mando como 0.56000 porque me los vuelve 0.56 lo cual esta bien pero por un tema particular los necesitaba con 5 decimales asi esten en cero. Ni modo, no es tan complejo que el cliente finalmente lo formatee solo que ahora tengo que descontarle jajaja.
Me encuentras en YAcosta.com

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #4 en: Noviembre 05, 2014, 08:43:25 pm »
Master Yacosta:
   Si no requieres que en Excel se tome como valor puedes pasar el valor al Clipboard agregándole antes del Nro el simbolo ( ' ) apostrofe. de esta manera al pegarlo en Excel este lo reconocerá como String y no como número.

Código: (VB) [Seleccionar]
Dim Str As String
           
Str = "'" & Text1.Text
Clipboard.Clear
Clipboard.SetText Str

Espero haber ayudado...

Saludos Cordiales...

_____________________________
Sé un poco de todo y mucho de nada... ;)

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #5 en: Noviembre 05, 2014, 09:13:52 pm »
Hola estimado, cuando lo lei pensé que ya era la solución pero no me resulto doc, me lo pinta con el apostro (apostrofe o comilla simple como se llame):



También probé poniendo en el notepad el '00050 y cuando lo copio y lo pego en el Excel me lo trae con el apostro como la foto.

Si escribo a mano en el excel '001150 allí si desaparece el apostro y me alinea a la izquierda el numero formateado tratándolo como un string lo cual esta bien:


La advertencia no me importa. Pero si copio ese numero al notepad pierdo el apostro y luego del notepad lo regreso al Excel vuelve a ponerse sin formato.

Creo que Excel siempre lo volverá numero cuando la copia viene de fuera, o quiza el codigo ascii del apostro sea otro. Igual muchas gracias doc.
Me encuentras en YAcosta.com

LeandroA

  • Administrador
  • Petabyte
  • *****
  • Mensajes: 1128
  • Reputación: +151/-8
    • Ver Perfil
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #6 en: Noviembre 05, 2014, 10:42:43 pm »
Hola, me atrapo el tema asi que me puse a investigar el formato del portapapeles de excel, uno de sus 30 y picos formatos es xml asi que usando apis se puede implementar ese xml y texto plano para poder pegarlo tanto en un notepado como en una planilla de exel.

En mi pc con mi versión de Excel funciono seria bueno que lo testes.

Código: [Seleccionar]
Option Explicit

Private Declare Function CloseClipboard Lib "user32" () As Long
Private Declare Function OpenClipboard Lib "user32" (ByVal Hwnd As Long) As Long
Private Declare Function SetClipboardData Lib "user32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
Private Declare Function EmptyClipboard Lib "user32" () As Long
Private Declare Function RegisterClipboardFormat Lib "user32" Alias "RegisterClipboardFormatA" (ByVal lpString As String) As Long
Private Const CF_TEXT As Long = 1


Private m_cfHTMLClipFormat As Long

Public Sub PutXMLClipboard(ByVal sText As String)
   
   Dim sXML As String
   Dim ArrData() As Byte
   
   
   If (m_cfHTMLClipFormat = 0) Then m_cfHTMLClipFormat = RegisterClipboardFormat("XML Spreadsheet")
   
   sXML = "<?xml version='1.0'?>" & vbCrLf & _
          "<Workbook xmlns='urn:schemas-microsoft-com:office:spreadsheet'>" & vbCrLf & _
          "<Worksheet ss:Name='VB6'>" & vbCrLf & _
          "  <Table>" & vbCrLf & _
          "   <Row>" & vbCrLf & _
          "    <Cell><Data ss:Type='String'>" & sText & "</Data></Cell>" & vbCrLf & _
          "   </Row>" & vbCrLf & _
          "  </Table>" & vbCrLf & _
          " </Worksheet>" & vbCrLf & _
          "</Workbook>" & vbCrLf
         
   

    If CBool(OpenClipboard(0)) Then
        Call EmptyClipboard
        ArrData = StrConv(sXML, vbFromUnicode)
        SetClipboardData m_cfHTMLClipFormat, VarPtr(ArrData(0))
        ArrData = StrConv(sText & Chr$(0), vbFromUnicode)
        SetClipboardData CF_TEXT, VarPtr(ArrData(0))
        Call CloseClipboard
    End If

End Sub


Private Sub Command1_Click()
    PutXMLClipboard "00111"
End Sub

Despues contame si te funciono.

« última modificación: Noviembre 06, 2014, 03:12:17 pm por LeandroA »

AxioUK

  • Megabyte
  • ***
  • Mensajes: 108
  • Reputación: +17/-1
  • Modulos GSL
    • Ver Perfil
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #7 en: Noviembre 05, 2014, 11:17:24 pm »
Despues contame si te funciono.

Probado en Win8 32bit, ...
desde FlexGrid a Excel 2013... Funciona OK!
desde TextBox a Excel 2013..... Funciona OK!



Probado en Win7 32bit
desde vbAccSGrid a Excel 2010... Funciona OK!

Saludos Cordiales

« última modificación: Noviembre 05, 2014, 11:27:59 pm por AxioUK »

_____________________________
Sé un poco de todo y mucho de nada... ;)

raul338

  • Terabyte
  • *****
  • Mensajes: 894
  • Reputación: +62/-8
  • xD fan!!!!! xD
    • Ver Perfil
    • Raul's Weblog
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #8 en: Noviembre 05, 2014, 11:18:11 pm »
simplemente pon formato "00000" a la celda y listo. Son ceros de relleno y ocupan espacio, deja que el excel mismo se encargue

Si lo dejas en formato texto no podrás aplicar formulas despues

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #9 en: Noviembre 05, 2014, 11:46:03 pm »
simplemente pon formato "00000" a la celda y listo. Son ceros de relleno y ocupan espacio, deja que el excel mismo se encargue

Si lo dejas en formato texto no podrás aplicar formulas despues

Doc, lo que pasa es que son mas de 20 grids y esta rejodido preparar Excells con las celdas formateadas, ya habia decidido dejar esa parte al cliente para que el mismo lo formetee pero Leandro al parecer trajo una bonita solución que ahora checare.

Tampoco son ceros de relleno doc por el simple hecho de que no los tratare como números, son codigos que luego tiene otro tratamiento... si lo expongo aqui terminará siendo otra de mis odiadas biblias, asi que créeme: Necesito esos ceros a la izquierda.  :-)
Me encuentras en YAcosta.com

YAcosta

  • Moderador Global
  • Exabyte
  • *****
  • Mensajes: 2853
  • Reputación: +160/-38
  • Daddy de Qüentas y QüeryFull
    • Ver Perfil
    • Personal
Re:Copiar y Pegar usando Clipboard.SetText
« Respuesta #10 en: Noviembre 05, 2014, 11:54:31 pm »
Simplemente genial estimado Lea, FUNCIONA PERFECTO!!!



Ahora armare el loop del grid y listo. Fuerte abrazo y muchas gracias.
« última modificación: Noviembre 05, 2014, 11:56:32 pm por YAcosta »
Me encuentras en YAcosta.com