Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Вниз

Получение данных из Excel через Clipboard   Найти похожие ветки 

 
_RusLAN ©   (2006-06-16 18:22) [0]

Задача: Пользователь выделяет несколько ячеек(диапазон MxN) в Excel, копирует их буфер.
Надо получить размер диапазона (количество ячеек по вертикали и горизонтали) и данные из этих ячеек.
Вопрос: Как?

Спасибо.

ЗЫ. Excel не привязан к программе через OLE, имеется доступ только к буферу Windows.


 
Black Krok ©   (2006-06-16 20:54) [1]

Нельзя быть таким ленивым :)
Скопируйте, вставьте в FAR`е(или хоть в NotePad) в какой-нить файл, посмотрите, что получится.
Содержимое столбцов разделяется TAB, строки - переносом строки


 
GanibalLector ©   (2006-06-16 23:25) [2]

Вот,примерно что-то подобное. Процедура вставки из Excel в TStringGrid


procedure PasteGrid(Grid: TStringGrid);
 var CharPos:Integer;
     Line,TempLine : string;
     Ch:Char;
     RecRow,RecCol,TmpCol:Integer;
     myRect:TGridRect;
 const EofChar = #0;
 //
 function GetClipBoard:String;
   var h:HWND;
       Ptxt:PChar;
 begin
   if OpenClipBoard(0)then
   begin
     try
       h := GetClipboardData(CF_TEXT);
       if h<>0 then
       begin
         Ptxt := GlobalLock (h);
         Result:=StrPas(Ptxt);
         GlobalUnlock(h);
       end;
     finally
       CloseClipBoard;
     end;
   end;
 end;

 procedure NextChar;
 begin
  Inc(CharPos);
  if CharPos <= Length(Line) then
   Ch := Line[CharPos] else Ch := EofChar
 end;

 function GetReturn(Line:String):Integer;
   var I:Integer;
 begin
   Result:=0;
   I:=0;
   repeat
     Inc(I);
     if (Line[I]=Chr($0D)) or (Line[I]=Chr($09))
      then Result:=Result+1;
   until (Result>=2) or (I>=Length(Line));
 end;
 //
begin
 TmpCol:=0;
 with Grid,Grid.Selection do
 begin
   RecRow:=Row;
   RecCol:=Col;
   Line:=GetClipBoard;   // !
   if GetReturn(Line)=1 then
   begin
     for RecRow:=Top to Bottom do
     for RecCol:=Left to Right do
      Cells[RecCol, RecRow] :=Copy(Line,1,Length(Line)-2);
   end else
   begin
     CharPos:=0;
     repeat
       NextChar;
       if not(Ch in [ #9,#13,#10]) then
        TempLine:=TempLine+Ch;
       if Ch=Chr($09) then
       begin
         Cells[RecCol,RecRow]:=TempLine;
         RecCol:=RecCol+1;
         TempLine:="";
       end;
       if Ch=Chr($0D) then
       begin
         Cells[RecCol,RecRow]:=TempLine;
         RecRow:=RecRow+1;
         TmpCol:=RecCol;
         RecCol:=Col;
         TempLine:="";
       end;
     until Ch=EofChar;
     with myRect do
     begin
       Left:= Col;
       Top:=  Row;
       Right:=TmpCol;
       Bottom:=RecRow-1;
     end;
     Selection:=myRect;
   end;
 end;
end;




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

Форум: "Основная";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.012 c
1-1150732226
Dust
2006-06-19 19:50
2006.07.30
Определить размер буфера по указателю. Возможно?


2-1152614581
SergP
2006-07-11 14:43
2006.07.30
Как сделать чтобы форма при создании не отбирала фокус?


5-1136560770
cp.Silver
2006-01-06 18:19
2006.07.30
Расширенный TTreeView


15-1151688007
Bad tester
2006-06-30 21:20
2006.07.30
Подскажите как лучше работать с базой данных MySQL из Делфи?


2-1152634378
AlonZo
2006-07-11 20:12
2006.07.30
Занесение системной даты в Edit





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский