| Код | 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..."
Я даже не представляю что это |