Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.10.05;
Скачать: CL | DM;

Вниз

Как преобразовать "таблицу" из буфера обмена в HTML документ   Найти похожие ветки 

 
Vayrus   (2008-08-23 16:48) [0]

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


 
DVM ©   (2008-08-23 17:14) [1]

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


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


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


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


 
palva ©   (2008-08-23 20:12) [3]

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


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


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


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


 
TStas ©   (2008-08-23 21:11) [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 21:45) [6]


> 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). Нужно дальше
> писать, что нужно сделать?


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


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

Поспешил ;-)

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

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>


 
Vlad Oshin ©   (2008-08-25 09:53) [8]

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-25 12:02) [9]

Vlad Oshin

Некритично



Страницы: 1 вся ветка

Текущий архив: 2008.10.05;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.016 c
2-1219384408
arbin
2008-08-22 09:53
2008.10.05
работа c FTP


11-1194440952
=BuckLr=
2007-11-07 16:09
2008.10.05
Портированный DCPCrypt


2-1219848617
tytus
2008-08-27 18:50
2008.10.05
Временные файлы Internet


2-1219895591
snake-as
2008-08-28 07:53
2008.10.05
Печать картинок


2-1219594068
TStas
2008-08-24 20:07
2008.10.05
Глюк дельфей в консольном приложении