Реально ли узнать номер страницы Excel, на которой находимся в момент вывода информации?
Например: выводим построчно текст (с произвольной высотой строки) и надо узнать когда произошел переход на другую страницу.
Вопрос уже практически превратился в соц.опрос, а не в вопрос-ответ
Кол-во страниц в документе посчитать смогло много народу. А узнать номер текущей страницы в момент вывода- пока еще никто не поделился ответом.
п.с. Чуть не забыла добавить: все происходит в пределах одного рабочего листа (назовем его Лист1) обычной книги Excel.
Текст выводится стандартно построчно: excel.write(row, 1, 'текст'); _________________ Трехглазый передает привет банкирам, и желает им долгого здравия (:.
у листа есть коллекция горизонтальных разделителей HPageBreaks (/*разрыв страницы*/)
у каждого разделителя есть свойство .Location.Row, которое содержит номер строки, перед которой этот разделитель вставлен.
у листа есть коллекция горизонтальных разделителей HPageBreaks (/*разрыв страницы*/)
у каждого разделителя есть свойство .Location.Row, которое содержит номер строки, перед которой этот разделитель вставлен.
Что-то не получилось...
Запихнула этот скриптик в excel.cmd:
Код:
excel.cmd('For I = 1 To ActiveSheet.HPageBreaks.Count
If ActiveCell.Row < ActiveSheet.HPageBreaks(I).Location.Row - 1 Then Exit For
Next
MsgBox "Текущая строка на " & CStr(I) & "-й странице" ');
Запустила формировалку. Выдает MsgBox:
Текущая строка на -й странице
Жму Ок на сообщение до тех пор пока видимо вывод не доходит до перехода на следующую страницу, тогда вываливается сообщение "Требуется объект ActiveSheet Ошибка выполнения Microsoft VBScript" _________________ Трехглазый передает привет банкирам, и желает им долгого здравия (:.
Жму Ок на сообщение до тех пор пока видимо вывод не доходит до перехода на следующую страницу, тогда вываливается сообщение "Требуется объект ActiveSheet Ошибка выполнения Microsoft VBScript"
Жму Ок на сообщение до тех пор пока видимо вывод не доходит до перехода на следующую страницу, тогда вываливается сообщение "Требуется объект ActiveSheet Ошибка выполнения Microsoft VBScript"
Нужно так
Код:
Sheet.HPageBreaks
Ага, убрала начало выдавать: Текущая строка на 1-й странице , потом опять доходит до переходного момента и ругачка на ActiveCell %)
Забила пока на определение активной ячейки (ибо не знаю какой метод в данном случае поддерживает ЦФТ), подставила вместо ActiveCell.Row свое значение row (оно ведь по сути у меня = номеру строки активной ячейки в момент вывода), вижу в MsgBox, что все считает. Теперь интересно как в excel.cmd можно присвоить какой-то переменной это значение I, чтобы потом эту переменную анализировать в коде отдельно от excel.cmd? _________________ Трехглазый передает привет банкирам, и желает им долгого здравия (:.
Теперь интересно как в excel.cmd можно присвоить какой-то переменной это значение I, чтобы потом эту переменную анализировать в коде отдельно от excel.cmd?
Не совсем понятна суть. Если нужно значение переменной использовать далее в клиент-скрипте, тут все просто:
Теперь интересно как в excel.cmd можно присвоить какой-то переменной это значение I, чтобы потом эту переменную анализировать в коде отдельно от excel.cmd?
Не совсем понятна суть. Если нужно значение переменной использовать далее в клиент-скрипте, тут все просто:
Если в валидаторе - надо заполнять переменную на форме и обрабатывать событие.
Сейчас попытаюсь объяснить. Есть некий вывод в excel. Допустим вот такой:
Код:
procedure DRAW_REPORTS is
row number :=1;
CurrentPage integer :=1;
OldCurrentPage integer :=1;
begin
for doc in ::[ MAIN_DOCUM]
where doc.[DATE_PROV]>=V_DATE and doc.[DATE_PROV]<V_DATE+1
loop
if CurrentPage!= OldCurrentPage then
debug_pipe(‘Перешли на другую страницу…’,0);
end if;
-- печатаем реквизиты платежного документа
excel.write (row, 1, doc.DOCUMENT_NUM]);
excel.write (row, 2, doc.[SUM_NT];
-- смотрим на какой странице мы находимся
excel.cmd('For I = 1 To Sheet.HPageBreaks.Count
If '||row||' < Sheet.HPageBreaks(I).Location.Row Then Exit For
Next');
OldCurrentPage:= CurrentPage;
row:=row+1;
end loop;
end;
Так вот вопрос: "Где и как?" CurrentPage присвоить значение I, чтобы я могла воспользоваться для себя этой переменной прямо в Локальных описаниях.
Надеюсь вопрос понятен Возможно то, что я спрашиваю - извращение, но это скорее "нужда заставила". _________________ Трехглазый передает привет банкирам, и желает им долгого здравия (:.
Как вариант можно в формируемом скрипте завести переменную которой будешь присваивать найденный номер страницы.
А потом опять же через cmd формировать скрипт в котором будешь обращаться к этой переменной.
А можно примерчик какой-нибудь? Честно говоря не очень поняла чем мне это поможет.
Можно и по-другому пути пойти. Могу я из известной мне ячейки забрать ее value в переменную, чтобы опять же воспользоваться этой переменной в локальных описаниях?
Допустим мне при смене листа надо продолжить вывод не с row, а с row:=row+2.
Не уж то мне ради этого весь вывод в Excel (и прочие радости форматирования) надо пихать в скприпт, где я узнаю, что лист сменился ? Мухи отдельно, котлеты отдельно... все как в сказке %) _________________ Трехглазый передает привет банкирам, и желает им долгого здравия (:.
v_page это индекс массива HPageBreaks который здесь уже вычислялся.
omela пишет:
Можно и по-другому пути пойти. Могу я из известной мне ячейки забрать ее value в переменную, чтобы опять же воспользоваться этой переменной в локальных описаниях?
Можно но это все равно придется делать через cmd, уж лучше переменную испорльзовать
Все это, конечно, замечательно, но тут мы одной ячейке присваиваем значение другой, а надо так, чтобы при смене страницы выводился (в текущей по номеру строке) некий текст и продолжался вывод со следующей строки.
Т.е. по сути мне надо так:
выводим построчно текст:
------------------------
------------------------
------------------------
------------------------
оп, страница поменялась (это анализируем в excel.cmd)
выводим заголовок или некий нужный нам текст:
------наш текст-------
и продолжаем вывод со следующей строки
row:=row+1; (а это в excel.cmd сделать нельзя).
------------------------
------------------------
Как быть? _________________ Трехглазый передает привет банкирам, и желает им долгого здравия (:.
Так можно сделать только проверяя текущую страницу после заполнения каждой новой строки. При этом переменная текущей строки будет заполняться не в валидаторе, а в клиент-скрипте, ибо в валидаторе нельзя отследить изменение текущей страницы.
Что-нибудь в этом роде:
1. Сначала объявили и заинитили переменные текущей строки
и страницы
pragma macro (put, 'excel.cmd (''Cells (CurrentRow, [1]).Value = [2]
For I = 1 To Sheet.HPageBreaks.Count
If CurrentRow < Sheet.HPageBreaks(I).Location.Row Then
CurrentPage = I
Exit For
End If
Next
if OldPage <> CurrentPage then
'Действия при смене страницы, в том числе увеличение CurrentRow
CurrentRow = CurrentRow + 1
Cells (CurrentRow, [2]).Value = "Сменили страницу"
OldPage = CurrentPage
end if
CurrentRow = CurrentRow + 1''', substitute);
3. Использование макроподстановки в валидаторе внутри цикла:
Код:
&put (col, text); -- col - столбец, text - текст ячейки
Так можно сделать только проверяя текущую страницу после заполнения каждой новой строки. При этом переменная текущей строки будет заполняться не в валидаторе, а в клиент-скрипте, ибо в валидаторе нельзя отследить изменение текущей страницы.
Да, пока такая идея и осталась.
Теперь только столкнулась с другой проблемой.
Вроде все верно написала, а выдается ошибка, что "Индекс выходит за пределы допустимого диапазона".... подозреваю, что проблема тут:
Код:
For I = 1 To Sheet.HPageBreaks.Count
If CurrentRow < Sheet.HPageBreaks(I).Location.Row Then
CurrentPage = I
Exit For
End If
Next
А подозреваю именно этот кусок, потому что когда я его убираю все сразу нормально выводиться. _________________ Трехглазый передает привет банкирам, и желает им долгого здравия (:.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
Домен cftclub.ru не связан с ЗАО "Центр Финансовых Технологий" и ни в коей мере не нарушает авторских и иных прав
Владелец может не разделять мнения Участников и не несет ответственности за их публикации
Powered by phpBB