Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как преобразовать "таблицу" из буфера обмена в HTML документ [D7, XP]


Vayrus ©   (2008-08-23 16:48:00) 

Подскажите, пожалуйста!
Дано:
скопированные в буфер обмена ячейки из EXСEL.
Вопрос:
как создать HTML-документ с простой таблицей, состоящей из этих ячеек?


Vayrus   (2008-08-25 12:02:00) [1]

Vlad Oshin

Некритично


Vlad Oshin   (2008-08-25 09:53:00) [2]

1.
В решении вопроса заинтересован ты. Поэтому, вместо того, что ты написал, выложил бы хотя бы так:

function ReplaceSubString(source,target,new:string):string;
var
 rslt: String;
begin
 While POS(target,source)>0 do
 begin
   rslt:=rslt+copy(source,1,POS(target,source)-1)+new;
   Delete(source,1,POS(target,source)+Length(target)-1);
   Application.ProcessMessages;
 end;
 Result:=rslt+source;
end;

function To_HTML_Table(InTxt: String): String;
const
 first='<TR><TD noWrap width="30%">';
 Stand='</TD><TD noWrap align=middle width="1%">';
 closet='</TD></TR>';
var
 List : TstringList;
 OutL : TstringList;
 I:Integer;
 S:String;
begin
 List := TstringList.Create;
 OutL := TstringList.Create;
 List.Text := InTxt;
 for i:=0 to list.Count-1 do
 begin
   S:=List.Strings[i];
   S:=ReplaceSubString(S,#9,Stand);
   S:=first+S+closet;
   OutL.Add(S);
   Application.ProcessMessages;
 end;
 RESULT:=OutL.Text;
 List.Free;
 OutL.Free;
end;


2. Раз есть всякие компоненты, то желательно ложить dfm.
для твоего же примера, достаточно так:

procedure TForm1.Button1Click(Sender: TObject);
begin
 ShowMessage(To_HTML_Table('АЕ 2066-20А* 2 853,0 554,5'));
end;

нечего чекбоксами и прочим людей дурить (особенно в понедельник с утра :))

3.
Возьми клавиатуру, где работают кнопки F8 и F7,
пошагово пройди путь выполнения процедур, глядя как меняются переменные.


Vayrus   (2008-08-24 18:57:00) [3]

Поспешил ;-)

В чем ошибка...

function ReplaceSubString(source,target,new:string):string;
var
rslt: String;
begin
While POS(target,source)>0 do
begin
rslt:=rslt+copy(source,1,POS(target,source)-1)+new;
Delete(source,1,POS(target,source)+Length(target)-1);
Application.ProcessMessages;
end;
Result:=rslt+source;
end;

function To_HTML_Table(InTxt: String): String;
const
first='<TR><TD noWrap width="30%">';
Stand='</TD><TD noWrap align=middle width="1%">';
closet='</TD></TR>';
var
List : TstringList;
OutL : TstringList;
I:Integer;
S:String;
begin
List := TstringList.Create;
OutL := TstringList.Create;
List.Text := InTxt;
for i:=0 to list.Count-1 do
begin
S:=List.Strings[i];
S:=ReplaceSubString(S,#9,Stand);
S:=first+S+closet;
OutL.Add(S);
Application.ProcessMessages;
end;
RESULT:=OutL.Text;
List.Free;
OutL.Free;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
if not CheckBox1.Checked then
begin
ShowMessage('ClipBoard is empty!');
EXIT;
end;
Memo1.Clear;
memo1.Text:=To_HTML_Table(CB.AsText);
end;

Подскажите в чем ошибка?
Есть такая строчка в буфере обмена:
АЕ 2066-20А* 2 853,0 554,5

Вместо:
<TR><TD noWrap width="30%">АЕ 2066-20А*</TD><TD noWrap align=middle width="1%">2</TD><TD noWrap align=middle width="1%"> 853,0 </TD><TD noWrap align=middle width="1%"> 554,5 </TD></TR>

выдает:
<TR><TD noWrap width="30%">АЕ 2066-20А*</TD><TD noWrap align=middle width="1%"></TD><TD noWrap align=middle width="1%"></TD><TD noWrap align=middle width="1%">2</TD><TD noWrap align=middle width="1%"> 853,0 </TD><TD noWrap align=middle width="1%"> 554,5 </TD></TR>


Vayrus   (2008-08-23 21:45:00) [4]


> TStas ©   (23.08.08 21:11) [5]
>
> Вот я чтобы ответить на вопрос написал в экселе талицу из
> 3 стролбцов и трех строк, скопировал её и сейчас ставляю
> в ответ.
> 1 2 3
> 11 12 13
> 21 22 23
>
> Программно это будет S:= ClipBoard.AsText, где S - строчка.
>
> List := TstringList.Create; List.Text := S; Получится список
> строк, в котором каждая строка - это строка таблицы, в которой
> ячейки разделены символом таблуляции (#9). Нужно дальше
> писать, что нужно сделать?


Вот теперь все понял, спасибо. Обсуждение закрыто.


TStas   (2008-08-23 21:11:00) [5]

Вот я чтобы ответить на вопрос написал в экселе талицу из 3 стролбцов и трех строк, скопировал её и сейчас ставляю в ответ.
1 2 3
11 12 13
21 22 23

Программно это будет S:= ClipBoard.AsText, где S - строчка.
List := TstringList.Create; List.Text := S; Получится список строк, в котором каждая строка - это строка таблицы, в которой ячейки разделены символом таблуляции (#9). Нужно дальше писать, что нужно сделать?


Vayrus   (2008-08-23 20:58:00) [6]


> palva ©   (23.08.08 20:12) [3]
>
> Пример чего? Как вынуть буфер обмена в текстовом виде?


Пример того, как вынуть текст из буфера обмена с разделителями TAB и преобразовать его в HTML.


palva   (2008-08-23 20:12:00) [7]

Пример чего? Как вынуть буфер обмена в текстовом виде?


Vayrus   (2008-08-23 17:25:00) [8]


> DVM ©   (23.08.08 17:14) [1]
>
> из буфера обмена их можно забрать как текст с разделителями
> TAB.


Будь добр пример, с буфером обмена и разделителями, кроме запятой, не сталкивался особо.


DVM   (2008-08-23 17:14:00) [9]

из буфера обмена их можно забрать как текст с разделителями TAB.


Наверх

Титульная страница Поиск, карта сайта Написать письмо