I think cells which contain tabs, linebreaks or quotes must be quoted when copying to the clipboard: tab is the column separator, linebreak the row separator, and quotation marks are the quoting identifiers. The current grid code does not take care of the quote case.
Open grids.pas, find procedure TCustomStringGrid.CopyCellRectToClipboard and add the condition pos('"', s) > 0 to the local function QuoteText. The entire function should read now like this:
function QuoteText(s: string): string;
begin
DoCellProcess(aCol, aRow, cpCopy, s);
if (pos(#9, s)>0) or
(pos(#10, s)>0) or
(pos(#13, s)>0) or
(pos('"', s)>0) // <--- NEW
then
result := AnsiQuotedStr(s, '"')
else
result := s;
end;
With this modifcation, copy & and paste within the grid and also to and from Excel works correctly for me, also for these rare cases for which a cell contains tabs, lineendings, and quotes.