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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.06.2010, 09:55   #11
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,210
По умолчанию

Нет, колонка под название "л\с" может быть как третьей так и четвертым, т.е. заранее не всегда известно будет. Можно ли как-то находить этот "л\с" и считывать все значения из под этой надписи? Вот, я пробую занести весь этот слобец в StringGrid или ListBox:
Код:
    if sl.count >0 then
   //   showMessage(sl.Text);
      Form1.ListBox1.Items.Add(sl.text);

      for i:=1 to Form1.StringGrid1.RowCount do
      begin
       Form1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount + 1;
       Form1.StringGrid1.Cells[0,i]:=Trim(sl.Text);
      end;
но не получается. В ListBox они выводятся, но во-первых все в одну строчку, а не в столбец, а во-вторых между значениями стоят по 2 квадратика. В StringGrid тоже самое...
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 17.06.2010 в 10:07.
artemavd вне форума Ответить с цитированием
Старый 17.06.2010, 10:18   #12
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

тогда это будет выглядеть так:
Код:
procedure TForm3.Button1Click(Sender: TObject);
var
  Ex: variant;
  Sheet: variant;
  sl: TStringList;
  Row, col: Integer;
  s: string;
  Path: string;

begin

  Path:= ExtractFileDir(ParamStr(0));

  Ex:= CreateOleObject('Excel.Application');
  Ex.Workbooks.Open('ПутьКФайлу'); // открываем книгу
  Sheet:= Ex.Workbooks[1].Sheets[1]; // цепляемся к листу №1

  Sheet.Cells.Find('л\с').Activate; // ищем в листе л\с
  Row:= Ex.Selection.Row; // строка в которой найдено  л\с
  col:= Ex.Selection.column; // колонка в которой найдено  л\с

  sl:= TStringList.Create;
  try
    while (Sheet.Cells[Row, col].Text <> '') do
    begin
      sl.Add(Sheet.Cells[Row, Col].Text); // добовляем в стринглист
      inc(Row);
    end;
    if sl.count > 0 then
      showMessage(sl.Text);
  finally
    Sheet:= Unassigned;
    Ex.Quit;
    sl.Free;
  end;
end;
принимаю благодарности в письменном виде( весы слева)...

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

Выводится в сообщение это хорошо, а как в StringGrid в колонку? . Пробую циклом:
Код:
 if sl.count >0 then
   //   showMessage(sl.Text);
      Form1.ListBox1.Items.Add(sl.text);

      for i:=1 to Form1.StringGrid1.RowCount do
      begin
       Form1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount + 1;
       Form1.StringGrid1.Cells[0,i]:=Trim(sl.Text);
      end;
Не получается..
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 17.06.2010 в 10:51.
artemavd вне форума Ответить с цитированием
Старый 17.06.2010, 10:55   #14
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

а так:
Код:
    if sl.count > 0 then
    begin
      StringGrid1.RowCount:=sl.count;
      for I := 0 to StringGrid1.RowCount-1 do
        StringGrid1.Cells[0,I]:= sl[i];
    end;
принимаю благодарности в письменном виде( весы слева)...

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

Сейчас проверю. Я тут пытаюсь с OpenDialog сделать, но выдается ошибка: "Невозможно получить доступ к <тут имя папки, в которой находится файл excel>. Диск может быть доступен только для чтения или зашифрован". Вот весь код кнопки:
Код:
procedure TForm1.BtnOpenClick(Sender: TObject);
var
  Ex: variant;
  Sheet: variant;
  sl: TStringList;
  Row,i,Col: Integer;
  Path: string;
begin
  if Form1.OpenDialog1.Execute then
  Path:=ExtractFileDir(Form1.OpenDialog1.FileName);

  Ex:= CreateOleObject('Excel.Application');
  Ex.Workbooks.Open(Path);  // открываем книгу
  Sheet:= Ex.WorkBooks[1].Sheets[1]; //  цепляемся к листу №1

  Sheet.Cells.Find('л\с').Activate; //название колонки
  Row:=Ex.Selection.Row;
  Col:=Ex.Selection.Column;

  sl:= TStringList.Create;
  try
    while (Sheet.Cells[Row , Col].Text <> '') do
    begin
      sl.Add(Sheet.Cells[Row , Col].text);  // добовляем в стринглист
      inc(Row);
    end;
    if sl.count > 0 then
      begin
       Form1.StringGrid1.RowCount:=sl.Count;
       for i:=1 to Form1.StringGrid1.RowCount - 1 do
        begin
         Form1.StringGrid1.Cells[0,i]:=sl[i];
        end;
      end;
  finally

    Sheet:= Unassigned;
    Ex.Quit;
    sl.Free;
  end;
end;
Может я что-то не там разместил?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 17.06.2010, 11:13   #16
MaxNik2009
Форумчанин
 
Аватар для MaxNik2009
 
Регистрация: 17.09.2009
Сообщений: 294
По умолчанию

Код:
procedure TForm3.Button1Click(Sender: TObject);
var
  Ex: variant;
  Sheet: variant;
  sl: TStringList;
  Row, col: Integer;
  s: string;
  Path: string;
  I: Integer;
  xlsFile: string;

begin

  if OpenDialog1.Execute then
  begin
    xlsFile:= OpenDialog1.FileName;

    Ex:= CreateOleObject('Excel.Application');
    Ex.Workbooks.Open(xlsFile); // открываем книгу
    Sheet:= Ex.Workbooks[1].Sheets[1]; // цепляемся к листу №1

    Sheet.Cells.Find('л\с').Activate; // ищем в листе л\с
    Row:= Ex.Selection.Row; // строка в которой найдено  л\с
    col:= Ex.Selection.column; // колонка в которой найдено  л\с

    sl:= TStringList.Create;
    try
      while (Sheet.Cells[Row, col].Text <> '') do
      begin
        sl.Add(Sheet.Cells[Row, 1].Text); // добовляем в стринглист
        inc(Row);
      end;

      if sl.count > 0 then
      begin
        StringGrid1.RowCount:= sl.count;
        for I:= 0 to StringGrid1.RowCount - 1 do
          StringGrid1.Cells[0, I]:= sl[I];
      end;

    finally
      Sheet:= Unassigned;
      Ex.Quit;
      sl.Free;
    end;
  end;
end;
У меня вот это работает... Сам найдешь свои ошибки?
ладно объясню:
Код:
  if Form1.OpenDialog1.Execute then
  Path:=ExtractFileDir(Form1.OpenDialog1.FileName); // получаешь папку в которой хранится файл экселя

  Ex:= CreateOleObject('Excel.Application');
  Ex.Workbooks.Open(Path);  // тут пытаешься открыть папку а не файл!!!
  Sheet:= Ex.WorkBooks[1].Sheets[1]; //  цепляемся к листу №1
Будь внимательнее
принимаю благодарности в письменном виде( весы слева)...

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

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


Купить рекламу на форуме - 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