Проблема с выгрузкой в Excel

Тема в разделе "Delphi - Базы данных", создана пользователем antonio2040, 22 июл 2010.

  1. antonio2040

    antonio2040 Гость

    СРОЧНО нужна помощь!!! Для начало вкратце объясню суть задачи. Есть огромная dbf-таблица. Из нее необходимо выбрать данные по определенным критериям и сформировать отчет в Excel. Я делаю с помощью технологии ADO, вывожу в DBGrid саму таблицу. А вот отчет сделать не могу. Таблица должна состоять из нескольких строк, в каждой из которых содержится сумма всех элементов, обладающих сходными свойствами. Проблема состоит в том, что я не могу сформировать правильный SQL-запрос. Как в него добавить строки или что-то вроде того?

    Или...

    Есть еще идея. Можно выгружать в Excel по строке. Но есть одно "но". В процедуре выгрузки файл перезаписывается. Можно ли сделать так, чтобы сначала выгрузились все данные, а потом только он сохранился?

    Вот процедура выгрузки:
    Код (Text):
    // Выгрузка в Excel
    procedure SendtoExcel(ShFile: string; Querys: TADOQuery; m,n:Integer);
    var
    ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: variant;
    BeginCol, BeginRow, j: integer;
    RowCount, ColCount: integer;
    begin

    // Задаем верхнюю левую ячейку
    BeginCol:=2;
    BeginRow:=4;

    // Задаем размеры области, в которую выводятся данные
    RowCount:=Querys.RecordCount+1;
    ColCount:=Querys.FieldDefs.Count;

    // Создание Excel
    ExcelApp:=CreateOleObject('Excel.Application');

    // Отключение реакции Excel на события
    ExcelApp.Application.EnableEvents:=False;

    // Создание книги (Workbook)
    // Если заполняем шаблон, то
    Workbook:=ExcelApp.Workbooks.Add(ShFile);
    Workbook.SaveAs(ShFile);
    ArrayData:=VarArrayCreate([1, RowCount, 1, ColCount], varVariant);

    // Заполнение массива
    Querys.DisableControls;
    Querys.First;
    while not Querys.Eof do
    begin
    for j:=1 to Querys.FieldDefs.Count do
    begin
    ArrayData[Querys.RecNo, j]:=
    Querys.FieldbyName(Querys.FieldDefs.Items[j-1].DisplayName).Value;
    end;
    Querys.Next;
    end;
    Querys.EnableControls;

    // Левая верхняя ячейка
    Cell1:=Workbook.Worksheets[1].Cells[BeginRow, BeginCol];

    // Правая нижняя ячейка
    Cell2:=Workbook.Worksheets[1].Cells[m, n];

    // Область, в которую выводятся данные
    Range:=Workbook.Worksheets[1].Range[Cell1,Cell2];

    // Вывод данных
    Range.Value:=ArrayData;

    // Делаем Excel видимым
    ExcelApp.Visible:=True;
    end;
    ПОМОГИТЕ плиз, а то на работе прибьют
     
  2. VahaC

    VahaC Well-Known Member

    Регистрация:
    10 янв 2007
    Сообщения:
    116
    Симпатии:
    0
    Имхо в вашем случае нужно делать вот так

    1 Получаем данные из бд с помощью TQuery (к которому подключен TDBGrid)
    2 Экспортируем данные из TDBGrid в Excel (примеры есть в сети)
     
  3. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    так может легче так
     
  4. antonio2040

    antonio2040 Гость

    Я делаю по технологии ADO. Далее мне необходимо выбрать 2 суммы(красные столбцы) из таблицы с учетом условий(синие столбцы). Таблица
     
  5. caramba

    caramba Гость

    По технологии АДО это самый не технологичный способ.
    Попробуйте сделать так - через OLE дерните Excel и откройте DBF, как файл.
    Далее сохраните его как Excel-документ, добавьте нужные формулы в ячейки, доработайте дизайн, если нужно.
    И еще одно предложение - работа с Excel по OLE очень медленна. Поэтому избегайте циклов по тысячам ячеек :rolleyes: Используйте работу с диапазонами.
     
Загрузка...
Похожие Темы - Проблема выгрузкой Excel
  1. AgniXRudra
    Ответов:
    2
    Просмотров:
    54
  2. Zloikaktus
    Ответов:
    0
    Просмотров:
    31
  3. c0de3r
    Ответов:
    5
    Просмотров:
    153
  4. DobermannTT
    Ответов:
    10
    Просмотров:
    160
  5. SoulPaladin
    Ответов:
    4
    Просмотров:
    145

Поделиться этой страницей