Deja las comillas al copiar desde la celda

90

Problema :
al copiar una celda de Excel fuera del programa, las comillas dobles se agregan automáticamente.

Detalles :
estoy usando Excel 2007 en una máquina con Windows 7. Si tengo una celda con la siguiente fórmula:

="1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2."

La salida en la celda (formateada como número) se ve así en Excel:

1SOME NOTES FOR LINE 1.2SOME NOTES FOR LINE 2.

Bien y bueno. Pero, si copio la celda en otro programa, como el bloc de notas, aparecen molestas comillas dobles al principio y al final. Observe que las pestañas creadas por "CHAR (9)" se mantienen, lo cual es bueno.

"1  SOME NOTES FOR LINE 1.  2     SOME NOTES FOR LINE 2."

¿Cómo puedo evitar que aparezcan estas comillas dobles cuando copio en otro programa? En otras palabras, ¿puedo evitar que se agreguen automáticamente cuando la celda se copia al portapapeles?

Aaron Thomas
fuente
¿Ha intentado cambiar el formato a algo que no sea un número? Creo que he visto formas de evitar eso, pero no puedo abrir Excel en este momento exacto, volveré en unos minutos si todavía no hay respuesta.
AdamMc331
@ McAdam331 en mi configuración, si el formato es algo así como texto, la celda muestra la fórmula, no el resultado calculado. El formateo como número parece anular esto por alguna razón.
Aaron Thomas
¿Por qué optó por utilizar la fórmula? ¿Es porque Excel no admite una forma fácil de insertar caracteres de tabulación? Parece que tampoco puedo solucionar esto, tal vez haya otras opciones además de Excel que pueda usar, pero no estoy seguro de cuál es la naturaleza del proyecto.
AdamMc331
Además, puede ser una molestia, pero si abre Excel y comienza a escribir en una celda (que tiene el formato predeterminado como General) e ingresa texto, se copiará sin las comillas. (Probado con Excel 2013 y Notepad ++) ¿Afectará a su proyecto ingresar solo 4 espacios en lugar de una pestaña? Una vez más, es difícil de decir sin conocer el resto del problema.
AdamMc331
1
@ McAdam331 desafortunadamente necesito que esto funcione exactamente como lo puse aquí, menos las comillas dobles iniciales y finales. Por favor, no permita que las pestañas le quiten el foco de esta pregunta, deben estar ahí.
Aaron Thomas

Respuestas:

28

Si intenta pegar en Word-Pad, Notepad ++ o Word, no tendrá este problema. Para copiar el valor de la celda como texto puro, para lograr lo que describe, debe usar una macro:

En el libro de trabajo donde desea que se aplique esto (o en su Personal.xls si desea usarlo en varios libros de trabajo), coloque el siguiente código en un módulo estándar:

Código:

Sub CopyCellContents()
'create a reference in the VBE to Microsft Forms 2.0 Lib
' do this by (in VBA editor) clicking tools - > references and then ticking "Microsoft Forms 2.0 Library"
Dim objData As New DataObject
Dim strTemp As String
strTemp = ActiveCell.Value
objData.SetText (strTemp)
objData.PutInClipboard
End Sub

Para agregar un módulo estándar a su proyecto (libro de trabajo), abra el VBE con Alt+F11 y luego haga clic con el botón derecho en su libro de trabajo en la ventana del proyecto superior izquierda y seleccione Insertar> Módulo. Pegue el código en la ventana del módulo de código que se abrirá a la derecha.

De vuelta en Excel, vaya a Herramientas> Macro> Macros y seleccione la macro llamada "CopyCellContents" y luego elija Opciones en el cuadro de diálogo. Aquí puede asignar la macro a una tecla de método abreviado (por ejemplo, como CTRL+ Cpara copia normal) - yo usé CTRL+Q .

Luego, cuando desee copiar una sola celda en el Bloc de notas / donde sea, simplemente haga Ctrl + q (o lo que elija) y luego haga un CTRL+V o Editar> Pegar en el destino elegido.

Mi respuesta se copia (con algunas adiciones) de: aquí

EDITAR : (de los comentarios)

Si no encuentra la biblioteca de Microsoft Forms 2.0 en la lista de referencias, puede intentar

  • buscando FM20.DLL en su lugar (gracias @Peter Smallwood)
  • haciendo clic en Examinar y seleccionando C:\Windows\System32\FM20.dll(Windows de 32 bits) (gracias @JWhy)
  • haciendo clic en Examinar y seleccionando C:\Windows\SysWOW64\FM20.dll (en 64 bits)
usuario3616725
fuente
1
Parece que VBA es la única solución para esto, gracias por la entrada.
Aaron Thomas
1
Si no puede ver la biblioteca de Microsoft Forms en la lista de referencias, busque FM20.DLL
Peter Smallwood
15
Todavía obtengo las citas si las pego en Notepad ++.
Kat
1
@monkeyintern Creo que tenía varias líneas de texto en una celda, y dividirlas en una línea por celda me permitió evitarlo.
Kat
2
@ user3616725 Es posible que las versiones actualizadas hayan cambiado este comportamiento, pero las versiones actuales de Word y Notepad ++ (a partir de la fecha de publicación de este comentario) pegan estas citas cuando se selecciona una celda única o múltiple.
Tony
80

Acabo de tener este problema y envolver cada celda con la CLEANfunción lo solucionó por mí. Eso debería ser relativamente fácil de hacer =CLEAN(, seleccionando su celda y luego autocompletando el resto de la columna. Después de hacer esto, las pegas en el Bloc de notas o en cualquier otro programa ya no tenían comillas duplicadas.

Greg Smalter
fuente
20
Buena respuesta para borrar comillas adicionales, pero desafortunadamente también borra los caracteres de tabulación ... que, en la pregunta, quiero conservar. ¡Gracias por el aporte!
Aaron Thomas
Esto funcionó para mí, no me importaban las pestañas; de hecho, quería eliminarlas todas y los caracteres de nueva línea de todos modos.
Cody
19
Elimina todos los caracteres ASCII por debajo de 32. Así que también nuevas líneas.
NeplatnyUdaj
1
Esta es la verdadera respuesta.
Tyler Murry
10
Esta no es una buena solución ya que elimina todos los caracteres especiales.
Paul
25

Primero péguelo en Word, luego puede pegarlo en el bloc de notas y aparecerá sin las comillas

Jonathan Wilson
fuente
Gracias por la entrada, pero no puedo marcar esto como una buena solución. Además, es un duplicado de una solución que ya se ha ofrecido a esta pregunta, consulte stackoverflow.com/a/24913557/2658159 .
Aaron Thomas
4
Gracias, me gustó esta solución. Rápido y fácil
Bajal
Voto a favor de este ... en mi caso, mi problema fue que, para un tipo particular de solicitud que recibo, los datos vienen en un archivo de Excel y necesito pegarlos en un cuadro de texto sin formato. Cuando hago eso, obtengo las cotizaciones. Había utilizado un editor de texto para eliminar las comillas adicionales (también citaba comillas ... ¡molesto!). Buscando una solución simple, encontré que pegar en Word primero funciona ya que las comillas adicionales se han ido. Ojalá pudiera
votar a favor de
Esto eliminará los caracteres de tabulación. Al menos cuando se usa Word, no estoy seguro de Wordpad
Matthew Lueder
Ésta es la mejor solución incluso para hoy.
zygimantus
6

Si desea seleccionar varias celdas y copiar sus valores al portapapeles sin todas esas molestas comillas, el siguiente código puede ser útil. Esta es una mejora del código proporcionado anteriormente por user3616725.

Sub CopyCells()
 'Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
 'Then set a keyboard shortcut to the CopyCells Macro (eg Crtl T)
 Dim objData As New DataObject
 Dim cell As Object
 Dim concat As String
 Dim cellValue As String
 CR = ""
  For Each cell In Selection
  If IsNumeric(cell.Value) Then
   cellValue = LTrim(Str(cell.Value))
  Else
   cellValue = cell.Value
  End If
  concat = concat + CR + cellValue
  CR = Chr(13)
 Next
 objData.SetText (concat)
 objData.PutInClipboard
End Sub
Peter Smallwood
fuente
Creo que esta es la mejor respuesta hasta ahora.
posfan12
2
Vea mi respuesta basada en esta respuesta que corrige los siguientes errores con ella: 1. Convertir una celda vacía en una cadena vacía frente a "0". 2. Agregue la pestaña (ASCII 9) frente a CR (ASCII 13) después de cada celda. 3. Agregue un CR (ASCII 13) + LF (ASCII 10) (vs. CR (ASCII 13)) después de cada Fila. NOTA: Aún no podrá copiar caracteres incrustados dentro de una celda que causarían una salida del campo de destino en el que está pegando esa celda (es decir, tabulador o CR al pegar en la ventana Editar tabla de acceso o SSMS).
Tom
^ También corrige el error del compilador "Variable no definida" (para la variable "CR").
Tom
4

Mi solución cuando llegué al problema de las comillas fue eliminar los retornos de carro del final del texto de mis celdas. Debido a estos retornos de carro (insertados por un programa externo), Excel estaba agregando comillas a toda la cadena.

goblin marciano
fuente
4
Las citas también pueden ser el resultado de CR / LF dentro de la fórmula (no necesariamente al final), o una pestaña como en la pregunta original de este hilo (char (9)).
Turbo
que realmente ha hecho mi vida más fácil
de source
3

Posible problema en relación con la respuesta de "user3616725":
Estoy en Windows 8.1 y parece haber un problema con el código VBA vinculado de la respuesta aceptada de "user3616725":

Sub CopyCellContents()
 ' !!! IMPORTANT !!!:
 ' CREATE A REFERENCE IN THE VBE TO "Microsft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
 ' DO THIS BY (IN VBA EDITOR) CLICKING TOOLS -> REFERENCES & THEN TICKING "Microsoft Forms 2.0 Library" OR "Microsft Forms 2.0 Object Library"
 Dim objData As New DataObject
 Dim strTemp As String
 strTemp = ActiveCell.Value
 objData.SetText (strTemp)
 objData.PutInClipboard
End Sub

Detalles: Al
ejecutar el código anterior y pegar el portapapeles en una celda en Excel, obtengo dos símbolos compuestos por cuadrados con un signo de interrogación adentro, como este: ⍰⍰. Pegar en el Bloc de notas ni siquiera muestra nada.

Solución:
Después de buscar durante bastante tiempo, encontré otro script VBA del usuario "Nepumuk" que hace uso de la API de Windows . Aquí está su código que finalmente funcionó para mí:

Option Explicit

Private Declare Function OpenClipboard Lib "user32.dll" ( _
    ByVal hwnd As Long) As Long
Private Declare Function CloseClipboard Lib "user32.dll" () As Long
Private Declare Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare Function SetClipboardData Lib "user32.dll" ( _
    ByVal wFormat As Long, _
    ByVal hMem As Long) As Long
Private Declare Function GlobalAlloc Lib "kernel32.dll" ( _
    ByVal wFlags As Long, _
    ByVal dwBytes As Long) As Long
Private Declare Function GlobalLock Lib "kernel32.dll" ( _
    ByVal hMem As Long) As Long
Private Declare Function GlobalUnlock Lib "kernel32.dll" ( _
    ByVal hMem As Long) As Long
Private Declare Function GlobalFree Lib "kernel32.dll" ( _
    ByVal hMem As Long) As Long
Private Declare Function lstrcpy Lib "kernel32.dll" ( _
    ByVal lpStr1 As Any, _
    ByVal lpStr2 As Any) As Long

Private Const CF_TEXT As Long = 1&

Private Const GMEM_MOVEABLE As Long = 2

Public Sub Beispiel()
    Call StringToClipboard("Hallo ...")
End Sub

Private Sub StringToClipboard(strText As String)
    Dim lngIdentifier As Long, lngPointer As Long
    lngIdentifier = GlobalAlloc(GMEM_MOVEABLE, Len(strText) + 1)
    lngPointer = GlobalLock(lngIdentifier)
    Call lstrcpy(ByVal lngPointer, strText)
    Call GlobalUnlock(lngIdentifier)
    Call OpenClipboard(0&)
    Call EmptyClipboard
    Call SetClipboardData(CF_TEXT, lngIdentifier)
    Call CloseClipboard
    Call GlobalFree(lngIdentifier)
End Sub

Para usarlo de la misma manera que el primer código VBA de arriba, cambie el Sub "Beispiel ()" de:

Public Sub Beispiel()
    Call StringToClipboard("Hallo ...")
End Sub

A:

Sub CopyCellContents()
    Call StringToClipboard(ActiveCell.Value)
End Sub

Y ejecútelo a través del menú de macros de Excel como se sugiere desde "user3616725" de la respuesta aceptada:

De vuelta en Excel, vaya a Herramientas> Macro> Macros y seleccione la macro llamada "CopyCellContents" y luego elija Opciones en el cuadro de diálogo. Aquí puede asignar la macro a una tecla de método abreviado (por ejemplo, Ctrl + c para una copia normal). Usé Ctrl + q.

Luego, cuando desee copiar una sola celda en el Bloc de notas / donde sea, simplemente haga Ctrl + q (o lo que elija) y luego haga Ctrl + vo Editar> Pegar en el destino elegido.


Editar (21 de noviembre de 2015):
@ comentario de "dotctor": ¡
No, esta en serio no es una pregunta nueva! En mi opinión, es una buena adición para la respuesta aceptada, ya que mi respuesta aborda los problemas que puede enfrentar al usar el código de la respuesta aceptada. Si tuviera más reputación, habría creado un comentario.
@ comentario de "Teepeemm":
Sí, tiene razón, las respuestas que comienzan con el título "Problema:" son engañosas. Cambiado a: "Posible problema en relación con la respuesta de" user3616725 ":". Como comentario ciertamente habría escrito mucho más compacto.

SourceSeeker
fuente
Creo que esto funciona como una respuesta válida (aunque abrir con Problema hizo que pareciera que tenía un nuevo problema). Y los comentarios tienen un límite de 600 caracteres, por lo que definitivamente sería demasiado largo para eso.
Teepeemm
¡Maravilloso! ¡Gracias! El único problema parece ser que solo funciona para una sola celda. ¿Se puede mejorar de alguna manera para permitir copiar rangos?
NeplatnyUdaj
3

"Si desea seleccionar varias celdas y copiar sus valores en el portapapeles sin todas esas molestas comillas" ( sin los errores de la solución de varias celdas de Peter Smallwood) "el siguiente código puede ser útil". Esta es una mejora del código proporcionado anteriormente por Peter Smallwood (que "es una mejora del código proporcionado anteriormente por user3616725"). Esto corrige los siguientes errores en la solución de Peter Smallwood:

  • Evita el error del compilador "Variable no definida" (para "CR" - "clibboardFieldDelimiter" aquí)
  • Convierta una celda vacía en una cadena vacía frente a "0".
  • Agregar pestaña (ASCII 9) frente a CR (ASCII 13) después de cada celda.
  • Agregue un CR (ASCII 13) + LF (ASCII 10) (vs.CR (ASCII 13)) después de cada Fila.

NOTA: Aún no podrá copiar caracteres incrustados dentro de una celda que causarían una salida del campo de destino en el que está pegando esa celda (es decir, tabulador o CR al pegar en la ventana Editar tabla de acceso o SSMS).


Option Explicit

Sub CopyCellsWithoutAddingQuotes()

' -- Attach Microsoft Forms 2.0 Library: tools\references\Browse\FM20.DLL
' -- NOTE: You may have to temporarily insert a UserForm into your VBAProject for it to show up.
' -- Then set a Keyboard Shortcut to the "CopyCellsWithoutAddingQuotes" Macro (i.e. Crtl+E)

Dim clibboardFieldDelimiter As String
Dim clibboardLineDelimiter As String
Dim row As Range
Dim cell As Range
Dim cellValueText As String
Dim clipboardText As String
Dim isFirstRow As Boolean
Dim isFirstCellOfRow As Boolean
Dim dataObj As New dataObject

clibboardFieldDelimiter = Chr(9)
clibboardLineDelimiter = Chr(13) + Chr(10)
isFirstRow = True
isFirstCellOfRow = True

For Each row In Selection.Rows

    If Not isFirstRow Then
        clipboardText = clipboardText + clibboardLineDelimiter
    End If

    For Each cell In row.Cells

        If IsEmpty(cell.Value) Then

            cellValueText = ""

        ElseIf IsNumeric(cell.Value) Then

            cellValueText = LTrim(Str(cell.Value))

        Else

            cellValueText = cell.Value

        End If ' -- Else Non-empty Non-numeric

        If isFirstCellOfRow Then

            clipboardText = clipboardText + cellValueText
            isFirstCellOfRow = False

        Else ' -- Not (isFirstCellOfRow)

            clipboardText = clipboardText + clibboardFieldDelimiter + cellValueText

        End If ' -- Else Not (isFirstCellOfRow)

    Next cell

    isFirstRow = False
    isFirstCellOfRow = True

Next row

clipboardText = clipboardText + clibboardLineDelimiter

dataObj.SetText (clipboardText)
dataObj.PutInClipboard

End Sub
Tom
fuente
0

Para mantener los saltos de línea al pegar en el bloc de notas, reemplace esta línea en la macro:

strTemp = ActiveCell.Value

por:

strTemp = Replace(ActiveCell.Value, Chr(10), vbCrLf)
JCP
fuente
0

Utilice la siguiente fórmula

=Clean("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")

y obtendrás lo que quieres ;-)

Stéphane Chivet
fuente
2
Esto funciona, pero elimina mi formato (Nuevas líneas y pestañas)
Gabriel G
0

Puede hacer esto en una macro de Excel a través de VBA, enviando los resultados a un archivo:

Sub SimpleVBAWriteToFileWithoutQuotes()
    Open "c:\TEMP\Excel\out.txt" For Output As #1
    Print #1, Application.ActiveSheet.Cells(2, 3)
    Close #1
End Sub

Y si desea obtener nombres de archivo y contenido en varios archivos, aquí hay un breve fragmento que evita las comillas dobles alrededor de la salida.

Sub DumpCellDataToTextFilesWithoutDoubleQuotes()
    ' this will work for filename and content in two different columns such as:
    ' filename column       data column
    ' 101                   this is some data
    ' 102                   this is more data

    Dim rngData As Range
    Dim strData As String
    Dim strTempFile As String
    Dim strFilename As String
    Dim i As Long
    Dim intFilenameColumn As Integer
    Dim intDataColumn As Integer
    Dim intStartingRow As Integer

    intFilenameColumn = 1     ' the column number containing the filenames
    intDataColumn = 3         ' the column number containing the data
    intStartingRow = 2        ' the row number to start gathering data


    For i = intStartingRow To Range("A1", Range("A1").End(xlDown)).Rows.Count

        ' copy the data cell's value
        Set rngData = Application.ActiveSheet.Cells(i, intDataColumn)

        ' get the base filename
        strFilename = Application.ActiveSheet.Cells(i, intFilenameColumn)

        ' assemble full filename and path
        strTempFile = "w:\TEMP\Excel\" & strFilename & ".txt"

        ' write to temp file
        Open strTempFile For Output As #1
        Print #1, rngData
        Close #1

    Next i

    ' goto home cell
    Application.ActiveSheet.Cells(1, 1).Select
    Range("A1").ClearOutline
End Sub
JoshInDC
fuente
0
  • si la fórmula tiene varias líneas (significa tener un salto de línea en la fórmula), copiar y pegar funcionará de esa manera
  • Si puede eliminar varias líneas, no aparecerán comillas mientras se copia y pega.
  • de lo contrario, use la función LIMPIAR como lo dijo @greg en la respuesta anterior
vignesh
fuente
0

Nota: La causa de las comillas es que cuando los datos se mueven de Excel al portapapeles, cumplen totalmente con los estándares CSV que incluyen valores de comillas que incluyen tabulaciones, nuevas líneas, etc. (y los caracteres de comillas dobles se reemplazan por dos caracteres de comillas dobles).

Entonces, otro enfoque, especialmente como en el caso de OP cuando las pestañas / nuevas líneas se deben a la fórmula, es usar caracteres alternativos para las pestañas y los retornos duros. Utilizo el Separador de unidades ascii = char (31) para las pestañas y el Separador de registros ascii = char (30) para las nuevas líneas.

Luego, pegar en el editor de texto no involucrará las reglas CSV adicionales y puede hacer una búsqueda rápida y reemplazarlas para convertirlas nuevamente.

Si las pestañas / nuevas líneas están incrustadas en los datos, puede hacer una búsqueda y reemplazarlas en Excel para convertirlas.

Ya sea usando una fórmula o cambiando los datos, la clave para elegir delimitadores nunca es usar caracteres que puedan estar en los datos reales. Por eso recomiendo los caracteres ascii de bajo nivel.

spioter
fuente
-1

También es posible eliminar estas comillas dobles colocando su resultado en la función "Limpiar".

Ejemplo:

=CLEAN("1"&CHAR(9)&"SOME NOTES FOR LINE 1."&CHAR(9)&"2"&CHAR(9)&"SOME NOTES FOR LINE 2.")

La salida se pegará sin las comillas dobles en otros programas como Notepad ++.

Yuri Antelo
fuente
Esta es una respuesta duplicada. También limpiar tiras de saltos de línea, tabuladores, etc.
posfan12