Задача копирования + вставка CR + LF в таблицу Excel нуждаются в мягком абзаце (Alt + Enter) - PullRequest
1 голос
/ 04 февраля 2010

Я пытаюсь скопировать таблицу, созданную в нашем программном обеспечении, в электронную таблицу Excel.

Некоторые заголовки заголовка в нашем приложении слишком велики, чтобы поместиться в столбце, поэтому они разделены # 13 + # 10 (CR + LF), поэтому они находятся на следующей строке.например,

Strain  SpikeConc  Spike
        ng/g       dpm/g
-------------------------
Blah    20.0       50.1
Blah2   22.1       60.2

Однако, когда это копируется в Excel, происходит странная вещь.CR + LF интерпретируется как (как вы уже догадались) запрос новой строки.Следовательно, мы получаем что-то, что выглядит совершенно неправильно.например,

Strain  SpikeConc
ng/g    Spike
dmp/g
-------------------------
Blah    20.0       50.1
Blah    22.1       60.2

Он неправильно интерпретирует CR + LF после SpikeConc и создает новую строку в новой ячейке вместо создания мягкого абзаца, как если бы вы нажали Alt + Enter и дал вамновая строка в той же ячейке.

У кого-нибудь есть идеи, как кодировать мягкий абзац, а не новую строку?

Я пытался использовать только CR (# 13) для себя и только LF (# 10) дляэто свое, но они оба ведут себя одинаково.

Я считаю, что есть некоторые символы Юникода

LS: Разделитель строк, U + 2028

PS: Разделитель абзацев, U + 2029

, но я могуКажется, я не могу найти, как их кодировать в таблицу в моем приложении.

PS Мы используем Delphi6 (не спрашивайте)

Ответы [ 2 ]

1 голос
/ 04 февраля 2010

Это великолепно.Если я скажу это так

"SpikeConc #13+#10 ng/g" 

, то оно будет отображаться правильно в Excel, как это

SpikeConc
ng/g

Спасибо.Это сводило меня с ума.

1 голос
/ 04 февраля 2010

Как уже упоминалось в комментариях, это функция, которую мы используем, чтобы убрать CR.Либо этого, либо заключения строки в двойные кавычки достаточно для мягкого возврата в Excel.

function RemoveCr(const Value: string): string;
  var
    I, J: Integer;
  begin
    J := 0;
    SetLength(Result, Length(Value));
    for I := 1 to Length(Value) do
      if Value[I] <> #13 then
      begin
        Inc(J);
        Result[J] := Value[I];
      end;
    SetLength(Result, J);
  end;
...