Форум: "Начинающим";
Текущий архив: 2008.10.05;
Скачать: [xml.tar.bz2];
ВнизКак преобразовать "таблицу" из буфера обмена в 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.007 c