Консультация № 183353
25.05.2011, 18:49
55.00 руб.
0 4 1
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
Я работаю на Borland Delphi 7, не могу разрешить проблему с экспортом файлов в Microsoft Excel. Нужно вывести файлы из таблицы в экселевский шаблон -
, собственно есть код кнопки, с помощью которой и происходит действие:

var ex:olevariant;
i,j:integer;
begin
if SaveDialog1.Execute then
begin
ex:=createoleobject('excel.application');
ex.Application.EnableEvents := False;
ex.visible:=false;
Ex.DisplayAlerts:=False;
Ex.Workbooks.open(ExtractFilePath(Application.ExeName)+'Skelet1.xls');
Datamodule8.Query1.First;
ex.activeworkbook.activesheet.cells.item[4,2]:=Datamodule8.Query1.Fields.Fields[0].AsInteger;
ex.activeworkbook.activesheet.cells.item[4,8]:=Datamodule8.Query1.Fields.Fields[1].AsString;
for i:=0 to Datamodule8.Query1.RecordCount-1 do
begin
for j:=2 to Datamodule8.Query1.FieldCount-1 do
ex.activeworkbook.activesheet.cells.item[i+17,j]:=Datamodule8.Query1.Fields.Fields[j].AsString;
Datamodule8.Query1.Next;
ex.activeworkbook.Rows['18:18'].Select;
ex.Selection.Insert();
end;
ex.activeworkbook.saveas(SaveDialog1.FileName);
ex.application.quit;
ex:=unassigned;
end;
end;

Вот изображение с результатом по данному коду-

А задача заключается в том, что после каждого предмета вставлялась пустая строка, как в данном примере -


Модифицируйте код или предложите свой вариант, спасибо за внимание

Обсуждение

Неизвестный
25.05.2011, 20:14
общий
Может Вам подойдет такой вариант:

...
for i:=0 to Datamodule8.Query1.RecordCount-1 do
begin
for j:=2 to Datamodule8.Query1.FieldCount-1 do
ex.activeworkbook.activesheet.cells.item[i*2+17,j]:=Datamodule8.Query1.Fields.Fields[j].AsString;
Datamodule8.Query1.Next;
ex.activeworkbook.Rows['18:18'].Select;
ex.Selection.Insert();
ex.activeworkbook.Rows['18:18'].Select;
ex.Selection.Insert();

end;
...
Неизвестный
26.05.2011, 10:05
общий
да Шичко Игорь предложил самый простой вариант для Вашей задачи. Условно говоря каждый элемент таблицы бкдет размещен в 2 строках (i*2+17)
в первой строке будет содержаться сам предмет а вторая строка будет пустой
Неизвестный
26.05.2011, 12:36
общий
Благодарю
Неизвестный
26.05.2011, 13:07
общий
это ответ
Здравствуйте, Александр!
Предлагаю следующий вариант решения задачи.
Фрагмент кода - в приложении.
Вопросы - пишите в форум.
Удачи.

Приложение:
...
for i:=0 to Datamodule8.Query1.RecordCount-1 do
begin
for j:=2 to Datamodule8.Query1.FieldCount-1 do
ex.activeworkbook.activesheet.cells.item[i*2+17,j]:=Datamodule8.Query1.Fields.Fields[j].AsString; // пишем в каждой второй строке
Datamodule8.Query1.Next;
ex.activeworkbook.Rows['18:18'].Select;
ex.Selection.Insert();
ex.activeworkbook.Rows['18:18'].Select; // добавляем 2 строки
ex.Selection.Insert();

end;
...
Форма ответа