![]() |
![]() |
![]() |
|
Как распечатать openoffice | ☑ | ||
---|---|---|---|---|
0
wms
10.11.08
✎
15:34
|
Делаю:
ScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl"); ScriptControl.language="javascript"; ScriptControl.eval("Массив=new Array()"); ScriptControl.AddObject("OpenOffice", ServiceManager); ScriptControl.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); ScriptControl.eval("Массив[0].Name='Hidden'"); ScriptControl.eval("Массив[0].Value=true"); Массив = ScriptControl.eval("Массив"); Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); URL = СтрЗаменить(промФайл," ","%20"); URL = СтрЗаменить(URL,"\","/"); URL = "file://localhost/" + URL; // Открыть книгу содержащую шаблон Document = Desktop.LoadComponentFromURL(URL, "_blank", 0, Массив ); Лист = Document.getSheets().GetByName("ИмяЛиста"); Как расспечатать лист? |
|||
1
wms
10.11.08
✎
15:50
|
ап
|
|||
2
Александр_
Тверь 10.11.08
✎
15:58
|
апну, вдруг кто знает. интересно же
|
|||
3
wms
10.11.08
✎
16:00
|
Нашел вот кусок кода, как его на 1С переделать? Пока не соображаю
procedure PrintReceiptOpenOffice; var XLApp, Desktop, Document, Sheet, MyStruct, Cell: Variant; begin XLApp := CreateOleObject('com.sun.star.ServiceManager'); Desktop := XLApp.CreateInstance('com.sun.star.frame.Desktop'); Document := Desktop.LoadComponentFromURL( 'private:factory/scalc', '_blank', 0, VarArrayCreate([0, -1], varVariant)); MyStruct := Document.getSheets; Sheet := MyStruct.getByName('Лист1'); MyStruct := UnAssigned; Document.getCurrentController.getFrame.getContainerWindow.setVisible(False); //здесь выводи свои данные Cell:= VarArrayCreate([0, 0], varVariant); Cell[0] := XLApp.Bridge_GetStruct('com.sun.star.beans.PropertyValue'); Cell[0].Name := 'ToPoint'; Cell[0].Value := '$A$1:$H$20'; MyStruct := XLApp.CreateInstance('com.sun.star.frame.DispatchHelper'); MyStruct.ExecuteDispatch(Document.getCurrentController.getFrame, '.uno:GoToCell', '', 0, Cell); Cell[0].Name := 'Selection'; Cell[0].Value := True; MyStruct.ExecuteDispatch(Document.getCurrentController.getFrame, '.uno:Print', '', 0, Cell); Document.Dispose; Cell := Unassigned; MyStruct := Unassigned; Sheet := Unassigned; Document := Unassigned; Desktop := Unassigned; XLApp := Unassigned; end; |
|||
4
Fragster
гуру
10.11.08
✎
16:01
|
На яндексе забанили?
Печать документа Последняя процедура в этом разделе – процедура вывода на печать текущего документа (листинг 9). Листинг 9 procedure TOpenOffice.Print(iNumCopies:integer); const Bounds:array[1..2] of integer = (0,0); var VariantArray: Variant; begin if ( iNumCopies < 1 ) or ( iNumCopies > 512 ) then iNumCopies := 1; VariantArray := VarArrayCreate(Bounds, varVariant); VariantArray[0]:= MakePropertyValue('CopyCount',iNumCopies); Document.print(VariantArray); end; В данном случае мы передаем на печать необходимое количество копий (iNumCopies). Для меня именно это было критично, хотя есть и другие параметры печати, которые можно задавать точно таким же образом. Например, свойство Pages:string - определяет страницы для печати, формат ввода такой: ' 1-9,11,15-20'; или свойство FileName:string – определяет файл, в который производится печать. |
|||
5
wms
10.11.08
✎
16:13
|
(4) спасибо конечно, но чем это лучше (3) ?
копипастить все умеют. Как это на 1С реализовать? суть вопроса ведь в этом. |
|||
6
wms
10.11.08
✎
16:46
|
апну еще
не понятно как в 1С эти две строки переписать: VariantArray := VarArrayCreate(Bounds, varVariant); VariantArray[0]:= MakePropertyValue('CopyCount',iNumCopies); чтобы вставить в : Document.print(VariantArray); |
|||
7
Fragster
гуру
10.11.08
✎
16:50
|
(6) т.е. скопипастил, но не посмотрел, что?
вот тебе то же из твоего примера: // массив ScriptControl.eval("Массив=new Array()"); // один элемент: ScriptControl.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); // ключ ScriptControl.eval("Массив[0].Name='Hidden'"); // сюда можно и copycount // значение ScriptControl.eval("Массив[0].Value=true"); // ну а сюда - 1 // вытягиваем в 1с: Массив = ScriptControl.eval("Массив"); так понятнее? а то, что некоторые программисты не могут код из одного языка в другой переделать - то это проблемы тех программистов... |
|||
8
Fragster
гуру
10.11.08
✎
16:50
|
(7) + а остальные свойства, если что, так:
ScriptControl.eval("Массив[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); .... |
|||
9
Ковычки
10.11.08
✎
16:58
|
(7) не всегда все так просто (про программистов)
да и использование диспача, это проблемма с головой у программистов ООо |
|||
10
Fragster
гуру
10.11.08
✎
17:00
|
(9) диспач используют только суровые челябинские программисты, остальные используют Document.print(VariantArray);
|
|||
11
Ковычки
10.11.08
✎
17:24
|
примерно
|
|||
12
wms
10.11.08
✎
17:36
|
(7) делал примерно так.
Еще попробовал, так : ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); ScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl"); ScriptControl.language="javascript"; ScriptControl.eval("Массив=new Array()"); ScriptControl.AddObject("OpenOffice", ServiceManager); ScriptControl.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); // ключ ScriptControl.eval("Массив[0].Name='copycount'"); // сюда можно и copycount // значение ScriptControl.eval("Массив[0].Value=1"); // ну а сюда - 1 // вытягиваем в 1с: Массив = ScriptControl.eval("Массив"); Document.print(Массив); не получается - ошибки не выдает, но и не печатает |
|||
13
Ковычки
10.11.08
✎
17:39
|
в восьмерке вообще нафих обертка ненужна в ней есть коммассив и тип вариант, но дело не в том.
смотри мой код, он красивше... да и никто лучче меня ничего не предложит в связке ООо и адинес, ибо я есмь начало ! |
|||
14
Fragster
гуру
10.11.08
✎
17:40
|
(12) а область печати то там есть? ну, и Лист.Print(...) попробовать можно
|
|||
15
Ковычки
10.11.08
✎
17:41
|
+(14) вот тут ты прав... (12) чо хоть печатаем то ?
|
|||
16
wms
10.11.08
✎
17:46
|
Лист.Print(...) пробовал
Область обязательно задавать? Мне два листа надо распечатать, открываю файл - эксель шаблон, его меняю Все ок. Два режима в одном открывается в другом сразу на принтер надо - тут и засада Надо как то к листу привязаться, а метода принт у него то и нету... |
|||
17
wms
10.11.08
✎
17:58
|
апну еще
завтра снова попробую |
|||
18
Ковычки
10.11.08
✎
18:00
|
com.sun.star.table.CellRangeAddress
и setPrintAreas |
|||
19
Ковычки
10.11.08
✎
18:01
|
а чо, апать, я и так знаю как...
тебеж сказал, что я самый крутой по ооо, круче только яйца, выше только звезды |
|||
20
wms
11.11.08
✎
09:42
|
(18) и куда это совать?
понятно, все знают, все спецы и все это делали, тока кода 1С ни у кого почему то нет. |
|||
21
smaharbA
11.11.08
✎
09:44
|
(20) не свисти, код 1с есть и он у меня и у Ковычек... он правдо плагиатор, а я есмь начало всего ООо в 1С
|
|||
22
wms
11.11.08
✎
09:52
|
(21)щас я сделаю сам, опубликую и буду "я есмь начало всего ООо в 1С
" :), а вы тока виртуально |
|||
23
smaharbA
11.11.08
✎
10:11
|
(22) извини, но не будешь... ибо лучче чем моя тебе не сделать и не разобраться с ооо
|
|||
24
smaharbA
11.11.08
✎
10:12
|
+(23) и внимательно изучи код в (0) - откудова он взялся...
|
|||
25
wms
11.11.08
✎
10:24
|
скопипастил у спецов ""я есмь начало всего ООо в 1С"
ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); ScriptControl = Новый COMОбъект("MSScriptControl.ScriptControl"); ScriptControl.language="javascript"; ScriptControl.eval("Массив=new Array()"); ScriptControl.AddObject("OpenOffice", ServiceManager); ScriptControl.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); ScriptControl.eval("Массив[0].Name='CopyCount'"); // сюда можно и copycount ScriptControl.eval("Массив[0].Value=1"); // ну а сюда - 1 //добавляю: ScriptControl.eval("Массив[1]=OpenOffice.Bridge_GetStruct('com.sun.star.table.CellRangeAddress')"); ScriptControl.eval("Массив[1].Name='setPrintAreas'"); // Тут уже ошибка -метода такого нет ScriptControl.eval("Массив[1].Value=1"); //конец добавленного Массив = ScriptControl.eval("Массив"); Document.print(Массив); |
|||
26
smaharbA
11.11.08
✎
11:52
|
Все еще кипятишь ?
Счас спрашивай спецов как выбрать нужный диапазон и надо ли ? и для каждой ли сборки это нужно ... А надо было просто смиренно просить у smaharbA немного снизойти до вашей низости... (код не полон, но рабочий) И еще спроси у своих спецов где они накопали (0) |
|||
27
Fragster
гуру
11.11.08
✎
12:01
|
(26) *олигофрены ;)
|
|||
28
smaharbA
11.11.08
✎
12:04
|
(27) это кому как ))
|
|||
29
Fragster
гуру
11.11.08
✎
12:06
|
(28) отжиг! в мемориз!
|
|||
30
wms
11.11.08
✎
12:57
|
(26) "(код не полон, но рабочий) " код для 7.7
а тема, товарищь для 8-ки (!!!) а перевести не так просто например вместо СпПарам=СоздатьОбъект("СписокЗначений"); СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам)); для 8-ки СпПарам=Новый СписокЗначений; СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам)); - не прокатывает. типы не те (28) а для 8-ки слабо? |
|||
31
wms
11.11.08
✎
12:58
|
в (30)
конечно же не СпПарам.ДобавитьЗначение(Скрипт.eval(СтрПарам)); - не прокатывает. типы не те а СпПарам.Добавить(Скрипт.eval(СтрПарам)); - не прокатывает. типы не те |
|||
32
wms
11.11.08
✎
13:01
|
(26) "И еще спроси у своих спецов где они накопали (0) "
этот код для 1С 8-ки и он работает. туда надо добавить несколько строк для печати листа(диапазона) и все, а не копипастить страницы не рабочего текста |
|||
33
smaharbA
11.11.08
✎
14:14
|
(32) ты с кем споришь ? ты подумал ?
а код в восьмерке будет гораздо просче чем (26) и еще раз спроси у кого брал (0) где он его взял, и где взял тот у кого он взял... |
|||
34
smaharbA
11.11.08
✎
14:16
|
все пипец... больше ниче делать по ооо не стану...
а то видите ли код у них рабочий... Я ТОГДА БЫЛ ПЬЯНЫЙ ! |
|||
35
wms
11.11.08
✎
14:28
|
вот полностью рабочий код,
изменил только название процедуры, вставил параметры и Document.print(Массив); - не печатает. Процедура ПечатьЛистаФайлаOpenOffice(ИмяЛиста, ИмяФайла) Попытка OpenOffice = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение Сообщить(ОписаниеОшибки() + "; Программа OpenOffice не установлена на данном компьютере!"); Возврат ; КонецПопытки; scr= Новый COMОбъект("MSScriptControl.ScriptControl"); scr.language="javascript"; scr.eval("Массив=new Array()"); Массив=scr.eval("Массив"); scr.AddObject("OpenOffice",OpenOffice); scr.eval("Массив[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("Массив[0].Name='Hidden'"); scr.eval("Массив[0].Value=true"); //добавил параметры для печати scr.eval("Массив[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("Массив[1].Name='CopyCount'"); scr.eval("Массив[1].Value=1"); DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); ПутьКФайлуURL = "file:///" + СтрЗаменить(ИмяФайла, "\", "/"); Document = DeskTop.LoadComponentFromURL(ПутьКФайлуURL, "_blank", 0, Массив); Document.lockControllers(); Document.addActionLock(); Листы = Document.getSheets(); Лист = Листы.getByName(ИмяЛиста); НульЯчейка = Лист.GetCellbyPosition(0,0); НульКурсор = Лист.createCursorByRange(НульЯчейка); НульКурсор.GotoEndOfUsedArea(1); НульАдрес = НульКурсор.RangeAddress; ПослСтрока = НульАдрес.EndRow; ПослКолонка = НульАдрес.EndColumn -1; //Печать Document.print(Массив); // Закрываем файл Document.unLockControllers(); Document.removeActionLock(); Document.Close(-1); Возврат; КонецПроцедуры |
|||
36
wms
11.11.08
✎
14:33
|
т.е. в этот код добавил только
scr.eval("Массив[1]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); scr.eval("Массив[1].Name='CopyCount'"); scr.eval("Массив[1].Value=1"); Document.print(Массив); не печетает. Что я не так делаю? |
|||
37
smaharbA
11.11.08
✎
14:35
|
Первое - требую признания моя как "Есмь начало!"
|
|||
38
wms
11.11.08
✎
14:38
|
(37) да будет тебе признание.
если проблему решишь |
|||
39
smaharbA
11.11.08
✎
14:56
|
(38) мене уже и так есть признание, требую твоего смиренния...
ладно Второе - выкинь скрипт используй восьмерку знаю только по картинкам ))) третье - твой код (но выкинь скрипт и используй пункт "Второе" |
|||
40
smaharbA
11.11.08
✎
14:58
|
|
|||
41
smaharbA
11.11.08
✎
14:59
|
Пля, ошибсо... мене позволительно !
|
|||
42
wms
11.11.08
✎
15:13
|
(41) Ошибка при вызове метода контекста (Eval): Произошла исключительная ситуация (Ошибка выполнения Microsoft JScript): Объект не поддерживает это свойство или метод
scr.eval("ОбластьПечати[0].StartColumn=0"); по причине: Произошла исключительная ситуация (Ошибка выполнения Microsoft JScript): Объект не поддерживает это свойство или метод |
|||
43
smaharbA
11.11.08
✎
15:27
|
Короче, разбирайся сам, а то ошибок наделаю, потом будешь тыкать - "типоТупой"...
Потратил на тебя свое дорогое время блин, забирай и восхваляй мой моск... (но пункт "Второе" почитай на сон грядущий и многа думай) |
|||
44
smaharbA
11.11.08
✎
15:28
|
Все. Работай
|
|||
45
smaharbA
11.11.08
✎
15:28
|
Все. Работай и наслаждайся щасьем.
|
|||
46
wms
11.11.08
✎
16:46
|
(45) спасибо за код, но...
наслаждаться не получается. Не печатает. Но, решение проблемы уже совсем близко. Нет уже времни дальше копать. Короче. У меня в файле экселя два листа. Активным при открытии установлен второй лист. Мы в (43) пробуем печатать первый лист. Не печатает. Но, если я в отладчике перед Document.print(ПараметрыПечати); в открытом файле делаю активным первый лист , то после Document.print(ПараметрыПечати); печатает, правда только несколько колонок, но с настройками поиграться думаю будет все печатать. Короче надо как то программно активным необходимый лист делать перед Document.print(ПараметрыПечати); |
|||
47
smaharbA
11.11.08
✎
17:13
|
(46) работает, и в коде (43) что надо то и активизировать можно, и активизировано
(есть но, ненадо скрытым офис запускать для некоторых принтеров, и правильно еще, в параметрах печати указывать еще и принтер) |
|||
48
smaharbA
11.11.08
✎
18:19
|
(46) Еще раз ты ведешь беседу с Самим Создателем, и еще осмеливаешься перечить ?!
... Дальше думай сам, или пусть жуют тебе спецы давшие код в (0) ))) |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |