Страницы: 1
Есть желание вызывать MS Excel из FireFox для представленея неких данных в таблицах екселя.
Написал простенькое расширение, которое пытается вызвать такой код:
if (window.GeckoActiveXObject){
var oXL=new GeckoActiveXObject("Excel.Application");
}
или так:
var oXL=new GeckoActiveXObject("{00024500-0000-0000-C000-000000000046}");
появляется такая ошибка:
Ошибка: uncaught exception: [Exception... "Unable to create an instance of the desired COM classCOM Error Result = 80004002" nsresult: "0x80570039 (NS_ERROR_XPC_COM_CREATE_FAILED)" location: "JS frame :: chrome://quasy/content/quasyOverlay.js :: go2Excel :: line 21" data: no]
Line 21 - это как раз var oXL=new ...
Как можно побороть? Заранее спасибо.
Отсутствует
Поскольку никто не отвечает, расскажу куда мне удалось продвинутся. Может после этого дадут навигацию... )
Во-первых, изменил CLSID на 00020812-0000-0000-C000-000000000046 - соответствующий Excel2003 (он у меня и установлен).
Во-вторых, установил http://www.iol.ie/~locka/mozilla/plugin.htm#download. Но это как я понял можно было и не делать.
Код теперь выглядит так:
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
if (window.GeckoActiveXObject){
var oXL=new GeckoActiveXObject("{00020812-0000-0000-C000-000000000046}");
alert (oXL);
}
if(oXL){
oXL.Visible = true;
var oWB = oXL.Workbooks.Add();
var oS = oWB.ActiveSheet;
}
Alert возвращает "xpconnect wrapped IDispatch".
В памяти повисает Excel. Но его не видно. Ошибка происходит в строке oXL.Visible = true :
Ошибка: uncaught exception: [Exception... "Cannot modify properties of a WrappedNative" nsresult: "0x80570034 (NS_ERROR_XPC_CANT_MODIFY_PROP_ON_WN)" location: "JS frame :: ..........
То есть как я понимаю, я не могу изменять никаких свойств объекта. Это как-то обойти можно?
....или приговор?
PS. Под мазиллу пишу впервые. Так что принимаются все советы.
Отсутствует
Я не знакома GeckoActiveXObject, так что как разобраться с ошибкой не подскажу. Но могу предложить просто пойти другим путем. http://www.iosart.com/firefox/xpcom/ - сделайте свою компоненту... тут очень хороший пример. Если Вы просто при нажатии на кнопку тулбара(или каком-то другом событии) создадите элемент своей компоненты и передатите в нее все необходимые данные, то там с помощью COM спокойно запустите Excel.
Отсутствует
Я не знакома GeckoActiveXObject, так что как разобраться с ошибкой не подскажу. Но могу предложить просто пойти другим путем. http://www.iosart.com/firefox/xpcom/ - сделайте свою компоненту... тут очень хороший пример. Если Вы просто при нажатии на кнопку тулбара(или каком-то другом событии) создадите элемент своей компоненты и передатите в нее все необходимые данные, то там с помощью COM спокойно запустите Excel.
Большое человеческое спасибо!
Отсутствует
Можно тогда ещё один вопросик?
Как в метод интерфейса передать массив? А точнее двумерный массив. Например строк.
interface IUSUExcel : nsISupports
{
long PutTable(in string titleTable, in "НУЖЕН 2-мерный массив строк" bodyTable );
};
Ожидаются ли тут проблемы на этапе передачи данных от JS к xpcom?
Нигде не могу найти примера....
Отсутствует
Можно тогда ещё один вопросик?
Как в метод интерфейса передать массив? А точнее двумерный массив. Например строк.interface IUSUExcel : nsISupports
{
long PutTable(in string titleTable, in "НУЖЕН 2-мерный массив строк" bodyTable );
};Ожидаются ли тут проблемы на этапе передачи данных от JS к xpcom?
Нигде не могу найти примера....
Ну, тяжело сказать... вообще-то JS - подозрительно относится к массивам... Надо искать примеры на JS - а я мало работала с этим языком. Я передавала только строчку, это получалось и возвращала строку.
Что за информацию Вам надо передать? если что-то о страничке - то не легче передать все содержимое странички... а там в компоненте его на части разложить?...
Отсутствует
В принципе можно передавать длинную строку, в которую включать разделители. А С++ уже формировать массив. Но это как-то не по-человечески ). Да и опасно.
С передачей всего содержимого страницы видится ещё больше сложностей.
Сформировать 2-х мерный массив на JS легко. Вот как описать массив в интерфейсе не понятно.
Отсутствует
Ещё одна глупая просьба.
Не могу воспользоваться утилитой xpidl.exe для создания xpt-файла. Похоже, что проблема в том, что у меня нет файлов libIDL-0.6.dll и glib-1.2.dll и неоткуда их взять.
Может кто кинет ссылку. Или почтой... на sutni@mail.ru
Отсутствует
http://www.mozilla.org/projects/plugins/ - посмотрите здесь (Plugin samples in the tree) - в этом разделе одна из первых ссылок - там порыться в примерах - есть длл. Я их брала от туда
Отсутствует
http://www.mozilla.org/projects/plugins … sWin32.zip
Второй раз выручаешь. : ... и это только за сегодня....
Отсутствует
Выгрузку в Excel сделал. Из локального файла всё работает замечательно. Если кому нужно поделюсь.
В виде компоненты ещё не оформлял. Хочу потестировать код и осмыслить будущую структуру компоненты.
Поэтому сейчас использую комманду
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
Столкнулся с такой проблемой: при попытке выполнить код с сервера такое сообщение:
Сценарию с http://localhost было отказано в правах: UniversalXPConnect.
Наверное в мозилле нужно какие-то настройки сделать....
Использую FireFox 1.5.0.1 из под WinXP.
Помогите.
Добавлено:
С вызовом из crome та-же история. Написал специально xul-файлик (типа посредник), в котором при открытии пытаюсь выполнить код:
function ToExcel()
{
try {
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
const cid = "@mydomain.com/XPCOMExcel/USUExcel;1";
obj = Components.classes[cid].createInstance();
obj = obj.QueryInterface(Components.interfaces.IUSUExcel);
obj.OpenExcel();
}
window.close();
}
Cообщает то-же что и из обычного html.
Отредактировано sutni (16-02-2006 12:58:15)
Отсутствует
Страницы: 1