Цитата:
Сообщение от Страдалецъ
Смотрю, и не вижу в упор второго вызова в этой строчке:
Код:
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;