Конференция "Corba" » Как установить принтер в Экселе
 
  • TStas © (19.02.09 20:20) [0]
    В ворде он легко устанавливается WinWord.ActivePrinter := ГордоеИмяПринтера
    Пишу макрос в экселе мышкой. Получается тоже самое , только к гордому имени принтера добавляется (Ne01:). Пробовал и с фигнёй в скобочках и без нее - результат один: нельзя установить свойство Printer объекта Application.
    Может, в экселе принтер вообще не меняется? Но это вряд ли, ведь мышкой-то он легко меняется.
  • Сергей М. © (20.02.09 15:17) [1]
    Цитирую протокол отладочного окна (CTRL-G):

    ?Application.ActivePrinter
    HP Color LaserJet 2600n on NE04:

    Application.ActivePrinter = "hp LaserJet 3030 PCL 6"

    ?Application.ActivePrinter
    hp LaserJet 3030 PCL 6 on NE02:



    Все расчудесно работает.
  • TStas © (21.02.09 00:41) [2]
    Да, но при вызове из Дельфей - глюк! Я же не от скуки спросил. Из самого экселя всё чудно устанавливается. :(
  • Сергей М. © (22.02.09 14:52) [3]
    Приводи код, будем посмотреть  ..
  • TStas © (22.02.09 15:52) [4]
    Excel.ActivePrinter := PrintTunesForm.PrinterName; Здесь прпоисходить ошибка немогу записать свойство ActivePrinter объекта Application. Могу даже её текст найти, у меня всё в файл пишется. При этом принтер точно есть, его имя верное. С Вордом ничего подобного не происходит, только с экселем.
  • Сергей М. © (22.02.09 16:48) [5]
    А если указывать принтер непосредственно в PrintOut - та же ошибка ?
  • TStas © (22.02.09 17:54) [6]
    А можно в PrintOut в скобочках принтер писать? Попробую сейчсас.
  • TStas © (22.02.09 17:58) [7]
    Вызов метода PrintOut  совершён неверно. :(
  • Сергей М. © (22.02.09 21:52) [8]
    Как ты получаешь список "гордых имен" ?
  • TStas © (23.02.09 01:31) [9]
    Изначально гордые имена принтеров берутся из Printer.Printers. Потом это настройка, на каком принтере распечатывать. Хранится в инишке, но при чтении пробивается, если ли такой принтер в Printer.Printers, а если его там нету, то снимается флажок и печатается на том принтере, какой Ворд с Экселем сами используют. Здесь точно нету косяка, т. к. с Вордом всё нормально работает. Глюк происходит именно с Экселем.
  • Сергей М. © (24.02.09 09:41) [10]

    > TStas ©   (23.02.09 01:31) [9]


    Хз ..
    Ёхель вообще сам по себе капризен при работе с принтерами.

    Провел у себя эксперимент: у меня на раб.станции инсталлировано 5 принтеров, из которых 3 удаленных сетевых (доступ через Standard TCP/IP port) и 2 "локальных" (доступ через Virtual printer port for USB). Временной порядок их регистрации не помню.

    Если в окне "Принтеры и факсы" упорядочить имена принтеров по возрастанию, то установка в Ёхеле активного принтера выполняется успешно при условии что "гордое имя" выглядит так:

    Гордое Имя Принтера (NeXX:)

    где XX - двузначный индекс этого принтера в списке, визуализируемом в окне "Принтеры и факсы", т.е. в моем случае принтеры индексируются Ne00 .. Ne04

    Локальные принтеры, подключенные через LPT- и COM-интерфейсы, очевидно вместо постфикса NeXX будут иметь постфиксы соотв-но LPTxx и COMxx, и их индексация будет отдельная, т.е. виртуальные и сетевые принтеры имеют свою индексацию, а локальные свою.
  • TStas © (24.02.09 22:50) [11]
    Да вот не зря же я спросил. Есть у меня книжка хорошая по Ворду с Экселем работа через Дельфи. Там как раз без (Ne). Пробовал с "не" и без "не". Последнее, что сейчас попробую, в принтАут наприсать не просто PrintOut(PrinterName), а  PrintOut(ActivePrinter := PrinterName). В книжке почему-то принтер присваиваится дважды: обин раз как активный принтер самому экселю, а второй раз - при вызове принтАут. Неприятность в том, что косяк происходит уже при присвоении принтрера экселю. Есть у меня такое предположение, что это происходит, потому, что на моем компе принтре-то один, а второй в списке - это виртуальный принтер Офиса. Наверно, Эксель чует, что принтер все равно один и менять его бесполезно.
    Лирическое отступление:
    А вообще Эксель капризен весьма и сильно различается в версиях. Так на одном компе программа чудно работает, а на другом, притом с теми же виндами, косячила, пока я не стал после закрытия Екселе убивать насильно через КилПроцесс. На форуме это дружно все осудили как варварство, но когда эксель сообщает вызвавшей программе, что закрыл файл, а не сделал этого - это же лживость. А из-за этого не открывается документ с тем же именем, но из папки с исходниками, точнее, он открывается, но не сохраняются изменения.
  • TStas © (24.02.09 23:14) [12]
    Заработал вот так:
    Excel.ActiveSheet.PrintOut(
                   ActivePrinter := PrintTunesForm.PrinterName)
  • Сергей М. © (25.02.09 09:44) [13]

    > второй в списке - это виртуальный принтер Офиса


    И ты хочешь указать его в кач-ве активного принтера ?

    А что говорит Application.ActivePrinter, если перед этим этот принтер  сделать дифолтным в окне "Принтеры и факсы" ?
  • TStas © (27.02.09 00:43) [14]
    >Сергей М. Спасибо огромное, но передавать Экселю имя принтера в качестве параметра сам бы не догадался. Указавать в качестве активного принтера виртуальный я не собирался. Задача была, и она решена, вот какая: у программы (моей) должна появиться настройка, на чём печатать. Или на умалчиваемом, или на выбранном. ВЫбранные берутся из списка, а список - из Printer.Printers. Это нужно, когда принтеров много. А программа делает документы в Ворде и Экселе.
 
Конференция "Corba" » Как установить принтер в Экселе
Есть новые Нет новых   [134428   +41][b:0][p:0.001]