![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
СРОЧНО нужна помощь!!! Для начало вкратце объясню суть задачи. Есть огромная dbf-таблица. Из нее необходимо выбрать данные по определенным критериям и сформировать отчет в Excel. Я делаю с помощью технологии ADO, вывожу в DBGrid саму таблицу. А вот отчет сделать не могу. Таблица должна состоять из нескольких строк, в каждой из которых содержится сумма всех элементов, обладающих сходными свойствами. Проблема состоит в том, что я не могу сформировать правильный SQL-запрос. Как в него добавить строки или что-то вроде того?
Или... Есть еще идея. Можно выгружать в Excel по строке. Но есть одно "но". В процедуре выгрузки файл перезаписывается. Можно ли сделать так, чтобы сначала выгрузились все данные, а потом только он сохранился? Вот процедура выгрузки: Код:
// Выгрузка в 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;Admin: Пользуемся тегами для оформления кода! ОК, исправлюсь) С оформлением больше проблем не будет! Последний раз редактировалось Antonio2040, 22.07.2010 в 11:52. |
|
#2
|
|||
|
|||
|
Выгрузить это не проблема только зачем таблицу выводить в грид? все что нужно это написать запрос, указать условие отборы и поля которые возможно надо суммировать и потом уже данные из запроса выгрузить в эксель. Проблема сам запрос написать? структуры таблицы приведи и что суммировать в таком случае...
|
|
#3
|
|||
|
|||
|
http://dump.ru/file/4688689 - это таблица Excel
Изображение - это моя выборка (общая из всей таблицы) С запросом проблемы, это да. В DBGrid необязательно выгружать. Мне уже все равно, как это делать, лишь бы как надо работала)) |
|
#4
|
|||
|
|||
|
Вот изображение.
|
|
#5
|
|||
|
|||
|
Запрос необходимо сформировать таким образом, чтобы по каждой массе из Excel'евской таблицы суммировалось то, что выделено красным, с условием того, что выделено синим цветом (Table.jpg). Необходимо, чтобы была такая таблица в итоге. Желтый и розовый - строка и столбец с формулами.
Последний раз редактировалось Antonio2040, 22.07.2010 в 11:48. |
|
#6
|
|||
|
|||
|
Цитата:
Цитата:
если нужно по каждом массе суммировать показатели можно пробывать сделать запрос с параметрами и в цикле присваивать эти самые массы как параметры а результатзаписывать в тот же эксель. |
|
#7
|
|||
|
|||
|
Есть пакет компонентов :
EMS Advanced Export Component Suite (он же EMS QuickExport Component Suite 3.0 - более ранняя версия). Он ориентирован на выгрузку (экспорт) данных из Баз Данных в различные форматы. В частности : XLS, HTML, RTF, PDF, CSV, XML, TXT и др. Очень сильный пакет. На торрентах можно найти. |