How to copy columns in excel and paste into first column of text file without word wrapping
-
How to copy columns from excel into Note++. I have a text file for example:
1234:text:text1
5678:text:text2
9087:text:text3I know how to select the first column of numbers. I need to be able to copy new numbers in excel column and paste into the text file. When I paste from excel, it doesn’t paste over 1234, 5678, 9087. It word wraps by pasting all three sets of numbers in each row like:
Excel column
5920
3945
45095920
3945
4509:text:text1
5920
3945
4509:text:text2
5920
3945
4509:text:text3Thanks,
Mark
-
@Mark-E-Chapman said:
How to copy columns from excel into Note++.
The issue is that when you copy from Excel, Excel embeds the newlines in the clipboard in a way that is incompatible with column-paste on Notepad++.
The best solution that I know of:
-
copy from Excel, paste normally into a temporary location in Notepad++ (a tmp file, or at the end or beginning of your document, or something); after this step, it will look something like:
1234:text:text1 5678:text:text2 9087:text:text3 5920 3945 4509 -
then column-copy in Notepad++, and column-paste over the column-selection you want to replace. Now it will look like
5920:text:text1 3945:text:text2 4509:text:text3 5920 3945 4509 -
Delete the tmp file or the temporary paste in your real file
5920:text:text1 3945:text:text2 4509:text:text3
Hope this helps.
-
-
@PeterJones said:
embeds the newlines in the clipboard in a way that is incompatible with column-paste on Notepad++
Just a side note, for it to be compatible, it would have to be copied (by Excel, or whatever) with a special clipboard format; here’s some code from Notepad++ 's source code that illustrates what would be needed:
// There does not seem to be a real standard for indicating that the clipboard // contains a rectangular selection, so copy Developer Studio and Borland Delphi. cfColumnSelect = static_cast<CLIPFORMAT>(::RegisterClipboardFormat(TEXT("MSDEVColumnSelect"))); cfBorlandIDEBlockType = static_cast<CLIPFORMAT>(::RegisterClipboardFormat(TEXT("Borland IDE Block Type"))); -
Peter, this worked. Thanks. Alan, that is too technical for myself. I wouldn’t know where to put that code! :) Thanks though. Mark
-
@Mark-E-Chapman said:
Peter, this worked.
Great news.
Thanks. Alan, that is too technical for myself. I wouldn’t know where to put that code!
Alan was giving a technical aside about how it’s implemented in the source code, not recommending that you try to put that anywhere.
@Alan-Kilborn / other PythonScript gurus,
I was able to confirm with an external clipboard-browsing tool that those two entries get set to empty content when it’s copied in column-copy mode inside Notepad++. I’m starting to research whether win32clipboard could be used to inject those two entries into the clipboard before doing the column-paste from Excel. But I might not be able to get more done on it for a few days, so if someone wants to beat me to the punch and publish here, that’d be fine with me.
-
I did some research on msdn and it seems that you register a new format at process startup and then use SetClipboardData with that
registered format to copy and call GetClipboardData, again with the registered format, to retrieve/paste it.So, without having any experience using clipboard object, I assume one needs to
check if the data in the clipboard is of one of the registered formats, but at first glance I haven’t seen
a function which would do this. Maybe it is sufficient to check if GetClipboardData returns a handle or NULL
to see that the data is in the required format.
You made me curious, I guess I will give it a try tomorrow to see how it actually works.I had some dejavu when reading that thread and found two other threads discussing similar question.
https://notepad-plus-plus.org/community/topic/12525/replace-current-line-without-inserting-a-new-line
https://notepad-plus-plus.org/community/topic/13085/way-to-tell-if-clipboard-has-column-block-in-it-before-pastingNot exactly the same but good enough to get started. :-)
-
Looks like this works if the number of selected rows are equal to the the number of selections from the editor. Tested with LibreOffice Calc.
import ctypes def custom_paste(): if ctypes.windll.user32.OpenClipboard(None): try: clipboard_handle = ctypes.windll.user32.GetClipboardData(1) if clipboard_handle: pointer_to_content = ctypes.windll.kernel32.GlobalLock(clipboard_handle) clipboard_data = ctypes.c_char_p(pointer_to_content).value ctypes.windll.kernel32.GlobalUnlock(clipboard_handle) else: raise ValueError('Invalid clipboard handle') except Exception as e: print('Error', e.message) return finally: # ensures that clipboard will be closed even in case of an exception ctypes.windll.user32.CloseClipboard() # there was no exception - start replacing targets lines = clipboard_data.splitlines() if len(lines) == editor.getSelections(): for i, line in enumerate(lines): editor.setTarget(editor.getSelectionNStart(i), editor.getSelectionNEnd(i)) editor.replaceTarget(line) else: print('Unable to open the clipboard - try again later') custom_paste() -
A Alan Kilborn referenced this topic on
Hello! It looks like you're interested in this conversation, but you don't have an account yet.
Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.
With your input, this post could be even better 💗
Register Login