Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
Скажи пожалуйста - а можно из Калка взять формат строки?
Как в екселе например: выделяем область: oXls.Range(oRformat.Cells(1,1),oRformat.Cells(2,2)).Select() oXls.Selection.Copy() А потом все ФОРМАТЫ строки просто скопировать в нужное место: oXls.Range(oRdata.Cells(7,7),oRdata.Cells(8,8)).Select() oXls.Selection.PasteSpecial(4) Наверняка есть простая команда форматирования... В каждой ячейке может быть свой тип шрифта, размер, жиронсть, цвет и т.д. Вот как в калке взять ВСЕ форматы конкретной области и вставить в определённое место? нашол тока как определить тип данных в каждой конкретной ячейке. |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Смотри у меня в решениях
FUNCTION GetPaint LPARAMETERS loSheet,lnLine1,lnRow1,lnLine2,lnRow2 LOCAL loOldSheet loOldSheet=THIS.ActiveSheet() loSheet=THIS.SelectSheet(loSheet) THIS.SelectRange(loSheet,lnLine1,lnRow1,lnLine2,lnRow2) LOCAL laArgs(1) laArgs(1) =THIS.SetProp() THIS.loDispatcher.executeDispatch(THIS.loDocument.CurrentController.Frame, ".uno:Copy","" , 0, @laArgs) THIS.SelectSheet(loOldSheet) RETU Исправлено 1 раз(а). Последнее : Ydin, 14.01.08 13:52 |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
долго ломаю голову над кодом.
А можно чуток коментарий к нему добавить? Слишком много неизвестных. : ) У вас это займёт секунд 30, а мне спасёт дня три. : ) Спасибо. |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Я попытался, но трудно все расписать. Писал я это давно и все сидит в классе.
Смотри по www.foxclub.ru 2 класса для работы с Excel или Open Office Calc. Модуль OOClasss.prg. Там все есть. Привести пример работы сложно. У меня это в FrameWork'е. Я не имею времени, чтоб оформить все в виде решения. FUNCTION GetPaint LPARAMETERS loSheet,lnLine1,lnRow1,lnLine2,lnRow2 LOCAL loOldSheet PUBLIC gaProps(6) * Запомним текущий лист, чтоб вернуть его текущим loOldSheet=THIS.ActiveSheet() && В классе запоминается текущий лист * Заданный лист делаем текущим loSheet=SelectSheet(loSheet) * Выделяем ранг SelectRange(loSheet,lnLine1,lnRow1,lnLine2,lnRow2) LOCAL laArgs(1) laArgs(1) = SetProp() && Это проще можно написать. Прямо массиву присвоение и все * Запоминаем форматы (кисть) THIS.loDispatcher.executeDispatch(THIS.loDocument.CurrentController.Frame, ".uno:Copy","" , 0, @laArgs) * Восстанавливаем "текущий" лист THIS.SelectSheet(loOldSheet) RETURN FUNCTION SelectRange * Call: SelectRange(loSheet,lnLine1,lnCol1,lnLine2,lnCol2) LPARAMETERS loSheet,lnLine1,lnCol1,lnLine2,lnCol2 IF TYPE('lnLine1')='C' IF ISDIGIT(lnLine1) lcRange='A'+STRTRAN(lnLine1,':',':IV') ELSE lcRange=lnLine1 ENDIF ELSE lnLine1=EVL(lnLine1,1) lnCol1=EVL(lnCol1,1) lnLine2=EVL(lnLine2,lnLine1) lnCol2=EVL(lnCol2,lnCol1) TEXT TO lcRange <<Num2Lat(lnCol1)>><<int(lnLine1)>>:<<Num2Lat(lnCol2)>><<int(lnLine2)>> ENDTEXT ENDIF LOCAL laArgs(1) laArgs(1) =SetProp("ToPoint",lcRange) RETURN THIS.loDispatcher.executeDispatch(THIS.loDocument.CurrentController.Frame, ".uno:GoToCell", "", 0, @laArgs) FUNCTION SelectSheet LPARAMETERS lcSheetName LOCAL lo, lcType IF TYPE('lcsheetName')='O' lcSheetName=lcSheetName.getName() ENDIF lcType=TYPE('lcsheetName') DO CASE CASE lcType = 'N' lo=THIS.loDocument.Sheets.getbyindex(lcSheetName-1) CASE lcType = 'C' lo=THIS.loDocument.Sheets.getbyName(this.GetCorrectName(lcSheetName)) OTHERWISE lo=lcSheetName ENDCASE THIS.loDocument.getCurrentController.setActiveSheet(lo) RETURN lo FUNCTION SelectRange * Call: SelectRange(loSheet,lnLine1,lnCol1,lnLine2,lnCol2) LPARAMETERS loSheet,lnLine1,lnCol1,lnLine2,lnCol2 IF TYPE('lnLine1')='C' IF ISDIGIT(lnLine1) lcRange='A'+STRTRAN(lnLine1,':',':IV') ELSE lcRange=lnLine1 ENDIF ELSE lnLine1=EVL(lnLine1,1) lnCol1=EVL(lnCol1,1) lnLine2=EVL(lnLine2,lnLine1) lnCol2=EVL(lnCol2,lnCol1) TEXT TO lcRange <<Num2Lat(lnCol1)>><<int(lnLine1)>>:<<Num2Lat(lnCol2)>><<int(lnLine2)>> ENDTEXT ENDIF LOCAL laArgs(1) laArgs(1) =SetProp("ToPoint",lcRange) RETURN THIS.loDispatcher.executeDispatch(THIS.loDocument.CurrentController.Frame, ".uno:GoToCell", "", 0, @laArgs) FUNCTION SetProp( lcName, luValue, lnNum ) lnNum=EVL(lnNum,1) WITH THIS gaProps(lnNum).NAME = lcName gaProps(lnNum).VALUE = luValue RETURN .laProps(lnNum) ENDWITH FUNCTION Num2Lat LPARA lnNum LOCAL lc, ln1, ln2 lc="ABCDEFGHIJKLMNOPQRSTUVWXYZ" IF lnNum<27 RETU SUBS(lc,lnNum,1) ENDIF ln1=FLOOR(lnNum/26) ln2=lnNum-ln1*26 IF ln2=0 ln1=ln1-1 ln2=26 ENDIF RETU SUBS(lc,ln1,1)+SUBS(lc,ln2,1) |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
излазил весь сайт.
Никак не могу найти Модуль OOClasss.prg : ((( Где он хоть примерно находица? В готовых решениях? Или где? КАк я понял - вы кинули часть библиотеки. Так? Пасиба за неё. |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Я ж ссылку дал. Файловые архивы.
Нажать мышкой на ссылку и смотреть в таблице справа Ydin. Найти и скачать |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
ага
нашол. Пасиба! Ну ты и понаписал. Походу на все случаи жизни? В моём примере я так понял, что мне нужно использовать функцию GetPaint ? |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Ydin Сообщений: 7648 Откуда: Киев Дата регистрации: 16.12.2005 |
Да, желаю удачи.
|
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
что то твою библиотека содержит какие то непонятные фоксу (и мне) команды...
Program ...\ooclass.prg has the following errors: Unknown LANG - Undefined Unknown PRESS - Undefined Unknown NUM2LAT - Undefined Unknown RANGE_N2C - Undefined Unknown SAY - Undefined Unknown RANGE_C2N - Undefined Unknown ARRAYPASSER - Undefined И ещё вапрос, есть в библиотеке такая строка loOldSheet=THIS.ActiveSheet() Часто встречается оператор THIS Он обозначает что? Конкретно этот класс? Я добавил ooClass.prg как программу. И включил програму в проект. Вызываю командой: SET PROCEDURE TO ooClass ADDITIVE Поэтому возникают ошибки. : ( Как вы сами её у себя подключали? |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
всё арвно не понимаю вот эту строку. : (
* Запоминаем форматы (кисть) THIS.loDispatcher.executeDispatch(THIS.loDocument.CurrentController.Frame, ".uno:Copy","" , 0, |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
2Gladik
А ты вручную кнопкой с кистью в Word'е/Excel'е когда-нибудь пользовался для копирования форматов? Если нет - оно и понятно! Я многих знаю, кто этим никогда не пользовался! Сначала научись делать вручную - почитай хэлп, а потом всё станет само-собой и в программировании этого дела понятно... Исправлено 1 раз(а). Последнее : rvc44, 25.01.08 15:48 |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
Никгда вручную в ворде и екселе не копировал ТОЛЬКО форматы.
Всегда тока с данными. (( Какая хоть опция то? |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Стандартная кнопка на тулбаре "Кисть" (копировать формат) - очень в жизни помогает!
Можно еще пару кнопок для удобства из настроек вытащить... |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
нашол!
Копирует только формат, но не данные. то что нада. Я думал я всё в екселе знаю. Ошибался. В принципе код я нашол (спасибо supervk из другого форума), но он в Стар Бейсике. Пытаюсь перевести его что бы из-под Фокса запускался. sub Main dim document as object dim dispatcher as object document = ThisComponent.CurrentController.Frame rem dispatcher = createUnoService("com.sun.star.frame.DispatchHelper") loMgr = CREATEOBJECT("com.sun.star.ServiceManager") Dispatcher = loMgr.createInstance("com.sun.star.frame.DispatchHelper") args(0) as new com.sun.star.beans.PropertyValue args(0).Name = "ToPoint" args(0).Value = "$A$1:$B$1" dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args()) dispatcher.executeDispatch(document, ".uno:Copy", "", 0, Array()) args(0).Value = "$A$2:$B$2" dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args()) args(0).Name = "Flags" args(0).Value = "T" dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, args()) end sub не знаю пока как перевести эти строки: args(0) as new com.sun.star.beans.PropertyValue args(0).Name = "ToPoint" args(0).Value = "$A$1:$B$1" |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Думаю, что как-то так:
Исправлено 1 раз(а). Последнее : rvc44, 28.01.08 11:54 |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Цитата:Я никогда про себя так не думал и даже сейчас не думаю! Чтобы это понять советую почитать: 1. АА Гладкий АА Чиртик Трюки и эффекты в Excel.pdf 46,965,868 bytes 2. OReilly.Excel.Hacks.eBook-DDU.chm 3,504,733 bytes 3. Анализ данных в Excel наглядный курс создания отчетов, диаграмм и сводных таблиц.pdf 115,221,854 bytes а потом, чтобы сбавить пыл и немного пообломать рога - попробывать бесплатно сдать online-экзамен по Excel и/или Word на получение сертификата специалиста на сайте www.specialist.ru при МГТУ им.Баумана! Вещь! |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
args[1] = OOoPropertyValue( "ToPoint", "$A$1:$B$1" )
ай балин! Я тоже использовал функцию OOoPropertyValue из библиотеке LibOOo.prg Только не догадался что нужно КВАДРАТНЫЕ скобки. В массив я загнал. Но чото не выполняюца строка: dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args()) где document = oXls.CurrentController.Frame пишет "ошибочный индекс" получаеца вот так вот из-под фокса: dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, @args ) Это равнозначно? Исправлено 2 раз(а). Последнее : Gladik, 28.01.08 15:56 |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
вроде всё заработало. Спасибо тебе, Роман.
LOCAL Dispatcher , document, loMgr LOCAL args[1],arrays[1] document = oXls.CurrentController.Frame loMgr = CREATEOBJECT("com.sun.star.ServiceManager") Dispatcher = oMgr.createInstance("com.sun.star.frame.DispatchHelper") args[1] = OOoPropertyValue( "ToPoint", "$A$1:$A$1" ) arrays[1] = OOoPropertyValue( ) dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, @args ) dispatcher.executeDispatch(document, ".uno:Copy", "", 0, @arrays ) args[1] = OOoPropertyValue( "ToPoint", "$E$1:$E$1" ) dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, @args ) args[1] = OOoPropertyValue( "Flags", "$T" ) dispatcher.executeDispatch(document, ".uno:InsertContents", "", 0, @args ) Только нужно заменить адрес типа "$A$1:$B$1" в данной программе на адрес вида (0,0, 10,10) относительно какой то ячейки. Потмоу что с названиями ячеек работать очень неудобно. Нужно переводить из символов в цифры(кода) и наоборот. Намекни, пожалуста, на какое нибудь решение. А уж мы переймём, переймём... |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
rvc44 Автор Сообщений: 2211 Откуда: Тамбов Дата регистрации: 06.12.2005 |
Посмотри внимательно приведенный тобой последний текст! "Это" работать явно не может!
Там так много досадных "опечаток"! Такие посты только засоряют форум, особенно если кто-то через пол-годика решит "этим" воспользоваться! А насчет намека, пожалуйста: Помучай кого-нибудь на форумах по OpenOffice как этот же код переписать с использованием API и отказаться от устаревших обращений к диспетчеру, если не сможешь написАть сам! Через API все функции адресации ячеек как раз взаимозаменимы (хочешь адрес типа "$A$1:$B$1", а хочешь адрес вида (0,0, 10,10)). Чтобы переписать через API надо просто немного поэкспериментировать! Для этого залезь по приводившейся ранее ссылке на документацию по API и посмотри там Copy и InsertContents. Думаю, сделать - несложно! |
Re: Как через фокс взять в ОО Калк форматы ячеек в выделенной области? | |
---|---|
Gladik Сообщений: 41 Дата регистрации: 25.09.2007 |
"Посмотри внимательно приведенный тобой последний текст! "Это" работать явно не может!"
РАБОТАЕТ!!! Атчиваю! Прям делат то что нада. Правда ячейки определяюца не цифрами , буквами. Я ещё не до конца понял чем отличается "обращений к диспетчеру" и API. Буду изучать. Спасиб. |
© 2000-2024 Fox Club  |