2010-02-04 4 views
1

Я пытаюсь скопировать таблицу, созданную в нашем программном обеспечении, в таблицу Excel.Проблема копирования + вставка CR + LF в таблицу Excel нуждается в мягком абзаце (Alt + Enter)

Некоторые заголовки заголовков в нашем приложении слишком велики для размещения в столбце, поэтому они разделены # 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: Линия Separator, U + 2028

PS: Пункт Separator, не может показаться U + 2029

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

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

+0

Как получить таблицу в Excel? Я полагаю, что Clipoard.AsText? И как вы можете получить текст? Может быть, вы можете изменить ответственную процедуру, чтобы исключить оскорбительные строки перевода? –

+1

Вы пытались включить заголовок в двойные кавычки? PS Мы используем Delphi5

+0

Удаление # 13 должно было сделать трюк, это для нас. –

ответ

1

Как уже упоминалось в комментариях, это функция, которую мы используем, чтобы обирать 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; 
+1

Ливен: Почему бы не Результат: = StringReplace (Value, # 13, '', [rfReplaceAll]) вместо этого? Значительно меньше кода, и читать легче ... –

+0

@ Ken White - потому что я не хотел хвастаться, что мы все еще на Delphi 5 :) –

+0

Достаточно честный. –

1

Это блестящий. Если я ставлю его как этот

"SpikeConC#13+#10 ng/g" 

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

SpikeConc 
ng/g 

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

 Смежные вопросы

  • Нет связанных вопросов^_^