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


Автор: Martisha 13.1.2009, 11:16
Добрый день,
Знаю, эта тема уже не раз обсуждалась, только сама не знаю в чем проблема, помогите разобраться!!!
вобщем вывожу из Query запроса информацию в Excel, она выводится только не вся, а только та, что отожбражается в dbGrid-e
вот код:
Код

procedure TForm2.Button1Click(Sender: TObject);
var
    XL, Cell1, Cell2, ArrayData: Variant;
    RowCount: integer;
    BeginCol, BeginRow,i,ColCount:byte;
begin
    BeginCol := 1;  //начальные координаты ячейки
    BeginRow := 2;
    RowCount := Form2.OraQuery1.RecordCount; //количество строк
    ColCount := 18; //количество столбцов
    XL := CreateOleObject('Excel.Application');  //создаем Excel
    XL.Application.EnableEvents := false;  // отключаем реакцию Excel на событиядля ускорения
    XL.WorkBooks.Add;   //  добавляем книгу
    XL.Rows.Rows[1].Font.Bold:=true; //жирный шрифт
    XL.Rows.Rows[1].Font.Size:=10; //азмершрифта
    XL.Rows.Rows[1].WrapText := True; //перенос текста по словам
    XL.Rows.Rows[1].HorizontalAlignment := 3;//выравнивание по центру по горизонтали
    XL.Rows.Rows[1].VerticalAlignment := 2;//выравнивание по центру по ветикали
    XL.Cells[1,1]:= 'Date';//создаем шапку
    XL.Cells[1,2]:='Time';
    XL.Cells[1,3]:='Source';
    XL.Cells[1,4]:='Destination';
    XL.Cells[1,5]:='Packets';
    XL.Cells[1,6]:='Bytes';
    XL.Columns.Columns[1].ColumnWidth:=10;//размер столбцов
    XL.Columns.Columns[2].ColumnWidth:=10;
    XL.Columns.Columns[3].ColumnWidth:=29;
    XL.Columns.Columns[4].ColumnWidth:=29;
    XL.Columns.Columns[5].ColumnWidth:=10;
    XL.Columns.Columns[6].ColumnWidth:=10;

    ArrayData := VarArrayCreate([1, RowCount, 1, ColCount], varVariant); //создаем вариантный массив для
                                                                                                                    //заполнения данных из запоса
    Form2.OraQuery1.First;
    for i := 1 to RowCount do
    begin
        ArrayData[i,1] := Form2.OraQuery1['date_'];
        ArrayData[i,2] := Form2.OraQuery1['time_'];
        ArrayData[i,3] := Form2.OraQuery1['source'];
        ArrayData[i,4] := Form2.OraQuery1['destination'];
        ArrayData[i,5] := Form2.OraQuery1['packets'];
        ArrayData[i,6] := Form2.OraQuery1['bytes'];
    Form2.OraQuery1.Next;
    end;
    Cell1 := XL.Cells[BeginRow-1, BeginCol];       // левая верхняя ячейка области в которую 
                                                                           //будем вводить данные    
    Cell2 := XL.Cells[BeginRow+RowCount-1, BeginCol + ColCount-1];//правая нижняя ячейка области
    XL.Range[XL.Cells[BeginRow, BeginCol], Cell2].Value := ArrayData; //вывод данных
    XL.Visible := true;
end;

Автор: Martisha 29.1.2009, 10:42
ох, до чего иногда бывают смешны ошибки!!! одну пееменную надо просто было задать не byte а integer.. smile 

Автор: Данкинг 29.1.2009, 11:50
 smile 
А что за Application.EnableEvents такой? Как именно и реально ли это ускоряет работу с XLS ?

Автор: Martisha 29.1.2009, 16:24
Цитата(Данкинг @  29.1.2009,  11:50 Найти цитируемый пост)
А что за Application.EnableEvents такой? Как именно и реально ли это ускоряет работу с XLS ? 

сама не очень поняла эту строчку, но раз уж так везде пишется решила не трогать
 smile 

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