Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C++ Builder и Openoffice Calc, Экспорт данных в файл Openoffice Calc 
V
    Опции темы
Spancer
Дата 28.9.2009, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 14.5.2007

Репутация: нет
Всего: нет



Как экспортировать данные из приложения в файл OpenOffice.org Calc, перерыл кучу инфы, в SDK не нашел примеры, те которые нашел, половина кода отсутствует. 

Код

Variant ServiceManager;
Variant Desktop;
Variant Document;
Variant Sheets;
Variant Sheet;
Variant Cell;
Variant VariantArray;
VariantArray[0] =
try
    {
        ServiceManager = CreateOleObject("com.sun.star.ServiceManager");
    }
    catch (...)
    {
        return;
    }
    if (VarType(ServiceManager) == varDispatch)
    {
  ServiceManager = CreateOleObject("com.sun.star.ServiceManager");
  Desktop = ServiceManager.OleFunction("createInstance",
    "com.sun.star.frame.Desktop");
  Document = Desktop.OleFunction("LoadComponentFromURL",
        "private:factory/scalc", "_blank", 0, VariantArray );
  /*Sheets = Document.OleFunction("getSheets");
  Sheet = Sheets.OleFunction("getByName", "test");
  Cell = Sheet.OleFunction("getCellByPosition", 0, 0);

  int Bounds[2];
  Bounds[0] = 0;
  Bounds[1] = 0;
  Variant MyStruct = ServiceManager.OleFunction("Bridge_GetStruct",
    "com.sun.star.beans.PropertyValue");
  MyStruct.OlePropertySet("name","FilterName");
  MyStruct.OlePropertySet("value","MS Excel 97");
  VariantArray = VarArrayCreate(Bounds, 1, varVariant);
  VariantArray.PutElement(MyStruct, 0);
   Document.OleFunction ("storeToURL","private:factory/scalc"+ path, VariantArray);

    Document.OleFunction("close", true);
    Document = Unassigned();

    Desktop.OleFunction("terminate");
    Desktop = Unassigned();

}


код примерно такой, в строке до комментария вылетает ошибка
PM MAIL   Вверх
Alca
Дата 28.9.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: 25
Всего: 50



Цитата

вылетает ошибка

Какая?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Anikmar
Дата 28.9.2009, 18:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2513
Регистрация: 26.11.2006
Где: Санкт-Петербург

Репутация: 34
Всего: 59



Цитата(Alca @  28.9.2009,  16:22 Найти цитируемый пост)
Какая? 

А еще можно спросить "откуда?"  smile 
PM MAIL ICQ   Вверх
Spancer
Дата 28.9.2009, 21:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 14.5.2007

Репутация: нет
Всего: нет



Немного разобрался, с заполнением вариант массива параметрами, теперь не хочет принимать url файла, он должен как то кодироваться, в unicode и в определенном стандарте, простой перевод в уникод заканичается эксепшеном "EOLEsyseггoг "Ошибка, неверный параметр"".

Это сообщение отредактировал(а) Spancer - 28.9.2009, 21:47
PM MAIL   Вверх
Spancer
Дата 29.9.2009, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 14.5.2007

Репутация: нет
Всего: нет



Код


AnsiString convertToURL(char* FileName)
{
   AnsiString s = "file://localhost/";
   int l = strlen(FileName);
   for (int i=0; i <= l; i++)
   {
       char ch = (char)FileName[i];
       switch (ch)
       {
           case ' ' :
                s = s + "%20";
               break;
           case '\\' :
                s = s + "/";
               break;
           default :
                   s = s + ch;
       }
   }
   return s ;
}

......
AnsiString bpath, AnsiString rpath;
Variant ServiceManager,Desktop,Document,Sheets,Sheet,Cell,VariantArray,View;
try
    {
        ServiceManager = CreateOleObject("com.sun.star.ServiceManager");
    }
    catch (...)
    {
        return;
    }
    if (VarType(ServiceManager) == varDispatch)
    {
  ServiceManager = CreateOleObject("com.sun.star.ServiceManager");
  Desktop = ServiceManager.OleFunction("createInstance","com.sun.star.frame.Desktop");
   int Bounds[2];
  Bounds[0] = 0;
  Bounds[1] = 0;
  Variant MyStruct = ServiceManager.OleFunction("Bridge_GetStruct","com.sun.star.beans.PropertyValue");
  MyStruct.OlePropertySet("name","FilterName");
  MyStruct.OlePropertySet("value","MS Excel 97");
  MyStruct.OlePropertySet("name","Hidden");
  MyStruct.OlePropertySet("value",true);
  VariantArray = VarArrayCreate(Bounds, 1, varVariant);
  VariantArray.PutElement(MyStruct, 0);
  Document = Desktop.OleFunction("LoadComponentFromURL",WideString(convertToURL(bpath.c_str())).c_bstr(), "_blank", 0, VariantArray );
  Document.OleFunction("lockControllers");
  Document.OleFunction("addActionLock");
  Sheets = Document.OleFunction("getSheets");
  Sheets = Document.OleFunction("getSheets");
  Sheet = Sheets.OleFunction("getByName", "Ëèñò1");
  View = Document.OleFunction("getCurrentController");
  View.OleFunction("setActiveSheet", Sheet);
  Cell = Sheet.OleFunction("getCellByPosition", 0, 0);
  Cell.OleFunction("setString", "333");
  Document.OleFunction ("storeToURL",WideString(convertToURL(bpath.c_str())).c_bstr(), VariantArray);
  Document.OleFunction("close", true);
  Document = Unassigned();
  Desktop.OleFunction("terminate");
  Desktop = Unassigned();


Разобрался, тема закрыта, кусок программы записывающий ячейку строку "333" в позицию 0.0.

Это сообщение отредактировал(а) Spancer - 29.9.2009, 22:53
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0480 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.