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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.06.2016, 08:58   #1
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
Печаль Delphi и Excel

Здравствуйте, задача такая сформировать в Delphi отчет на основании данных из БД, и соответственно его распечатать, весь отчет готов, но я столкнулся с проблемой, что если количество строк с шапкой 51, то строка с итоговым подсчетом будет распечатана на новой странице, как можно предотвратить это, скажем перенося на новую страницу еще одну строчку (расположенную выше). и еще вопросик, можно ли что то сделать, что бы Delphi не подчеркивал красным методы используемые для Excel (тип переменной variant) заранее благодарю, за уделенное время.
PTyTb32 вне форума Ответить с цитированием
Старый 27.06.2016, 19:03   #2
gotfer
Новичок
Джуниор
 
Регистрация: 27.06.2016
Сообщений: 1
По умолчанию

У меня точно такая же проблема, все еще ищу толковый ответ на этот совсем непростой вопрос, подскажите, кто в силах!
Успех приходит только к терпеливым!
gotfer вне форума Ответить с цитированием
Старый 27.06.2016, 19:18   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

В ActiveSheet вроде можно добавить HPageBreak. Не добавлял, не было нужды это использовать. Там есть какие-то нюансы, и тот же excel может проигнорировать это дело. Или программно пустые строки в таблицу вставлять. В любом случае придется высоту страницы высчитывать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 27.06.2016, 19:32   #4
Rockot
Форумчанин
 
Аватар для Rockot
 
Регистрация: 01.06.2012
Сообщений: 139
По умолчанию

Всё просто считаем сколько занимает ваш header и футер расчитываем сколько мы запишем между ними, расчитываем влезет ли если не влезет делаем отступ переходим на другую страницу, простая математика.

Код:
const list = 40;
var
R: integer;
begin
R := ( ( R div list ) + 1 )* list + 1;
end;
R (row) - текущая строка
Следствие: 99% проблем, сваливаемых на Microsoft, является следствием тупости самих программистов.
Rockot вне форума Ответить с цитированием
Старый 28.06.2016, 11:07   #5
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от Rockot Посмотреть сообщение
Всё просто считаем сколько занимает ваш header и футер расчитываем сколько мы запишем между ними, расчитываем влезет ли если не влезет делаем отступ переходим на другую страницу, простая математика.

Код:
const list = 40;
var
R: integer;
begin
R := ( ( R div list ) + 1 )* list + 1;
end;
R (row) - текущая строка
Rackot, а что если 1 и ли более строк изменят свой размер? в этом случае количество строк на страницу изменится и ваш код будет работать не корректно
PTyTb32 вне форума Ответить с цитированием
Старый 28.06.2016, 12:16   #6
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

А в цикле пробежаться и посчитать не?
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 28.06.2016, 13:32   #7
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

мне снова изменили форму отчета, ну основное я понял что нет граници печатного листа))))
PTyTb32 вне форума Ответить с цитированием
Старый 29.06.2016, 12:29   #8
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
Стрелка

все равно не выходит определить где новый лист...пробывал даже так
Код:
 for j := 1 to i do
   begin
      c3:=c3+ap.rows[j].RowHeight;//в с3 кладем высоту готовых строк
   end;
 if ((list*474) - c3) mod 474 = 0 then // проверяем кратность суммы всех строк высоте листа
   begin
     RepHader(i); //рисуем шапку в начиная от строки i
     RepAddRow(i+2); // добавлем новую строку с данными под шапку
   end
   else
     RepAddRow(i);//добавляем новую запись в строку i
end;
но все равно работает не корректно, list увеличивается на 1 каждый вызов процедуры RepHader(i);
PTyTb32 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi Excel (сохранение записи в Excel) Кас Алина Общие вопросы Delphi 4 28.05.2010 09:17
как при импорте из Excel в delphi узнать сколько заполненных строк в книге Excel?чтобы организовать цикл betirsolt БД в Delphi 1 17.01.2010 18:51
Delphi 7 и Excel Mutagena Помощь студентам 2 12.11.2009 22:50
Delphi ->Excel->График по таблице->Delphi Avalonix БД в Delphi 2 30.10.2008 14:04