|
#1
|
|||
|
|||
delphi и excel
помогите плис как зделать штоб вивод с excel файла начиналса с первой ячейку stringgrida а не с второй
Код:
procedure TForm1.Button15Click(Sender: TObject); var WorkBk: _WorkBook; WorkSheet: _WorkSheet; K,R,X,Y: integer; IIndex: OleVariant; RangeMatrix: Variant; NomFich: WideString; begin NomFich:=ExtractFilePath(ParamStr(0))+'xl.xls'; IIndex:=1; XLApp.Connect; // Открываем файл Excel XLApp.WorkBooks.Open(NomFich,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam, EmptyParam,EmptyParam,0); WorkBk:=XLApp.WorkBooks.Item[IIndex]; WorkSheet:=WorkBk.WorkSheets.Get_Item(1) as _WorkSheet; // Чтобы знать размер листа (WorkSheet), т.е. количество строк и количество // столбцов, мы активируем его последнюю непустую ячейку WorkSheet.Cells.SpecialCells(xlCellTypeLastCell,EmptyParam).Activate; // Получаем значение последней строки X:=XLApp.ActiveCell.Row; // Получаем значение последней колонки Y:=XLApp.ActiveCell.Column; // Определяем количество колонок в TStringGrid StringGrid1.ColCount:=Y+1; // Сопоставляем матрицу WorkSheet с нашей Delphi матрицей RangeMatrix:=XLApp.Range['A1',XLApp.Cells.Item[X,Y]].Value2; // Выходим из Excel и отсоединяемся от сервера XLApp.Quit; XLApp.Disconnect; // Определяем цикл для заполнения TStringGrid K:=1; repeat for R:=1 to Y do StringGrid1.Cells[(R),(K)]:=RangeMatrix[K,R]; StringGrid1.RowCount:=K+1; inc(K,1); until K>X; // Un assign the Delphi Variant Matrix RangeMatrix:=Unassigned; end; Код:
Код: procedure TForm1.Button13Click(Sender: TObject); var Excel, WorkBook, Sheet: Variant; begin Excel:=CreateOleObject('Excel.Application.10'); // для Office XP // Excel:=CreateOleObject('Excel.Application'); // для остальных Excel.SheetsInNewWorkbook:=1; WorkBook:=Excel.WorkBooks.Add; Sheet:=WorkBook.WorkSheets[1]; Sheet.Cells.VerticalAlignment:=xlCenter; Sheet.Cells[1, 1]:='XX___1___XX'; Sheet.Cells[5, 5]:='XX___1___XX'; Sheet.Cells.Columns.AutoFit; Excel.Visible:=True; end; |