26.05.2009, 18:18 | #1 |
Участник
|
параметры принтера
Для печати отчёта пользуюсь классом ComExcelDocument_RU. У пользователя возникло желание сразу отправлять (без предпросмотра) на принтер (это реализовано) на печать в ДУПЛЕКСНОМ режиме. Никак не получается справиться с этим. Как задавать параметры принтера?
|
|
26.05.2009, 23:19 | #2 |
Участник
|
Устанавливать на принтере по умолчанию перед выводом на печать режим дуплексной печати и снимать его после.
Здесь есть пример для Visual Basic. Этот код можно переложить на Аксапту и реализовывать изменения из нее А вот здесь этот же код адаптирован для VBA
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 26.05.2009 в 23:23. |
|
|
За это сообщение автора поблагодарили: Logger (8). |
08.09.2009, 13:17 | #3 |
Сам.AX
|
Цитата:
Сообщение от AndyD
Устанавливать на принтере по умолчанию перед выводом на печать режим дуплексной печати и снимать его после.
Здесь есть пример для Visual Basic. Этот код можно переложить на Аксапту и реализовывать изменения из нее А вот здесь этот же код адаптирован для VBA Очень нужно. А времени мало. Спасибо. |
|
08.09.2010, 11:56 | #4 |
северный Будда
|
В ComExcelDocument_RU я не нашёл подходящего метода. Вы это сами дописывали или где-то всё-таки есть?
__________________
С уважением, Вячеслав |
|
08.09.2010, 12:49 | #5 |
Участник
|
Нет, в стандартном классе нету.
|
|
08.09.2010, 12:55 | #6 |
Ищущий знания...
|
про дуплексную печать...
все на самом деле просто, изначально в windows в настройках принтера нужно поставить галку "Двухсторонняя печать". Затем нужно отправлять на печать всю книгу целиком, одним заданием. Если будете выводить на печать перебирая листы, дуплексной печати не получиться, потому что каждый лист будет уходить отдельным заданием, а принтер каждое задание начинает с нового листа. по поводу реализации вывода сразу на печать. делаете галку в отчете "На принтер". Если галка стоит то делаете следующее (у нас написана своя обертка для вывода в Excel, но думаю вы поймете что к чему): 1. печатаем книгу: X++: excel.activeWorkBook().PrintOut(1, // From: OleVariant; 32767, // To_: OleVariant; cntCopies ? cntCopies : 1, //Copies: OleVariant; false, // Preview: OleVariant; activePrinter, // ActivePrinter: OleVariant; false, // PrintToFile: OleVariant; true); //Collate: OleVariant; галка печатать "всю книгу" X++: excel.ActiveWindow().Close(false); // save changes X++: excel.finalize();
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем Последний раз редактировалось lev; 08.09.2010 в 13:12. Причина: добавил вариант закрытия экселя |
|
|
За это сообщение автора поблагодарили: pitersky (1), kornix (1). |
08.09.2010, 13:00 | #7 |
Ищущий знания...
|
да забыл, перед формированием отчета конечно надо сделать excel.visible(false) что бы ничего лишнего на экран не выпрыгивало.
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
08.09.2010, 14:08 | #8 |
северный Будда
|
Цитата:
Сообщение от lev
по поводу реализации вывода сразу на печать...
X++: excel.activeWorkBook().PrintOut(1, // From: OleVariant; 32767, // To_: OleVariant; cntCopies ? cntCopies : 1, //Copies: OleVariant; false, // Preview: OleVariant; activePrinter, // ActivePrinter: OleVariant; false, // PrintToFile: OleVariant; true); //Collate: OleVariant; галка печатать "всю книгу"
__________________
С уважением, Вячеслав |
|
08.09.2010, 14:26 | #9 |
Участник
|
Добавьте метод в класс ComExcelDocument_RU
void printOut(int _cntCopies = 1) { m_ComDocument.PrintOut(1, // From: OleVariant; 32767, // To_: OleVariant; cntCopies, //Copies: OleVariant; false, // Preview: OleVariant; 1, // ActivePrinter: OleVariant; false, // PrintToFile: OleVariant; true); } |
|
|
За это сообщение автора поблагодарили: pitersky (1), axalex (1). |
08.09.2010, 14:46 | #10 |
MCP
|
Цитата:
т.е. сначала от ComExcelDocument_RU можно получить getComDocument(), потом то что получили можно сохранить в COM, и от этой COM-переменной вызвать метод Application(), как написано в статье из ссылки: X++: excel = new ComExcelDocument_RU(); excel.newFile(fileName,true); doc = excel.getComDocument(); app = doc.Application(); Workbook = app.ActiveWorkbook();
__________________
AXIOMA Последний раз редактировалось kornix; 08.09.2010 в 15:01. Причина: добавил пример AndyD |
|
|
За это сообщение автора поблагодарили: Ganna (1). |
08.09.2010, 14:58 | #11 |
Ищущий знания...
|
Цитата:
X++: excel = new COM("Excel.Application");
__________________
"Страх перед возможностью ошибки не должен отвращать нас от поисков истины." (с) С Уважением, Елизаров Артем |
|
10.09.2010, 16:13 | #12 |
Участник
|
Вы не нашли activeWorkBook(), потому что доступ к методам классов COM, ComExcelDocument_RU, ComWordDocument_RU происходит по принципу позднего свзвания, т.е. во время исполнения кода программы, в то время как при работе с другими классами срабатывает технология IntelliSense, благодаря которой при указании точки после экземпляра класса всплывает список доступных методов. Поэтому следуйте совету автора предыдущего сообщения
__________________
С уважением, Александр. |
|
10.09.2010, 16:45 | #13 |
Moderator
|
Цитата:
Сообщение от kornix
activeWorkBook можно получить так
т.е. сначала от ComExcelDocument_RU можно получить getComDocument(), потом то что получили можно сохранить в COM, и от этой COM-переменной вызвать метод Application(), как написано в статье из ссылки: X++: excel = new ComExcelDocument_RU(); excel.newFile(fileName,true); doc = excel.getComDocument(); app = doc.Application(); Workbook = app.ActiveWorkbook(); |
|
16.12.2022, 19:39 | #14 |
Участник
|
Цитата:
Сообщение от AndyD
Здесь есть пример для Visual Basic. Этот код можно переложить на Аксапту и реализовывать изменения из нее
А вот здесь этот же код адаптирован для VBA https://web.archive.org/web/20130915...cle.asp?ID=116 На всякий случай сохранил как файл. |
|