Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.03.2011, 18:21   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Вопрос Догрузка данных в ранее загруженную таблицу из Excel

Добрый вечер! Нужна помощь в следующем вопросе. В StringGrid грузятся некие данные из XLS файла. Это нормально. При загрузке, вторая и третья колонка пустые, так и должно быть. Мне нужно в процессе работы с программой догрузить две колонки в StringGrid в эти самые пустые колонки. Вот, нашел у себя старый код из одного из проектов:
Код:
procedure TForm1.mniN38Click(Sender: TObject);
var
  row: integer;
  Ex: variant;
  Sheet: variant;
  sl: TStringList;
  s: string;
  Path: string;
  I: Integer;
begin
  Form1.dlgOpen1.FileName:='*.xls';
  Form1.dlgOpen1.Filter:='XLS|*.xls';
  if Form1.dlgOpen1.Execute then
  begin
   Path:=ExtractFileDir(Form1.dlgOpen1.FileName);
   Ex:= CreateOleObject('Excel.Application');
   Ex.Workbooks.Open(Path + '\' + ExtractFileName(Form1.dlgOpen1.FileName));  // îòêðûâàåì êíèãó
   Sheet:= Ex.WorkBooks[1].Sheets[1]; //  öåïëÿåìñÿ ê ëèñòó ¹1
   sl:= TStringList.Create;
   try
     Row:= 1; // íà÷èíàåì ñ÷èòûâàòü ñî 2-é ñòðîêè
     while (Sheet.Cells[Row , 1{÷èòàåì 1 êîëîíêó}].Text <> '') do
     begin
       sl.Add(Sheet.Cells[Row , 1]);  // äîáîâëÿåì â ñòðèíãëèñò
       inc(Row);
     end;

     if sl.count > 0 then
     begin
       Form1.RzStringGrid3.RowCount:=sl.Count;
       for I:=0 to Form1.RzStringGrid3.RowCount - 1 do
        Form1.RzStringGrid3.Cells[1,I]:=sl[I];
     end;
   finally
     Sheet:= Unassigned;
     Ex.Quit;
     sl.Free;
   end;
     MessageBox(Handle,'Çàãðóçêà ïåðâîé êîëîíêè çàâåðøåíà!','',MB_ICONINFORMATION);
  end;
end;
Код грузит первый столбец из XLS в StringGrid. Однако, он начинает загрузку с фиксированной в StringGrid-e колонки. А мне надо со второй строки. Мешает условие
Код:
Form1.RzStringGrid3.RowCount:=sl.Count;
Если его убираю, то ошибка "List out of bounds(38)". Всего в StringGrid-e 39 строк. Подмогите подправить код. Заранее спасибо.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.03.2011, 19:39   #2
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

я верно понимаю что вам надо из StringList(sl) сохранить во второи столбик StringGrid'a?
и при таком коде не выходит?
Код:
Form1.RzStringGrid3.Cells[1,I]:=sl[I];
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 17.03.2011, 19:57   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
я верно понимаю что вам надо из StringList(sl) сохранить во второи столбик StringGrid'a?
Да.
Цитата:
и при таком коде не выходит?
Код:

Form1.RzStringGrid3.Cells[1,I]:=sl[I];
Не выходит при строке
Код:
Form1.RzStringGrid3.RowCount:=sl.Count;

Мне не надо, чтобы у меня в Stringgrid добавлялись столько строк сколько их в sl.Count, у меня фиксированное количество строк.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.03.2011, 20:59   #4
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
Стрелка

вот скрины с екселя и после загрузки в таблицу, что не так, я просто ни как понять не могу
Изображения
Тип файла: jpg moe.JPG (35.1 Кб, 121 просмотров)
Тип файла: jpg exel.JPG (125.3 Кб, 123 просмотров)
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.03.2011, 01:53   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Ну как что. То, что загрузка идет начиная с фиксированной колонки, мне не надо чтобы у меня трогались фиксированные строки.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 18.03.2011, 03:13   #6
ArtGrek
DelphiProger
Участник клуба
 
Аватар для ArtGrek
 
Регистрация: 14.11.2010
Сообщений: 1,023
По умолчанию

несовпадение было в стринг листе, так как его порядковыи номер всегда на 1 меньше
Код:
     if sl.count > 0 then
     begin
      RzStringGrid3.RowCount:=sl.Count + 1;
      for i:=1 to RzStringGrid3.RowCount - 1 do
        RzStringGrid3.Cells[1,i]:=sl[I - 1];
     end;
VirusN13
ArtGrek вне форума Ответить с цитированием
Старый 18.03.2011, 15:06   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Зачот! Спасибо
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных в таблицу Excel slai Общие вопросы Delphi 1 11.10.2010 06:49
Каким образом можно сделать таблицу Excel в ячейке Excel? Severny Microsoft Office Excel 3 08.10.2010 09:13
сортировка данных (пересчет возможных вариантов комбинаций, перенос данных в таблицу) Vitalik85 Microsoft Office Excel 4 12.08.2009 00:30
Копирование данных типа Дата из Excel в mdb таблицу Dimok82 БД в Delphi 0 14.03.2009 11:34
Передача данных из Excel в созданную таблицу Самоучка БД в Delphi 2 06.11.2008 20:53