Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.04.2009, 00:19   #1
shrews
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 11
По умолчанию 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;
и второе запись из стрингрида в excel немогу понять в чем ошибка
Код:
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;
п.с сорри за орфографию

Последний раз редактировалось shrews; 07.04.2009 в 00:30.
shrews вне форума Ответить с цитированием
Старый 07.04.2009, 07:39   #2
Трофимов Александр
Форумчанин
 
Аватар для Трофимов Александр
 
Регистрация: 03.11.2006
Сообщений: 321
По умолчанию

В делфи нумерация столбцов по-моему с 0 начинается
Трофимов Александр вне форума Ответить с цитированием
Старый 07.04.2009, 08:44   #3
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

В StringGrid'e левая верхняя ячейка имеет координаты [0,0].
т.е.
Цитата:
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;
заменить на
Код:
 K:=0;
  repeat
   for R:=0 to Y-1 do
    StringGrid1.Cells[(R),(K)]:=RangeMatrix[K,R];
    StringGrid1.RowCount:=K+1;
    inc(K,1);
  until K>X;
S@fer вне форума Ответить с цитированием
Старый 07.04.2009, 08:49   #4
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

А по второму вопросу есть хорошая статья
http://delphiworld.narod.ru/base/excel_work.html
там всё подробно описано
S@fer вне форума Ответить с цитированием
Старый 07.04.2009, 10:05   #5
shrews
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 11
По умолчанию

спс всем))
shrews вне форума Ответить с цитированием
Старый 07.04.2009, 10:09   #6
shrews
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 11
По умолчанию

не виходит чет пиешт First chance exception at $7C812AEB. Exception class EVariantBadIndexError with message 'Variant or safe array index out of bounds'. Process Project1.exe (3568)
shrews вне форума Ответить с цитированием
Старый 07.04.2009, 10:23   #7
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Попробуйте так
Код:
 K:=1;
  repeat
   for R:=1 to Y do
    StringGrid1.Cells[(R-1),(K-1)]:=RangeMatrix[K,R];
    StringGrid1.RowCount:=K+1;
    inc(K,1);
  until K>X;
S@fer вне форума Ответить с цитированием
Старый 07.04.2009, 10:37   #8
shrews
Пользователь
 
Регистрация: 02.03.2009
Сообщений: 11
По умолчанию

оО спс) а щет второво я так ниче и не нашол
shrews вне форума Ответить с цитированием
Старый 07.04.2009, 10:49   #9
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Вот пример:
Код:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    StringGrid1: TStringGrid;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  XL: variant;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i,j:integer;
begin
 // Обьект EXCEL
  XL := CreateOleObject('Excel.Application');
// Загружаем документ
  XL.WorkBooks.Open(ExtractFilePath(ParamStr(0))+'\akt.xls');
  {
  //Или создаем новый документ
  XL.WorkBooks.Add;
  }
 // Делаем его видимым
  XL.Visible := true;
  for i:=0 to StringGrid1.ColCount do
  for j:=0 to StringGrid1.RowCount do begin
  XL.WorkBooks[1].WorkSheets[1].Cells[i+1, j+1]:=StringGrid1.Cells[i,j];
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i,j:integer;
a:integer;
begin
a:=1;
for i:=0 to StringGrid1.ColCount do
for j:=0 to StringGrid1.RowCount do begin
StringGrid1.Cells[i,j]:=IntToStr(a);
a:=a+1;
end;

end;

end.
S@fer вне форума Ответить с цитированием
Старый 07.04.2009, 10:50   #10
S@fer
Форумчанин
 
Аватар для S@fer
 
Регистрация: 29.01.2009
Сообщений: 411
По умолчанию

Не забудь в Uses добавить ComObj
S@fer вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi ->Excel->График по таблице->Delphi Avalonix БД в Delphi 2 30.10.2008 14:04
Delphi+Excel Ирисска БД в Delphi 5 18.11.2007 13:14
Delphi и Excel zzzzz Помощь студентам 3 10.11.2007 17:37
Delphi+Excel Suall БД в Delphi 0 30.04.2007 07:37