Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 01.11.2010, 20:11
doctordradd doctordradd вне форума
Прохожий
 
Регистрация: 20.10.2010
Сообщения: 18
Репутация: 10
По умолчанию Импорт данных из Excel

Подскажите, пожалуйста, как правильно импортировать данные из таблицы Excel, экспорт работает отлично, необходимо обратный процесс создать...
Вот код экспорта:
Код:
procedure TBasePPL.ToExcelExecute(Sender: TObject);
var ws,xl:variant;
    i,maxrow:integer;
    col,fst:integer;
begin
  fst:=2;
  xl:=createoleobject('Excel.Application');
    try
      maxrow:=0;
      xl.visible:=true;
      XL.WorkBooks.Add;
      ws := XL.ActiveWorkBook.ActiveSheet;
      ws.Range['A1'].NumberFormat:='0';

      ws.Range['A'+inttostr(fst)].Value := '№';
      ws.Range['B'+inttostr(fst)].Value := 'Nombres';
      col:=1;
begin
         inc(col);
         ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
      end;
 begin
         inc(col);
         ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
      end;
 begin
         inc(col);
         ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
      end;
begin
         inc(col);
         ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
      end;
 begin
         inc(col);
         ws.Range[Chr(Ord('A')+col)+inttostr(fst)].Value := ' ';
      end;

      for i:=fst+1 to Visitas.Items.Count+fst do begin
         col:=1;
         ws.Range['a'+inttostr(i)].Value := i-2;//# работы
         ws.Range['b'+inttostr(i)].Value := Visitas.Items[i-fst-1].Caption;
 begin
            inc(col);
            ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[0];
         end;
 begin
            inc(col);
            ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[1];
         end;
 begin
            inc(col);
            ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[2];
         end;
 begin
            inc(col);
            ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[3];
         end;
         begin
            inc(col);
            ws.Range[Chr(Ord('A')+col)+inttostr(i)].Value:=Visitas.Items[i-fst-1].SubItems[4];
         end;
         maxrow:=i;
      end;

//установим сетку для таблицы
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeLeft].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeLeft].Weight:=xlThin;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeLeft].ColorIndex:=xlAutomatic;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeTop].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeTop].Weight:=xlThin;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeTop].ColorIndex:=xlAutomatic;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeBottom].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeBottom].Weight:=xlThin;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeBottom].ColorIndex:=xlAutomatic;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeRight].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeRight].Weight:=xlThin;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlEdgeRight].ColorIndex:=xlAutomatic;
//внутреннее пересечение
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlInsideVertical].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlInsideVertical].Weight:=xlThin;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlInsideVertical].ColorIndex:=xlAutomatic;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlInsideHorizontal].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlInsideHorizontal].Weight:=xlThin;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(maxrow)].Borders[xlInsideHorizontal].ColorIndex:=xlAutomatic;
//наружние границы
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeLeft].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeLeft].Weight:=xlMedium;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeLeft].ColorIndex:=xlAutomatic;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeTop].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeTop].Weight:=xlMedium;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeTop].ColorIndex:=xlAutomatic;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeBottom].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeBottom].Weight:=xlMedium;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeBottom].ColorIndex:=xlAutomatic;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeRight].LineStyle:=xlContinuous;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeRight].Weight:=xlMedium;
      ws.Range['A'+inttostr(fst)+':'+Chr(Ord('A')+col)+inttostr(fst)].Borders[xlEdgeRight].ColorIndex:=xlAutomatic;
      for i:=ord('A')to ORD('A')+col do begin
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeLeft].LineStyle:=xlContinuous;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeLeft].Weight:=xlMedium;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeLeft].ColorIndex:=xlAutomatic;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeTop].LineStyle:=xlContinuous;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeTop].Weight:=xlMedium;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeTop].ColorIndex:=xlAutomatic;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeBottom].LineStyle:=xlContinuous;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeBottom].Weight:=xlMedium;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeBottom].ColorIndex:=xlAutomatic;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeRight].LineStyle:=xlContinuous;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeRight].Weight:=xlMedium;
         ws.Range[Chr(i)+inttostr(fst)+':'+Chr(i)+inttostr(maxrow)].Borders[xlEdgeRight].ColorIndex:=xlAutomatic;
      end;
      ws.range['A1:'+chr(Ord('A')+col)+'1'].merge;
      if (Groups.ItemIndex>=0)and(Groups.ItemIndex<groups.Items.Count)then
         ws.range['A1:'+chr(Ord('A')+col)+'1'].value:='Lista "'+Groups.Items[Groups.ItemIndex].Caption+'"'
      else
         ws.range['A1:'+chr(Ord('A')+col)+'1'].value:='Lista';
      ws.range['A1:'+chr(Ord('A')+col)+'1'].font.Bold:=true;
      ws.range['A'+inttostr(fst)+':'+chr(Ord('A')+col)+inttostr(fst)].font.bold:=true;
//подгоним размеры
      ws.Columns['A:'+chr(Ord('A')+col)].EntireColumn.AutoFit;
      xl.ActiveWindow.SplitRow:=fst;
      xl.ActiveWindow.FreezePanes:=True;
      xl.ActiveSheet.PageSetup.Orientation:=xlLandscape;
      xl.ActiveSheet.PageSetup.PrintArea:='$A:$G';
    finally
    //выход из экселя
    //  xl.quit;
    end;
Спасибо...

Последний раз редактировалось doctordradd, 01.11.2010 в 20:13.
Ответить с цитированием
  #2  
Старый 01.11.2010, 20:23
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну как-бы все тоже самое, только не запись в ячейки листа, а чтение из них:
Код:
 Value1 := ws.Range['A'+inttostr(fst)].Value;
 Value2 := ws.Range['B'+inttostr(fst)].Value;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 01.11.2010, 20:27
doctordradd doctordradd вне форума
Прохожий
 
Регистрация: 20.10.2010
Сообщения: 18
Репутация: 10
По умолчанию

Ммм...
Т.е. во всем коде только изменить запись на чтение??? Больше ничего? настолько просто?
Ответить с цитированием
  #4  
Старый 01.11.2010, 20:29
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

А вам обязательно метровая портянка с кодом нужна?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 01.11.2010, 21:24
doctordradd doctordradd вне форума
Прохожий
 
Регистрация: 20.10.2010
Сообщения: 18
Репутация: 10
По умолчанию

Открывается файл экселя, записывается временно 1 колонка, при закрытии программы записанные данные исчезают.
Записываются только в готовую строку, т.е. в программу введены вручную данные, в эти строки вписываются данные с экселя, в пустые же - нет...
Подскажите, пожалуйста, где ошибка.

Код:
var ws,xl:variant;
    i,maxrow:integer;
    col,fst:integer;
begin
  fst:=7;
  xl:=createoleobject('Excel.Application');
    try
      maxrow:=0;
      xl.visible:=true;
      XL.WorkBooks.open('PRESENTES');
      ws := XL.ActiveWorkBook.ActiveSheet;
      ws.Range['A1'].NumberFormat:='0';

       for i:=fst+1 to Visitas.Items.Count+fst do begin
         col:=1;
         Visitas.Items[i-fst-1].SubItems[0]:= ws.Range['A'+inttostr(fst)].Value;
         Visitas.Items[i-fst-1].SubItems[1] := ws.Range['B'+inttostr(fst)].Value;
         maxrow:=i;

Последний раз редактировалось doctordradd, 02.11.2010 в 03:58.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 17:12.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025