Microsoft KB Archive/216676

= How To Add Custom Table to the Clipboard to be Pasted into Word =

Article ID: 216676

Article Last Modified on 6/29/2004

-

APPLIES TO


 * Microsoft Office XP Developer Edition
 * Microsoft Office 2000 Developer Edition
 * Microsoft Office Word 2003
 * Microsoft Word 2002 Standard Edition
 * Microsoft Word 2000 Standard Edition
 * Microsoft Word 97 Standard Edition
 * Microsoft Visual C++ 5.0 Enterprise Edition
 * Microsoft Visual C++ 6.0 Enterprise Edition
 * Microsoft Visual C++ 5.0 Professional Edition
 * Microsoft Visual C++ 6.0 Professional Edition
 * Microsoft Visual C++ 6.0 Standard Edition

-



This article was previously published under Q216676



SUMMARY
This article shows how to place a custom table on the clipboard so that it is recognized by Microsoft Word as a table when pasting into a document.



MORE INFORMATION
When pasting text into a document, Microsoft Word does not recognize common table formats such as tab-delimited text and CSV (Comma Separated Values). However, it does recognize Rich Text Format (RTF). By building your custom table in RTF and adding it to the clipboard, you can then paste the information into Word as a properly formatted table.

The following code demonstrates how to add a table to the clipboard in both RTF and tab-delimited text so it can be pasted into Microsoft Word and/or Microsoft Excel:

// Open the clipboard... if(!OpenClipboard) { ::MessageBox(NULL, "Cannot open clipboard.", "Error", 0x10010); return; }

// Get Clipboard format id for RTF. UINT cf = RegisterClipboardFormat("Rich Text Format");

// Empty anything already there... EmptyClipboard;

// *** This section of code adds the RTF table to the clipboard // *** RTF-Data to put on clipboard const char *text = "{\\rtf1\\par " "\\trowd \\trgaph30\\trleft-30\\trrh262\\cellx980\\cellx1991\\cellx3001" "\\intbl \\qr \\f0\\fs20 \\cf 1\\cell \\qr 2\\cell\\qr 3\\cell \\intbl \\row" "\\trowd \\trgaph30\\trleft-30\\trrh262\\cellx980\\cellx1991\\cellx3001" "\\intbl \\qr \\f0\\fs20 \\cf 4\\cell \\qr 5\\cell\\qr 6\\cell \\intbl \\row}";

// Allocate global memory for transfer... HGLOBAL hText = GlobalAlloc(GMEM_MOVEABLE |GMEM_DDESHARE, strlen(text)+4);

// Put our string in the global memory... char *ptr = (char *)GlobalLock(hText); strcpy(ptr, text); GlobalUnlock(hText);

// Put data on the clipboard!
 * SetClipboardData(cf, hText);

// Free memory... GlobalFree(hText);

// *** Now, add a version of the same data as tab-delimited text... // *** This will be used by Microsoft Excel char *text2 = "1\t2\t3\n4\t5\t6";

// Allocate global memory for transfer... hText = GlobalAlloc(GMEM_MOVEABLE |GMEM_DDESHARE, strlen(text2)+4);

// Put our string in the global memory... ptr = (char *)GlobalLock(hText); strcpy(ptr, text2); GlobalUnlock(hText);

// Put data on the clipboard as CF_TEXT
 * SetClipboardData(CF_TEXT, hText);

// Free memory... GlobalFree(hText);

// Close clipboard... CloseClipboard;

