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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2010, 08:44   #1
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
Вопрос Считать определенный столбец из Excel

Добрый день! Вопрос: как считать определенный столбец из документа xls? Например он называется он Л/С. Только этот столбец нужен из всего документа.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.06.2010, 08:47   #2
Grag
А может и не...
Участник клуба
 
Аватар для Grag
 
Регистрация: 27.03.2010
Сообщений: 1,269
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Только этот столбец нужен из всего документа.
Т.е. со всех листов книги???
Перемешивай дело с бездельем и не сойдешь с ума...
Grag вне форума Ответить с цитированием
Старый 17.06.2010, 08:49   #3
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Там один лист книги. С одного листа один столбец . Знаешь как?)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.06.2010, 09:00   #4
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Код:
procedure TForm3.Button1Click(Sender: TObject);
var
  Ex: variant; // экземпляр экселя
  Sheet: variant; // активный лист экселя
  sl: TStringList; // для данных из ячеек 
  Row: Integer; // номер строки
  s: string; 
begin
  Ex:= GetActiveOleObject('Excel.Application');
  Sheet:= Ex.ActiveWorkBook.ActiveSheet;    // цепляемся с активному листу

  sl:= TStringList.Create;
  try
    Row:= 1; // в экселе номерауия строк с 1
    while (Sheet.Cells[Row , 1{№ колонки}].Text <> '') do  // цикл будет выполняться пока ячейки содержат текст
    begin
      sl.Add(Sheet.Cells[Row , 1].text);  // добовляем в стринглист
      inc(Row);
    end;
    
    if sl.count > 0 then
      // делай с данными что хочешь

  finally
    sl.Free;
  end;
end;
это работает при условии что первый столбец и тебя заполнен с 1-й строки.
принимаю благодарности в письменном виде( весы слева)...

Последний раз редактировалось MaxNik2009; 17.06.2010 в 09:06.
MaxNik2009 вне форума Ответить с цитированием
Старый 17.06.2010, 09:05   #5
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

То есть нужно, чтобы документ уже был открыт? Можно ли просто указав путь к документу считать из него, не открывая его?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.06.2010, 09:14   #6
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Тогда так:
Код:
procedure TForm3.Button1Click(Sender: TObject);
var
  Ex: variant;
  Sheet: variant;
  sl: TStringList;
  Row: Integer;
  s: string;
begin

  Ex:= CreateOleObject('Excel.Application');
  Ex.Workbooks.Open('ПутьКФайлу');  // открываем книгу
  Sheet:= Ex.WorkBook[1].Sheets[1]; //  цепляемся к листу №1
  sl:= TStringList.Create;
  try
    Row:= 1; // в экселе номерауия строк с 1
    while (Sheet.Cells[Row , 1{№ колонки}].Text <> '') do
    begin
      sl.Add(Sheet.Cells[Row , 1].text);  // добовляем в стринглист
      inc(Row);
    end;
  finally
    Sheet:= Unassigned;
    Ex.Quit; // закрываем эксель
    sl.Free;
  end;
end;

end.
принимаю благодарности в письменном виде( весы слева)...

Последний раз редактировалось MaxNik2009; 17.06.2010 в 09:18.
MaxNik2009 вне форума Ответить с цитированием
Старый 17.06.2010, 09:17   #7
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Что-то ничего не происходит при сипользовании данного кода. Документ xls нужный открыт, а колонка не заносится. Вот, во вложении фрагмент таблицы, из которой нужно считать столбец - л\с.
Изображения
Тип файла: png Безымянный.PNG (9.6 Кб, 84 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.06.2010, 09:19   #8
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Выложи свой файл экселя. Посмотри мой пример в архиве(Delphi 2010).
Вложения
Тип файла: rar ExcelToStringList.rar (330.7 Кб, 22 просмотров)
принимаю благодарности в письменном виде( весы слева)...

Последний раз редактировалось MaxNik2009; 17.06.2010 в 09:35. Причина: добавил архив
MaxNik2009 вне форума Ответить с цитированием
Старый 17.06.2010, 09:36   #9
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Ок. Нужно, чтобы была возможность выбора файла через диалог. В архиве проект.
Вложения
Тип файла: zip Project1.zip (371.2 Кб, 11 просмотров)
Тип файла: rar СДМА.rar (2.3 Кб, 11 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.06.2010, 09:46   #10
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

вопрос: а данные в твоей таблице всегда будут начинаться с 7 -й строки?
если да, то в моем примере укажи в этом месте
Код:
 
...........................................................................................
 sl:= TStringList.Create;
  try
    Row:= 2; // начинаем считывать со 2-й строки
    while (Sheet.Cells[Row , 3{читаем 3 колонку}].Text <> '') do
    begin
............................................................................................
Row:= 7;
ну а OpenDialog к моему примеру, думаю, сможешь прикрутить.
принимаю благодарности в письменном виде( весы слева)...

Последний раз редактировалось MaxNik2009; 17.06.2010 в 09:48.
MaxNik2009 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c++ многократно определенный символ. ahab Помощь студентам 0 15.01.2010 16:05
[Pascal] Определенный интеграл. Рамик Помощь студентам 7 21.10.2009 15:49
макрос который будет копировать столбец А из закрытой книги Данные, и вставлять в книгу Сток в столбец B Utirka66 Microsoft Office Excel 8 06.07.2009 09:53
Определенный интеграл. J0n1cK Паскаль, Turbo Pascal, PascalABC.NET 1 16.04.2009 11:30
В СТОЛБЕЦ ВВОДЯТСЯ ЧИСЛА ТОЛЬКО ВХОДЯЩИЕ В ОПРЕДЕЛЕННЫЙ ИНТЕРВАЛ. exeexeexe Microsoft Office Excel 8 17.09.2008 10:23