Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: ActiveX/СОМ/CORBA > Вылетает ошибка при открытии Excel-файла


Автор: Bastar 3.12.2008, 10:39
Код

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons, Grids, ComObj;

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    BitBtn1: TBitBtn;
    OpenDialog1: TOpenDialog;
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

function Xls_To_StringGrid(AGrid: TStringGrid; AXLSFile: string): Boolean;
const
xlCellTypeLastCell = $0000000B;
var
XLApp, Sheet: OLEVariant;
RangeMatrix: Variant;
x, y, k, r: Integer;
begin
Screen.Cursor:=crAppStart;
Result := False;
XLApp := CreateOleObject('Excel.Application');
try
   XLApp.Visible := False;
   XLApp.Workbooks.Open(AXLSFile);
   Sheet := XLApp.Workbooks[ExtractFileName(AXLSFile)].WorkSheets[1];
   Sheet.Cells.SpecialCells(xlCellTypeLastCell, EmptyParam).Activate;   // ВОТ СДЕСЬ ВЫЛЕТАЕТ ОШИБКА
   x := XLApp.ActiveCell.Row;
   y := XLApp.ActiveCell.Column;
   AGrid.RowCount := x;
   AGrid.ColCount := y;  
   RangeMatrix := XLApp.Range['A1', XLApp.Cells.Item[X, Y]].Value;
   k := 1;
   repeat
     for r := 1 to y do
      AGrid.Cells[(r - 1), (k - 1)] := RangeMatrix[K, R];
     Inc(k, 1);
     AGrid.RowCount := k + 1;  
   until k > x;  
   RangeMatrix := Unassigned;
finally
   if not VarIsEmpty(XLApp) then
   begin 
     XLApp.Quit;  
     XLAPP := Unassigned;  
     Sheet := Unassigned;  
     Result := True;  
   end;  
end;
Screen.Cursor:=crDefault;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
  form1.OpenDialog1.Filter:= 'Эксель файлы (*.xls)|*.xls';
  form1.OpenDialog1.Title:= 'Open';
  form1.OpenDialog1.FilterIndex:=2;
  if form1.OpenDialog1.Execute then
    Xls_To_StringGrid(form1.stringgrid1,form1.OpenDialog1.filename);
end;

end.



Пишет "Project Project1.exe raised exception class EOleException with message" 'Метод Activate из класса Range завершено не верно'.Process stopped..."

Я даже не представляю что это 

Автор: volvo877 3.12.2008, 11:19
Цитата(Bastar @  3.12.2008,  09:39 Найти цитируемый пост)
Пишет "Project Project1.exe raised exception class EOleException with message" 'Метод Activate из класса Range завершено не верно'.Process stopped..."
Версию Excel озвучь, и покажи, что у тебя находится в файле. На Excel 2002 + Delphi 2009 с файлом, содержащим 2 колонки цифр, все обрабатывается прекрасно...

Автор: Bastar 3.12.2008, 11:37
volvo877, 
Версия Офиса 2003 в фале находится четыре столбика с полутротысячью строками) данные чисто числовые

Добавлено через 12 минут и 37 секунд
А все разобрался!!! Код работает если в файле 1 лист... Спасибо за внимание)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)