Tralascia le virgolette durante la copia dalla cella


90

Problema :
quando si copia una cella da Excel al di fuori del programma, le virgolette doppie vengono aggiunte automaticamente.

Dettagli :
utilizzo Excel 2007 su una macchina Windows 7. Se ho una cella con la seguente formula:

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

L'output nella cella (formattato come numero) ha questo aspetto in Excel:

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

Buona e giusta. Ma, se copio la cella in un altro programma, come il blocco note, ottengo fastidiosi doppi apici all'inizio e alla fine. Notare che le schede create da "CHAR (9)" vengono mantenute, il che è positivo.

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

Come posso evitare che queste virgolette vengano visualizzate quando copio su un altro programma? In altre parole, posso impedire che vengano aggiunti automaticamente quando la cella viene copiata negli appunti?


Hai provato a cambiare il formato in qualcosa di diverso dal numero? Penso di aver visto dei modi per aggirare questo, ma non riesco ad aprire Excel in questo momento esatto, tornerò tra pochi minuti se non c'è ancora risposta.
AdamMc331

@ McAdam331 sulla mia configurazione, se il formato è qualcosa di simile al testo, la cella sposta la formula, non il risultato calcolato. La formattazione come numero sembra sovrascriverla per qualche motivo.
Aaron Thomas

Perché hai scelto di utilizzare la formula? È perché Excel non supporta un modo semplice per inserire caratteri di tabulazione? Non riesco a risolvere nemmeno questo, forse ci sono opzioni diverse da Excel che puoi usare ma non sono sicuro di quale sia la natura del progetto.
AdamMc331

Inoltre, potrebbe essere una seccatura, ma se apri Excel e inizi a digitare in una cella (che è formattata per impostazione predefinita come Generale) e inserisci il testo, verrà copiato senza virgolette. (Testato utilizzando Excel 2013 e Notepad ++) Influirà sul tuo progetto inserendo solo 4 spazi invece di una scheda? Di nuovo, difficile dirlo senza conoscere il resto del problema.
AdamMc331

1
@ McAdam331 purtroppo ho bisogno che funzioni esattamente come ho inserito qui, meno le virgolette iniziali e finali. Per favore, non lasciare che le schede distolgano il centro di questa domanda: devono essere lì.
Aaron Thomas

Risposte:


28

Se provi a incollare in Word-Pad, Notepad ++ o Word non avresti questo problema. Per copiare il valore della cella come testo puro, per ottenere ciò che descrivi devi utilizzare una macro:

Nella cartella di lavoro in cui si desidera applicare ciò (o nel Personal.xls se si desidera utilizzarlo su più cartelle di lavoro), inserire il codice seguente in un modulo standard:

Codice:

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

Per aggiungere un modulo standard al tuo progetto (cartella di lavoro), apri VBE con Alt+, F11quindi fai clic con il pulsante destro del mouse sulla cartella di lavoro nella finestra del progetto in alto a sinistra e seleziona Inserisci> Modulo. Incolla il codice nella finestra del modulo del codice che si aprirà a destra.

Di nuovo in Excel, vai su Strumenti> Macro> Macro e seleziona la macro chiamata "CopyCellContents", quindi scegli Opzioni dalla finestra di dialogo. Qui puoi assegnare la macro a un tasto di scelta rapida (ad esempio, come CTRL+ Cper la copia normale) - Ho usato CTRL+ Q.

Quindi, quando vuoi copiare una singola cella su Blocco note / ovunque, fai semplicemente Ctrl + q (o qualunque cosa tu scelga) e poi fai un CTRL+ Vo Modifica> Incolla nella destinazione scelta.

La mia risposta è copiata (con poche aggiunte) da: qui

EDIT : (dai commenti)

Se non trovi la libreria Microsoft Forms 2.0 nell'elenco dei riferimenti, puoi provare

  • cercando invece FM20.DLL (grazie @Peter Smallwood)
  • facendo clic su Sfoglia e selezionando C:\Windows\System32\FM20.dll(Windows a 32 bit) (grazie @JWhy)
  • facendo clic su Sfoglia e selezionando C:\Windows\SysWOW64\FM20.dll (su 64 bit)

1
Sembra che VBA sia l'unica soluzione a questo, grazie per l'input.
Aaron Thomas

1
Se non riesci a vedere la libreria di Microsoft Forms nell'elenco dei riferimenti, cerca FM20.DLL
Peter Smallwood

15
Continuo a ricevere le virgolette se incollo in Notepad ++.
Kat

1
@monkeyintern Penso di avere più righe di testo in una cella e dividerle in una riga per cella mi ha permesso di aggirarlo.
Kat

2
@ user3616725 Le versioni aggiornate potrebbero aver modificato questo comportamento, ma le versioni correnti di Word e Notepad ++ (a partire dalla data di pubblicazione di questo commento) incollano queste virgolette quando si seleziona una singola o più celle.
Tony,

80

Ho appena avuto questo problema e avvolgere ogni cella con la CLEANfunzione lo ha risolto per me. Questo dovrebbe essere relativamente facile da fare =CLEAN(, selezionando la cella e quindi riempiendo automaticamente il resto della colonna. Dopo averlo fatto, le incolla in Blocco note o in qualsiasi altro programma non avevano più virgolette duplicate.


20
Buona risposta per cancellare virgolette extra, ma purtroppo cancella anche i caratteri di tabulazione ... che, nella domanda, voglio mantenere. Grazie per il contributo però!
Aaron Thomas

Questo ha funzionato per me, non mi importava delle schede - in realtà volevo che tutte e i caratteri di nuova riga fossero comunque rimossi.
Cody

19
Rimuove tutti i caratteri ASCII inferiori a 32. Quindi anche nuove righe.
NeplatnyUdaj

1
Questa è la vera risposta.
Tyler Murry

10
Questa non è una buona soluzione in quanto rimuove tutti i caratteri speciali.
Paul,

25

Prima incollalo in Word, quindi puoi incollarlo nel blocco note e apparirà senza virgolette


Grazie per l'input, ma non posso contrassegnarlo come una buona soluzione. Inoltre, è un duplicato di una soluzione che è già stata offerta a questa domanda, vedere stackoverflow.com/a/24913557/2658159 .
Aaron Thomas

4
Grazie, mi è piaciuta questa soluzione. Facile e veloce
Bajal

Upvoting questo ... nel mio caso, il mio problema era che, per un particolare tipo di richiesta che ricevo, i dati arrivano in un file Excel e devo incollarli in una casella di testo normale. Quando lo faccio, ottengo le virgolette. Avevo usato un editor di testo per rimuovere le virgolette extra (anche le virgolette .. fastidioso!). Alla ricerca di una soluzione semplice, ho scoperto che incollare prima su Word funziona poiché le virgolette extra sono sparite. Vorrei poter votare questo 10x :)
Carnix

Questo rimuoverà i caratteri di tabulazione. Almeno quando si usa la parola, non sono sicuro di wordpad
Matthew Lueder

Questa è la migliore soluzione anche per oggi.
zygimantus

6

Se vuoi selezionare più celle e copiare i loro valori negli appunti senza tutte quelle fastidiose virgolette, il codice seguente può essere utile. Questo è un miglioramento del codice fornito sopra da 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

Penso che questa sia la migliore risposta finora.
posfan12

2
Visualizza la mia risposta basata su questa risposta che risolve i seguenti bug con essa: 1. Converti una cella vuota in una stringa vuota anziché "0". 2. Aggiungi Tab (ASCII 9) e CR (ASCII 13) dopo ogni cella. 3. Aggiungere una CR (ASCII 13) + LF (ASCII 10) (rispetto a CR (ASCII 13)) dopo ogni riga. NOTA: non sarai ancora in grado di copiare i caratteri incorporati in una cella che causerebbero un'uscita dal campo di destinazione in cui stai incollando quella cella (ad esempio Tab o CR quando incolli nella finestra Modifica tabella di accesso o SSMS).
Tom

^ Corregge anche l'errore del compilatore "Variabile non definita" (per la variabile "CR").
Tom

4

La mia soluzione quando ho riscontrato il problema delle virgolette è stata quella di rimuovere i ritorni a capo dalla fine del testo delle mie celle. A causa di questi ritorni a capo (inseriti da un programma esterno), Excel aggiungeva le virgolette all'intera stringa.


4
Le virgolette possono anche essere il risultato di CR / LF all'interno della formula (non necessariamente alla fine), o di una scheda come nella domanda originale di questo thread (char (9)).
Turbo

mi hai davvero reso la vita facile
dE Fonte

3

Possibile problema in relazione alla risposta da "user3616725":
Sono su Windows 8.1 e sembra esserci un problema con il codice VBA collegato dalla risposta accettata da "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

Dettagli:
eseguendo il codice sopra e incollando gli appunti in una cella in Excel, ottengo due simboli composti da quadrati con un punto interrogativo all'interno, in questo modo: ⍰⍰. Incollare in Blocco note non mostra nemmeno nulla.

Soluzione:
Dopo aver cercato per un po 'di tempo ho trovato un altro script VBA dell'utente "Nepumuk" che utilizza l'API di Windows . Ecco il suo codice che finalmente ha funzionato per me:

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

Per usarlo allo stesso modo del primo codice VBA dall'alto, cambia il Sub "Beispiel ()" da:

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

Per:

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

Ed eseguilo tramite il menu macro di Excel come suggerito da "user3616725" dalla risposta accettata:

Di nuovo in Excel, vai su Strumenti> Macro> Macro e seleziona la macro chiamata "CopyCellContents", quindi scegli Opzioni dalla finestra di dialogo. Qui puoi assegnare la macro a un tasto di scelta rapida (ad esempio, come Ctrl + c per la copia normale) - Ho usato Ctrl + q.

Quindi, quando vuoi copiare una singola cella su Blocco note / ovunque, fai semplicemente Ctrl + q (o qualunque cosa tu scelga) e poi fai Ctrl + vo Modifica> Incolla nella destinazione scelta.


Modifica (21 novembre 2015):
@ commento da "dotctor":
No, questa non è davvero una nuova domanda! A mio parere è una buona aggiunta per la risposta accettata poiché la mia risposta affronta i problemi che puoi affrontare quando utilizzi il codice dalla risposta accettata. Se avessi più reputazione, avrei creato un commento.
@ commento da "Teepeemm":
Sì, hai ragione, le risposte che iniziano con il titolo "Problema:" sono fuorvianti. Modificato in: "Possibile problema in relazione alla risposta da" user3616725 ":". Come commento sicuramente avrei scritto molto più compatto.


Penso che questo funzioni come una risposta valida (anche se l'apertura con Problem ha fatto sembrare che tu avessi un nuovo problema). E i commenti sono limitati a 600 caratteri, quindi sarebbe decisamente troppo lungo per quello.
Teepeemm

Meraviglioso Grazie! L'unico problema sembra essere che funziona solo per una singola cella. Può essere migliorato in qualche modo per consentire la copia degli intervalli?
NeplatnyUdaj

3

"Se vuoi selezionare più celle e copiare i loro valori negli Appunti senza tutte quelle fastidiose virgolette" ( senza i bug nella soluzione multi-cella di Peter Smallwood) "il seguente codice potrebbe essere utile." Questo è un miglioramento del codice dato sopra da Peter Smallwood (che "è un miglioramento del codice dato sopra da user3616725"). Questo risolve i seguenti bug nella soluzione di Peter Smallwood:

  • Evita "Variabile non definita" Errore del compilatore (per "CR" - "clibboardFieldDelimiter" qui)
  • Converti una cella vuota in una stringa vuota rispetto a "0".
  • Aggiungi tabulazione (ASCII 9) rispetto a CR (ASCII 13) dopo ogni cella.
  • Aggiungi una CR (ASCII 13) + LF (ASCII 10) (rispetto a CR (ASCII 13)) dopo ogni riga.

NOTA: non sarai ancora in grado di copiare i caratteri incorporati in una cella che causerebbero un'uscita dal campo di destinazione in cui stai incollando quella cella (ad esempio Tab o CR quando incolli nella finestra Modifica tabella di accesso 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

0

Per mantenere le interruzioni di riga quando si incolla nel blocco note, sostituire questa riga nella macro:

strTemp = ActiveCell.Value

di:

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

0

Si prega di utilizzare la formula seguente

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

e otterrai quello che vuoi ;-)


2
Questo fa il trucco, ma rimuove la mia formattazione (Nuove righe e schede)
Gabriel G

0

Puoi farlo in una macro di Excel tramite VBA, inviando i risultati a un file:

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 vuoi ottenere nomi di file e contenuto in più file, ecco un breve snippet che evita le virgolette doppie attorno all'output.

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 la formula ha più righe (significa avere un'interruzione di riga nella formula), copia incolla funzionerà in questo modo
  • se è possibile rimuovere più righe, non verranno visualizzate virgolette durante la copia e incolla.
  • altrimenti usa la funzione CLEAN come detto da @greg nella risposta precedente

0

Nota: la causa delle virgolette è che quando i dati si spostano da Excel agli appunti, sono completamente conformi agli standard CSV che includono valori di virgolette che includono tabulazioni, nuove righe ecc. (E i caratteri virgolette vengono sostituiti con due virgolette doppie)

Quindi un altro approccio, specialmente come nel caso di OP quando le tabulazioni / nuove linee sono dovute alla formula, consiste nell'usare caratteri alternativi per tabulazioni e ritorni rigidi. Io uso ascii Unit Separator = char (31) per le tabulazioni e ascii Record Separator = char (30) per le nuove righe.

Quindi incollare nell'editor di testo non comporterà le regole CSV aggiuntive e puoi fare una rapida ricerca e sostituire per convertirle di nuovo.

Se le tabulazioni / nuove righe sono incorporate nei dati, puoi fare una ricerca e sostituire in Excel per convertirle.

Sia che si utilizzi la formula o che si modifichino i dati, la chiave per scegliere i delimitatori non è mai utilizzare caratteri che possono essere nei dati effettivi. Questo è il motivo per cui raccomando i caratteri ASCII di basso livello.


-1

È anche possibile rimuovere questi doppi apici posizionando il risultato sulla funzione "Pulisci".

Esempio:

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

L'output verrà incollato senza le virgolette su altri programmi come Notepad ++.


Questa è una risposta duplicata. CLEAN elimina anche le nuove righe, le schede, ecc.
posfan12
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.