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

Delphi Sources



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

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.01.2015, 15:05
DuMaHc DuMaHc вне форума
Прохожий
 
Регистрация: 23.01.2015
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию Помогите сократить действия c OpenDialog

Помогите сократить действия с OpenDialog, в моей программе сначала прописывается:
Код:
if OpenDialog1.Execute then
                        Edit1.Text:=OpenDialog1.FileName; 
для открытия файла и указания пути файла в Edit1, но потом у меня открывается файл для дальнейшей выгрузки его в StringGrid, с помощью следующих команд:
Код:
if OpenDialog1.InitialDir = '' then
    OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
Тем самым окно с выбором файла открывается дважды, можно ли сделать так, чтобы и путь прописывался и файл выгружался в Excel после одного выбора файла???

MAD: Учимся пользоваться тегами.

Последний раз редактировалось M.A.D.M.A.N., 24.01.2015 в 09:02.
Ответить с цитированием
  #2  
Старый 23.01.2015, 23:17
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

С какого это перепуга, диалог открывается без вызова метода Execute. Давайте ка полный код в студию, наверняка вы что-то там накосячили.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #3  
Старый 24.01.2015, 08:55
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Страдалецъ
С какого это перепуга, диалог открывается без вызова метода Execute. Давайте ка полный код в студию, наверняка вы что-то там накосячили.
Сам внимательно смотри.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


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

Смотрю, и не вижу в упор второго вызова в этой строчке:
Код:
if OpenDialog1.InitialDir = '' then
    OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
Цитата:
Тем самым окно с выбором файла открывается дважды
С чего оно тут второй раз должно открываться?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 24.01.2015 в 13:42.
Ответить с цитированием
  #5  
Старый 24.01.2015, 21:10
DuMaHc DuMaHc вне форума
Прохожий
 
Регистрация: 23.01.2015
Сообщения: 2
Версия Delphi: Delphi 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Смотрю, и не вижу в упор второго вызова в этой строчке:
Код:
if OpenDialog1.InitialDir = '' then
    OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);

С чего оно тут второй раз должно открываться?


Вот полный код

procedure TForm1.Button2Click(Sender: TObject);
var
ExApp, ExBook, ExSheet : OleVariant;
V : Variant;
C, R, Col, Col1, Col2, Row, Row1, Row2 : Integer;
S, FileName : String;
Sg : TStringGrid;
begin
if OpenDialog1.Execute then
Edit1.Text:=OpenDialog1.FileName;

if OpenDialog1.InitialDir = '' then
OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if not OpenDialog1.Execute then Exit;
FileName := OpenDialog1.FileName;
if not FileExists(FileName) then begin
ShowMessage('Внимание! Файл с указанным именем не существует. Действие отменено.');
Exit;
end;

Sg := StringGrid1;
ExApp := CreateOleObject('Excel.Application');
ExBook := ExApp.WorkBooks.Open(FileName:=FileName);
ExSheet := ExBook.WorkSheets[1];
//Определяем границы таблицы на листе Excel.
Row1 := ExSheet.UsedRange.Row;
Col1 := ExSheet.UsedRange.Column;
Row2 := Row1 + ExSheet.UsedRange.Rows.Count - 1;
Col2 := Col1 + ExSheet.UsedRange.Columns.Count - 1;
//Задаём размер таблицы StringGrid1 в соответствие с размером
//таблицы на листе Excel
Sg.FixedRows := 0;
Sg.RowCount := Row2 - Row1 + 1;
Sg.FixedCols := 0;
Sg.ColCount := Col2 - Col1 + 1;

//Читаем данные с листа Excel.
R := 0;
for Row := Row1 to Row2 do begin
C := 0;
for Col := Col1 to Col2 do begin

V := ExSheet.Cells[Row, Col].Value; //Чтение значения ячейки.
case VarType(V) of //Преобразование в зависимости от типа данных.
varOleStr : S := V; //Строковые данные.
varDouble : S := FloatToStr(V); //Числовые данные.
varDate : S := FormatDateTime('dd.mm.yyyy"-"hh.nn.ss.zzz', V); //Данные типа даты и времени.
varEmpty : S := ''; //Пустое значение (из пустой ячейки).
else
S := '<?>'; //Данные незарегистрированного типа.
end;
//Читаем данные очередной ячейки на листе Excel
//и записываем их в ячейку StringGrid1.
Sg.Cells[C, R] := S;
//Переход к следующему слобцу StringGrid1.
Inc(C);
end;
// Переход к следующей строке StringGrid1.
Inc(R);
end;
ExBook.Close;
ExApp.Quit;
end;
Ответить с цитированием
  #6  
Старый 24.01.2015, 21:47
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Ну как и ожидалось, два вызова Execute.
Если я правильно понял, то вся эта чехарда затеяна для выбора существующего файла? Тогда вам просто надо сделать так:
Код:
 OpenDialog1.Options := OpenDialog1.Options + [ofFileMustExist];
 if not OpenDialog1.Execute then Exit;
 // Далее идет ваш код для работы с выбранным файлом

ПС: и еще один советик. Добавьте строчку:
Код:
ExApp := Unassigned;
после
Код:
ExApp.Quit;
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 24.01.2015 в 21:56.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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