Deixe aspas ao copiar do celular


90

Problema :
Ao copiar uma célula do Excel fora do programa, aspas duplas são adicionadas automaticamente.

Detalhes :
estou usando o Excel 2007 em uma máquina com Windows 7. Se eu tiver uma célula com a seguinte fórmula:

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

A saída na célula (formatada como número) se parece com isto no Excel:

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

Bem e bom. Mas, se eu copiar a célula para outro programa, como o bloco de notas, recebo aspas duplas irritantes no início e no final. Observe que as guias criadas por "CHAR (9)" são mantidas, o que é bom.

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

Como posso evitar que essas aspas duplas apareçam quando copio para outro programa? Em outras palavras, posso evitar que sejam adicionados automaticamente quando a célula é copiada para a área de transferência?


Você já tentou alterar o formato para algo diferente do número? Acho que já vi maneiras de contornar isso, mas não consigo abrir o Excel neste exato momento, voltarei em alguns minutos se ainda não houver resposta.
AdamMc331

@ McAdam331 na minha configuração, se o formato for algo como texto, a célula exibe a fórmula, não o resultado calculado. A formatação como um número parece substituir isso por algum motivo.
Aaron Thomas

Por que você optou por usar a fórmula? É porque o Excel não oferece suporte a uma maneira fácil de inserir caracteres de tabulação? Também não consigo contornar isso, talvez haja outras opções além do Excel que você possa usar, mas não tenho certeza de qual é a natureza do projeto.
AdamMc331

Além disso, pode ser um incômodo, mas se você abrir o Excel e começar a digitar em uma célula (que é formatada por padrão como Geral) e inserir um texto, ele será copiado sem as aspas. (Testado usando Excel 2013 e Notepad ++) Irá afetar seu projeto apenas inserir 4 espaços em vez de uma guia? Novamente, é difícil dizer sem saber o resto do problema.
AdamMc331

1
@ McAdam331, infelizmente, preciso que isso funcione exatamente como coloquei aqui, sem as aspas duplas à esquerda e à direita. Por favor, não deixe as guias desviarem o foco desta questão - elas devem estar lá.
Aaron Thomas

Respostas:


28

Se você tentar colar no Word-Pad, Notepad ++ ou Word, você não terá esse problema. Para copiar o valor da célula como texto puro, para alcançar o que você descreve, você deve usar uma macro:

Na pasta de trabalho onde você deseja que isso se aplique (ou em seu Personal.xls se desejar usar em várias pastas de trabalho), coloque o seguinte código em um módulo padrão:

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 adicionar um módulo padrão ao seu projeto (pasta de trabalho), abra o VBE com Alt+ F11e, a seguir, clique com o botão direito em sua pasta de trabalho na janela de projeto superior esquerda e selecione Inserir> Módulo. Cole o código na janela do módulo de código que será aberta à direita.

De volta ao Excel, vá em Ferramentas> Macro> Macros e selecione a macro chamada "CopyCellContents" e escolha Opções na caixa de diálogo. Aqui você pode atribuir a macro a uma tecla de atalho (por exemplo, CTRL+ Cpara cópia normal) - Eu usei CTRL+ Q.

Então, quando você quiser copiar uma única célula para o Bloco de notas / qualquer lugar, basta fazer Ctrl + q (ou o que você escolher) e depois fazer CTRL+ Vou Editar> Colar no destino escolhido.

Minha resposta foi copiada (com alguns acréscimos) de: aqui

EDITAR : (de comentários)

Se você não encontrar a Biblioteca do Microsoft Forms 2.0 na lista de referências, pode tentar

  • procurando FM20.DLL (obrigado @Peter Smallwood)
  • clicando em Navegar e selecionando C:\Windows\System32\FM20.dll(Windows de 32 bits) (obrigado @JWhy)
  • clicando em Navegar e selecionando C:\Windows\SysWOW64\FM20.dll (em 64 bits)

1
Parece que o VBA é a única solução para isso - obrigado pela contribuição.
Aaron Thomas

1
Se você não consegue ver a biblioteca do Microsoft Forms na lista de referências, procure FM20.DLL
Peter Smallwood

15
Ainda recebo as aspas se colar no Notepad ++.
Kat de

1
@monkeyintern Acho que tinha várias linhas de texto em uma célula e dividi-las em uma linha por célula me permitiu contornar isso.
Kat

2
@ user3616725 As versões atualizadas podem ter alterado esse comportamento, mas as versões atuais do Word e do Notepad ++ (a partir da data de postagem deste comentário) colam essas aspas quando uma ou várias células são selecionadas.
Tony

80

Acabei de ter esse problema e encapsular cada célula com a CLEANfunção consertou para mim. Isso deve ser relativamente fácil de fazer =CLEAN(, selecionando sua célula e, em seguida, preenchendo automaticamente o restante da coluna. Depois que fiz isso, as colações no bloco de notas ou em qualquer outro programa não tinham mais citações duplicadas.


20
Boa resposta para apagar aspas extras, mas infelizmente também apaga os caracteres de tabulação ... que, na pergunta, quero manter. Obrigado pela contribuição!
Aaron Thomas

Isso funcionou para mim, eu não me importava com as guias - na verdade, eu queria todas elas e os caracteres de nova linha removidos de qualquer maneira.
Cody,

19
Ele remove todos os caracteres ASCII abaixo de 32. Portanto, novas linhas também.
NeplatnyUdaj

1
Esta é a verdadeira resposta.
Tyler Murry

10
Esta não é uma boa solução, pois remove todos os caracteres especiais.
Paul,

25

Primeiro cole no Word, depois você pode colá-lo no bloco de notas e ele aparecerá sem as aspas


Obrigado pela contribuição, mas não posso marcar isso como uma boa solução. Além disso, é uma duplicata de uma solução que já foi oferecida para essa questão, consulte stackoverflow.com/a/24913557/2658159 .
Aaron Thomas

4
Obrigado, gostei desta solução. Rápido e fácil
Bajal

Votar positivamente neste ... no meu caso, meu problema é que, para um tipo específico de solicitação que recebo, os dados vêm em um arquivo do Excel e preciso colá-los em uma caixa de texto simples. Quando faço isso, recebo as aspas. Eu tinha usado um editor de texto para remover as aspas extras (citava citações também .. irritante!). Procurando uma solução simples, descobri que colar no Word funciona primeiro, pois as aspas extras sumiram. Gostaria de ter um
voto positivo de

Isso removerá os caracteres de tabulação. Pelo menos ao usar o word, não tenho certeza sobre o wordpad
Matthew Lueder

Esta é a melhor solução até hoje.
zygimantus de

6

Se você deseja selecionar várias células e copiar seus valores para a área de transferência sem todas aquelas aspas irritantes, o código a seguir pode ser útil. Este é um aprimoramento do código fornecido acima pelo usuário 3616725.

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

Acho que esta é a melhor resposta até agora.
posfan12

2
Veja minha resposta com base nesta resposta que corrige os seguintes bugs: 1. Converta uma célula vazia em uma string vazia vs. "0". 2. Apêndice Tab (ASCII 9) vs. CR (ASCII 13) após cada célula. 3. Anexe um CR (ASCII 13) + LF (ASCII 10) (vs. CR (ASCII 13)) após cada linha. NOTA: Você ainda não será capaz de copiar caracteres incorporados em uma célula que causaria uma saída do campo de destino em que você está colando essa célula (ou seja, guia ou CR ao colar na janela Editar tabela de acesso ou SSMS).
Tom

^ Também corrige o erro do compilador "Variável não definida" (para a variável "CR").
Tom

4

Minha solução quando cheguei ao problema das aspas foi retirar os retornos de carro do final do texto das minhas células. Por causa desses retornos de carro (inseridos por um programa externo), o Excel estava adicionando aspas a toda a string.


4
As aspas também podem ser resultado de CR / LF dentro da fórmula (não necessariamente no final), ou uma guia como na questão original deste tópico (char (9)).
Turbo

você realmente facilitou minha vida
dE Source

3

Possível problema em relação à resposta de "user3616725":
Estou no Windows 8.1 e parece haver um problema com o código VBA vinculado da resposta aceita 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

Detalhes:
Executando o código acima e colando a área de transferência em uma célula do Excel, recebo dois símbolos compostos de quadrados com um ponto de interrogação dentro, como este: ⍰⍰. Colar no bloco de notas nem mostra nada.

Solução:
Depois de pesquisar por algum tempo, encontrei outro script VBA do usuário "Nepumuk" que faz uso da API do Windows . Aqui está seu código que finalmente funcionou para mim:

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 usá-lo da mesma forma que o primeiro código VBA acima, altere o Sub "Beispiel ()" de:

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

Para:

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

E execute-o através do menu de macro do Excel, conforme sugerido em "user3616725" a partir da resposta aceita:

De volta ao Excel, vá em Ferramentas> Macro> Macros e selecione a macro chamada "CopyCellContents" e escolha Opções na caixa de diálogo. Aqui você pode atribuir a macro a uma tecla de atalho (por exemplo, Ctrl + c para cópia normal) - usei Ctrl + q.

Então, quando você quiser copiar uma única célula para o Bloco de notas / qualquer lugar, basta fazer Ctrl + q (ou o que você escolher) e então fazer Ctrl + v ou Editar> Colar no destino escolhido.


Edit (21 de novembro de 2015):
@ comentário de "dotctor":
Não, essa pergunta realmente não é nova! Em minha opinião, é um bom acréscimo para a resposta aceita, pois minha resposta aborda problemas que você pode enfrentar ao usar o código da resposta aceita. Se eu tivesse mais reputação, teria criado um comentário.
@ comentário de "Teepeemm":
Sim, você está certo, as respostas que começam com o título "Problema:" são enganosas. Alterou para: "Possível problema em relação à resposta do" usuário3616725 ":". Como um comentário, certamente teria escrito de forma muito mais compacta.


Acho que isso funciona como uma resposta válida (embora abrir com Problema fez parecer que você tinha um novo problema). E os comentários são limitados a 600 caracteres, então definitivamente seria muito longo para isso.
Teepeemm

Maravilhoso! Obrigado! O único problema parece ser que só funciona para uma única célula. Pode ser melhorado de alguma forma para permitir a cópia de intervalos?
NeplatnyUdaj

3

"Se você deseja selecionar várias células e copiar seus valores para a área de transferência sem todas aquelas aspas irritantes" ( sem os bugs na solução de várias células de Peter Smallwood) "o código a seguir pode ser útil." Este é um aprimoramento do código fornecido acima por Peter Smallwood (que "é um aprimoramento do código fornecido acima pelo usuário 3616725"). Isso corrige os seguintes bugs na solução de Peter Smallwood:

  • Evita "Variável não definida" Erro do compilador (para "CR" - "clibboardFieldDelimiter" aqui)
  • Converta uma célula vazia em uma string vazia vs. "0".
  • Append Tab (ASCII 9) vs. CR (ASCII 13) após cada célula.
  • Anexe um CR (ASCII 13) + LF (ASCII 10) (vs. CR (ASCII 13)) após cada linha.

NOTA: Você ainda não será capaz de copiar caracteres incorporados em uma célula que causaria uma saída do campo de destino em que você está colando essa célula (ou seja, guia ou CR ao colar na janela Editar tabela de acesso ou 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

0

Para manter as quebras de linha ao colar no bloco de notas, substitua esta linha na macro:

strTemp = ActiveCell.Value

de:

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

0

Use a fórmula abaixo

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

e você obterá o que deseja ;-)


2
Isso funciona, mas remove minha formatação (novas linhas e guias)
Gabriel G

0

Você pode fazer isso em uma macro do Excel via VBA, enviando os resultados para um arquivo:

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

E se você deseja obter nomes de arquivos e conteúdo em vários arquivos, aqui está um pequeno trecho que evita aspas duplas na saída.

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

0
  • se a fórmula tiver várias linhas (significa ter uma quebra de linha na fórmula), copiar e colar funcionará dessa forma
  • se puder remover várias linhas, nenhuma aspas aparecerá enquanto copia e cola.
  • caso contrário, use a função CLEAN como dito por @greg na resposta anterior

0

Observação: a causa das aspas é que, quando os dados passam do Excel para a área de transferência, eles estão em total conformidade com os padrões CSV, que incluem valores de citação que incluem tabulações, novas linhas, etc. (e os caracteres de aspas duplas são substituídos por dois caracteres de aspas duplas)

Portanto, outra abordagem, especialmente no caso do OP, quando as tabulações / novas linhas são devidas à fórmula, é usar caracteres alternativos para tabulações e retornos permanentes. Eu uso ascii Unit Separator = char (31) para guias e ascii Record Separator = char (30) para novas linhas.

Então, colar no editor de texto não envolverá as regras CSV extras e você pode fazer uma pesquisa rápida e substituí-las para convertê-las novamente.

Se as guias / novas linhas estiverem embutidas nos dados, você pode fazer uma pesquisa e substituir no Excel para convertê-los.

Seja usando uma fórmula ou alterando os dados, a chave para escolher os delimitadores nunca é usar caracteres que podem estar nos dados reais. É por isso que eu recomendo os personagens ascii de baixo nível.


-1

Também é possível remover essas aspas duplas, colocando seu resultado na função "Limpar".

Exemplo:

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

A saída será colada sem as aspas duplas em outros programas, como o Notepad ++.


Esta é uma resposta duplicada. CLEAN também
remove
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.