|
Ошибка при работе с OpenOffice Calc | ☑ | ||
---|---|---|---|---|
0
lynxyur
08.10.11
✎
11:37
|
при запуске кода возникает ошибка:
"Ошибка при вызове метода контекста (ParseStrict): Произошла исключительная ситуация ([automation bridge] ): [automation bridge] unexpected exception in UnoConversionUtilities<T>::variantToAny ! transf.ParseStrict(URL);" кто сталкивался с такой проблемой, напишите в чем причина плиз "// --------------------------------------------------------- Procedure dispatchURL(Docum, aUrl, scr) scr.eval("URL=new Array()"); scr.eval("URL[0]=OpenOffice.Bridge_GetStruct('com.sun.star.util.URL')"); scr.eval("URL[0].Complete='" + aURL + "'"); scr.eval("noProps=new Array()"); scr.eval("noProps[0]=OpenOffice.Bridge_GetStruct('com.sun.star.beans.PropertyValue')"); noProps=scr.eval("noProps"); URL = scr.eval("URL"); transf = OpenOffice.CreateInstance("com.sun.star.util.URLTransformer"); transf.ParseStrict(URL); URL1 = scr.eval("URL[0]"); frame = Docum.getCurrentController().getFrame(); disp = Frame.queryDispatch(URL1,"",0); disp.dispatch(URL1,noProps); EndProcedure // --------------------------------------------------------- Процедура перебросить() ВременныйПуть = "D:\"; Попытка OpenOffice = Новый ComObject("com.sun.star.ServiceManager"); Исключение Сообщить(ОписаниеОшибки() + "; OpenOffice не установлен на данном компьютере!"); Возврат; КонецПопытки; scr= Новый ComObject("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"); DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); Excel1 = DeskTop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Массив); Excel1.lockControllers(); Excel1.addActionLock(); БазКнига = Excel1.getSheets(); Временныйпуть1 = СтрЗаменить(ВременныйПуть, "\", "/"); Временныйпуть1 = СтрЗаменить(ВременныйПуть1, " ", "%20"); Для Сч = 2 по 5 Цикл Попытка Excel2= DeskTop.LoadComponentFromURL("file:///" + ВременныйПуть1 + Строка(Сч) + ".xls", "_blank", 0, Массив); Книга = Excel2.getSheets(); Исключение Продолжить; КонецПопытки; Лист = Книга.getByIndex(0);//getByName("Sheet1"); БазКнига.InsertNewByName(Строка(Сч), 0); БазЛист = БазКнига.getByName(Строка(Сч)); Excel2.getCurrentController().Select(Лист); dispatchURL(Excel2, ".uno:SelectAll", scr); dispatchURL(Excel2, ".uno:Copy", scr); Excel1.getCurrentController().Select(БазЛист); dispatchURL(Excel1, ".uno:Paste", scr); Excel2.Close(-1); КонецЦикла; SaveParam=Excel1.setPropertyValue("FilterName","MS Excel 97"); scr.eval("Массив[0].Name='FilterName'"); scr.eval("Массив[0].Value='MS Excel 97'"); Excel1.storeToURL("file:///" + ВременныйПуть1+"Отчет.xls",Массив); Excel1.unLockControllers(); Excel1.removeActionLock(); Excel1.close(-1); Вложения = ВременныйПуть+"Отчет.xls"; Сообщить("Отчет сохранен - " + Вложения); Excel1 = ""; Excel2 = ""; КонецПроцедуры" |
|||
1
lynxyur
09.10.11
✎
17:28
|
ошибка исправлена, тема закрыта
P.S. судя по всему ошибка возникала, потому что в процедуре dispatchURL использовались устаревшие методы, работающий код: // --------------------------------------------------------- Procedure dispatchURL(Docum, aUrl, scr) scr.eval("noProps=new Array()"); noProps=scr.eval("noProps"); frame = Docum.getCurrentController().getFrame(); oDisp = OpenOffice.CreateInstance("com.sun.star.frame.DispatchHelper"); oDisp.executeDispatch(frame,aUrl, "", 0, noProps); EndProcedure // --------------------------------------------------------- Процедура перебросить() ВременныйПуть = "D:\"; Попытка OpenOffice = Новый ComObject("com.sun.star.ServiceManager"); Исключение Сообщить(ОписаниеОшибки() + "; OpenOffice не установлен на данном компьютере!"); Возврат; КонецПопытки; scr= Новый ComObject("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"); DeskTop = OpenOffice.CreateInstance("com.sun.star.frame.Desktop"); Excel1 = DeskTop.LoadComponentFromURL("private:factory/scalc", "_blank", 0, Массив); Excel1.lockControllers(); Excel1.addActionLock(); БазКнига = Excel1.getSheets(); Временныйпуть1 = СтрЗаменить(ВременныйПуть, "\", "/"); Временныйпуть1 = СтрЗаменить(ВременныйПуть1, " ", "%20"); Для Сч = 2 по 5 Цикл Попытка Excel2= DeskTop.LoadComponentFromURL("file:///" + ВременныйПуть1 + Строка(Сч) + ".xls", "_blank", 0, Массив); Книга = Excel2.getSheets(); Исключение Продолжить; КонецПопытки; Лист = Книга.getByIndex(0);//getByName("Sheet1"); БазКнига.InsertNewByName(Строка(Сч), 0); БазЛист = БазКнига.getByName(Строка(Сч)); Excel2.getCurrentController().Select(Лист); dispatchURL(Excel2, ".uno:SelectAll", scr); dispatchURL(Excel2, ".uno:Copy", scr); Excel1.getCurrentController().Select(БазЛист); dispatchURL(Excel1, ".uno:Paste", scr); Excel2.Close(-1); КонецЦикла; SaveParam=Excel1.setPropertyValue("FilterName","MS Excel 97"); scr.eval("Массив[0].Name='FilterName'"); scr.eval("Массив[0].Value='MS Excel 97'"); Excel1.storeToURL("file:///" + ВременныйПуть1+"Отчет.xls",Массив); Excel1.unLockControllers(); Excel1.removeActionLock(); Excel1.close(-1); Вложения = ВременныйПуть+"Отчет.xls"; Сообщить("Отчет сохранен - " + Вложения); Excel1 = ""; Excel2 = ""; КонецПроцедуры |
|||
2
lynxyur
11.10.11
✎
07:26
|
код который копирует не только данные и формат но и структуру
Процедура ОбъединитьФайлыXLS() ПутьКФайлу = "D:\"; ТабДок = Новый ТабличныйДокумент; ТабДок.Записать(ПутьКФайлу + "Отчет.xls", ТипФайлаТабличногоДокумента.XLS); КоличествоЛистов = 4; Попытка ServiceManager = Новый COMОбъект("com.sun.star.ServiceManager"); Исключение Предупреждение(ОписаниеОшибки() + Символы.ПС + "программа OpenOffice не установлена на данном компьютере!"); Возврат; КонецПопытки; Desktop = ServiceManager.createInstance("com.sun.star.frame.Desktop"); Свойства = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); //Свойства.Name = "IsTemplate"; //Свойства.Value = Истина; //Свойства1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); //Свойства1.Name = "Нidden"; //Свойства1.Value = Истина; Массив = Новый COMSafeArray("VT_VARIANT", 1); //Массив.SetValue(0, Свойства); //Массив.SetValue(1, Свойства1); ПутьКФайлу = ПривестиФайлКУРЛ(ПутьКФайлу); Документ = DeskTop.LoadComponentFromURL(ПутьКФайлу + "Отчет.xls", "_blank", 0, Массив); Для Сч = 1 по КоличествоЛистов Цикл Попытка ДокументКопия = DeskTop.LoadComponentFromURL(ПутьКФайлу + Строка(Сч) + ".xls", "_blank", 0, Массив); Исключение Продолжить; КонецПопытки; currentFrame = ДокументКопия.getCurrentController().getFrame(); Переместить("Отчет", currentFrame, ServiceManager); ДокументКопия.Close(-1); КонецЦикла; Книга = Документ.getSheets(); Книга.removeByName(Книга.getByIndex(0).getName()); Документ.store(); Документ.close(-1); Сообщить("Отчет сохранен - " + ПутьКФайлу + "Отчет.xls"); Документ = ""; ДокументКопия = ""; КонецПроцедуры Процедура Переместить(ИмяФайла, currentFrame, ServiceManager) МассивToJump = Новый COMSafeArray("VT_VARIANT", 1); СвойстваToJump = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); СвойстваToJump.Name = "Nr"; СвойстваToJump.Value = 1; МассивToJump.SetValue(0, СвойстваToJump); МассивToCopy = Новый COMSafeArray("VT_VARIANT", 3); СвойстваToCopy1 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); СвойстваToCopy1.Name = "DocName"; СвойстваToCopy1.Value = ИмяФайла; СвойстваToCopy2 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); СвойстваToCopy2.Name = "Index"; СвойстваToCopy2.Value = 32767; СвойстваToCopy3 = ServiceManager.Bridge_GetStruct("com.sun.star.beans.PropertyValue"); СвойстваToCopy3.Name = "Copy"; СвойстваToCopy3.Value = true; МассивToCopy.SetValue(0, СвойстваToCopy1); МассивToCopy.SetValue(1, СвойстваToCopy2); МассивToCopy.SetValue(2, СвойстваToCopy3); dispatcher = ServiceManager.CreateInstance("com.sun.star.frame.DispatchHelper"); dispatcher.executeDispatch(currentFrame, ".uno:JumpToTable", "", 0, МассивToJump); dispatcher.executeDispatch(currentFrame, ".uno:Move", "", 0, МассивToCopy); КонецПроцедуры функция ПривестиФайлКУРЛ(ПутьКФайлу) ПутьКФайлу = СтрЗаменить(ПутьКФайлу," ","%20"); ПутьКФайлу = СтрЗаменить(ПутьКФайлу,"\","/"); Возврат "file:///" + ПутьКФайлу; Конецфункции |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |