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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2016, 10:08   #1
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию Из ADOQuery в Excel

Всем доброго времени суток!

Имеется вот такая процедура:
Код:
procedure SendtoExcel(ShFile: String; Querys: TADOQuery);
var
   ExcelApp, Workbook, Range, Cell1, Cell2, ArrayData: Variant;
   BeginCol, BeginRow, j: integer;
   RowCount, ColCount: Integer;
begin
   BeginCol := 1;
   BeginRow := 2;

 // Размеры выводимого массива данных
   RowCount := Querys.RecordCount;
   ColCount := Querys.FieldDefs.Count;

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

 // Отключаем реакцию Excel на события, чтобы ускорить вывод информации
   ExcelApp.Application.EnableEvents := false;

 //  Создаем Книгу (Workbook)
 //  Если заполняем шаблон, то
   Workbook := ExcelApp.WorkBooks.Add(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[BeginRow + RowCount - 1,
    BeginCol + ColCount - 1];

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

 // А вот и сам вывод данных
 // Намного быстрее поячеечного присвоения
   Range.Value := ArrayData;

//  WorkBook.WorkSheets[1].Range[Cell1, Cell2].Select;
//  WorkBook.WorkSheets[1].Selection.Columns.AutoFit;

 // Делаем Excel видимым
   ExcelApp.Visible := True;
end;
Каким образом можно изменить процедуру или как правильно использовать в качестве левой верхней и правой нижней ячейки вида:
$B$8 и $w$90?

Заранее благодарю за ответ
nactyx вне форума Ответить с цитированием
Старый 09.06.2016, 10:13   #2
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Вроде разобрался. Хм.
nactyx вне форума Ответить с цитированием
Старый 09.06.2016, 10:20   #3
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Но теперь другие моменты.
Такой вопрос: кто-нибудь "вшитые" подключения с запросами в Excel переделывал под то, чтобы запрос и все с ним связанное было в коде, а от Excel был только шаблон? Т.е. у меня проблемы в вопросах форматирования.

Как работает сейчас:

Т.е. автоматически сокращает этот диапазон и т.п.

Как работает в моей программе через Делфи:


Возникает вопрос: кроме диапазона данных из подключение в Excel - где-то еще какие-то настройки имеются? Если да, то как их реализовать через Делфи?

Последний раз редактировалось nactyx; 09.06.2016 в 10:27.
nactyx вне форума Ответить с цитированием
Старый 21.07.2016, 10:34   #4
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Все еще актуально.
nactyx вне форума Ответить с цитированием
Старый 21.07.2016, 12:03   #5
come-on
Участник клуба
 
Регистрация: 21.10.2015
Сообщений: 1,361
По умолчанию

не очень понятно что вам надо, но в екселе есть шаблоны
come-on вне форума Ответить с цитированием
Старый 21.07.2016, 12:29   #6
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от come-on Посмотреть сообщение
не очень понятно что вам надо, но в екселе есть шаблоны
Сейчас попробую объяснить.

Вот что имеем в Excel'e:

На каждую страницу по подключению с кодом, в которой вызывается некая процедура. Я беру эту процедуру и вызываю через Делфи и вывод результата получается не такой "красивый" как он получается в шаблоне Excel'я с этим подключением.
Т.е. имеется шаблон с подключением
Мне нужно пустой шаблон без подключением, работа с которым организована на уровне Delphi. Я это сделал вроде, но вывод визуально не совпадает, как видно выше по скриншотам.

Собственно вот и возникает вопрос: какие такие могут быть еще настройки или что-нибудь подобное, что влияет на вывод и почему такие расхождения визуального плана?
nactyx вне форума Ответить с цитированием
Старый 21.07.2016, 17:37   #7
Igor[Игорь]
Пользователь
 
Аватар для Igor[Игорь]
 
Регистрация: 25.11.2011
Сообщений: 52
По умолчанию

Попробуй присваивать массиву не Value , а AsString
e-mail: igor23dec@yandex.ru , ICQ: 2168364 , Telegram: @IgorVN
Delphi, PHP
Примеры http://igorvn.ucoz.ru/
Igor[Игорь] вне форума Ответить с цитированием
Старый 22.07.2016, 08:50   #8
nactyx
Форумчанин
 
Регистрация: 11.10.2010
Сообщений: 152
По умолчанию

Цитата:
Сообщение от Igor[Игорь] Посмотреть сообщение
Попробуй присваивать массиву не Value , а AsString
Я даже пробовать не стану - ничего не изменится. Чушь.
nactyx вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Экспорт Отчётов в Excel из ADOQuery kucher69 БД в Delphi 9 27.10.2015 11:47
вывод данных из 2-х adoquery в excel поочередно sdr1 Общие вопросы Delphi 6 27.01.2015 14:13
Создание диаграммы в Excel из ADOQuery КатЭ БД в Delphi 0 28.11.2012 19:17
ADOQuery Sanakan Помощь студентам 0 10.11.2009 23:31
adoquery Toxa БД в Delphi 10 12.02.2007 20:07