1. FYI - Copying CSV data to the clipboard for Excel
- Posted by Jonas Temple <jtemple at yhti.net> Oct 15, 2004
- 898 views
- Last edited Oct 16, 2004
All, For those who ever wanted to copy the contents of a list view to the clipboard to be opened by Excel, I submit the following procedure:
procedure CopyToClipPI_onClick(integer self, integer event, sequence params)--params is () sequence lv_select, lv_data, wrk_text, columns atom rtn_code, wrk_text_p, csv_fmt_p, clip_format -- Get the CSV clipboard format csv_fmt_p = allocate_string("Csv") clip_format = w32Func(xRegisterClipboardFormat,{csv_fmt_p}) free(csv_fmt_p) -- Open the clipboard rtn_code = w32Func(xOpenClipboard, {getHandle(Main)}) if rtn_code then -- Clean out the clipboard rtn_code = w32Func(xEmptyClipboard,{}) -- First load the column names wrk_text = {} columns = getColumnHeadings(ResultsLV) for i = 1 to length(columns) do wrk_text &= columns[i][2] if i < length(columns) then wrk_text &= "," else wrk_text &= "\n" end if end for -- Now get the selected rows lv_select = getLVSelected(ResultsLV) for i = 1 to length(lv_select) do -- Get the data for the selected row lv_data = getLVAllText(ResultsLV, lv_select[i]) -- Add on the data columns for x = 1 to length(lv_data) do wrk_text &= lv_data[x] if x < length(lv_data) then wrk_text &= "," else wrk_text &= "\n" end if end for end for -- Append a null terminator wrk_text &= #00 -- Put to the clipboard wrk_text_p = allocate_string(wrk_text) rtn_code = w32Func(xSetClipboardData,{clip_format,wrk_text_p}) -- Close the clipboard w32Proc(xCloseClipboard,{}) -- free the memory free(wrk_text_p) end if end procedure
At first I tried CF_TEXT as the format for the call to SetClipboardData but it'd didn't parse the fields out in Excel. After searching the new for some examples I found the call to RegisterClipboardFormat is needed in this case to get the format value to pass to SetClipboardData. Jonas Temple http://www.yhti.net/~jktemple