Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 [13] 14 15 16 17 .. 38   вперед  Ctrl
 Re: Delphi & OpenOffice - Заполним пробел  [new]
gofrom
Member

Откуда: Ростов-на-Дону
Сообщений: 9
segor
А как перейти по закладке, которая находится в ячейке таблицы, и вставить туда текст?

делаю:
OW.Bookmarks.ItemsByName[name].SetCursorPosition(fmain.OW.ViewCursor);
OW.ViewCursor.Text := Value;
на закладку переходит, но текст не вставляет.

через
OW.Tables.ItemsByName['Таблица1'].Cell[0,0].AsText
не устраивает, нужно именно по закладке.

Спасибо.


Спасибо автору, избавил от потери времени
Чтобы перейти на использование этого модуля пришлось добавить метод в класс TOOBookmark

procedure TOOBookmark.SetText(const Text: String);
begin
FBookmarkObj.getAnchor.setString(Text);
end;

в программе используется так:
OW.Bookmarks.ItemsByName['Закладка'].SetText('вставили текст на место закладки');
Заодно это ответ на вопрос segor-а
2 янв 09, 01:36    [6642506]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
Альт
Member

Откуда: Сибирь
Сообщений: 4581
AmenRa, что за тоскливый тон в новогодние праздники... фришная библиотека... в исходниках... регулярно обновляется... есть документация... ну почешите голову и добавьте необходимый Вам функционал и предложите свое решение форуму... в чем проблема?
2 янв 09, 07:54    [6642534]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
AmenRa
Member

Откуда:
Сообщений: 10
Альт, то что нужно было мне я нашел, а если этого не было, то я нашел обходное решение (благо это было позволительно).
Грустно, что библа вот так "умирает".
5 янв 09, 15:48    [6648485]     Ответить | Цитировать Сообщить модератору
 Re: Delph & OpenOffice Заполним пробел  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1394
Не Я!
Вы не забывайте, что ods - это упакованный zip-ом набор xml-файлов, может оказаться проще и быстрее напрямую с xml работать, особенно если надо заполнить готовые поля данными, а не создавать новую таблицу.


В случае с новой таблицей фиксированного формата - тоже можно.
Делаем рыбу отчета, сохраняем в файл. Разворачиваем его зипом, и смотрим какой файл сделал OO. И по аналогии, только со своими данными.
Причем можно даже не использовать XML-компоненты, а заполнять файл прям в виде plain-text. Для записи в файл это самый оптимальный по ресурсам вариант.

Однако у меня не получилось это реализовать - zip это только алгоритм сжатия, а вот формат архива OO понимает не любой. Причем некоторые файлы в этом архиве сжаты а некоторые - нет.
OO не открывает даже файл полученный путем разархивацией файла ods и архиварования его обратно WinZip или 7Zip. Единственный вариант - если архивировать без сжатия - тогда открывает.

Собственно вопрос - не писал ли кто процедуру на Delphi по запихиванию XML-файлов в zip-архив который потом нормально открывается OO?
16 янв 09, 08:50    [6694345]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
Андрей Ходотов
Member

Откуда: г.Гомель, Беларусь
Сообщений: 11
2fraks: Я нормально работаю с .odt как архивом в Far'е с плагином 7-zip. И программно - используя TKAZip (freeware, с сырцами, есть на Torry). (Правда, программно я работаю не с xml, а с рисунками внутри файла, но imho разница невелика).
16 янв 09, 16:30    [6697904]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
fraks
Member

Откуда: Новосибирск
Сообщений: 1394
2Андрей Ходотов

Спасибо за компонент KAZip - похоже это то что мне надо.

Андрей Ходотов

Я нормально работаю с .odt как архивом в Far'е с плагином 7-zip

Это имеется ввиду
- чтение файлов из архива
- запись файлов в уже существующий odt
- формирование odt из файлов (создание odt заново)
?

Работать с XML или с файлами внутри архива - разница в том что некоторые XML внутри архива обязаны быть несжатыми, остальные можно сжимать. Картинок я думаю это не касается.
19 янв 09, 06:50    [6702884]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
Андрей Ходотов
Member

Откуда: г.Гомель, Беларусь
Сообщений: 11
2fraks: Про Far. Имеется в виду чтение(естественно) и запись (с оговорками). Несжатые (и, кстати, имеющие фиксированное место в архиве) файлы я не пробовал, записывал только картинки, content.xml и styles.xml. Новый "архив" не создавал - удалял файлы из старого и копировал правленные версии файлов в него же. Расширение (aka extension aka add-on, файл .oxt) перепаковывал и целиком - но, опять же, не создавая новый архив, а удаляя всё из старого и копируя в него же. Насчёт 7-zip плагина к Far'у я слегка насвистел: он установлен, но при операциях всё равно испльзуется вызов внешного архиватора.

Про TKAZip. Я с его помощью заменял рисунки в .odt. А теперь понадобилось извлекать - обнаружил жуткие баги, пришлось исправлять. Первый - в процедуре TKAZipEntries.ExtractToFile (ведёт себя так, как будто файл в любом случае уже существует - т.е. если выбрана опция oaSkip/oaSkipAll, ничего и не распакует) и большой и жирный баг в ключевой функции TKAZipEntries.GetLocalEntry - сжатые (по крайней мере, deflate) файлы вообще неправильно обрабатывал и потому считал битыми :-) Дикий "индийский код", может, на досуге попытаюсь списАться с разработчиком и предложить свои фиксы. Вот они:
1) Вместо
  if ((OA<>oaOverwriteAll) And (OA<>oaSkipAll)) And (Assigned(FParent.FOnOverwriteFile)) Then
...
     oaOverwriteAll  : Can := True;
   End;
такой:
  if FileExists(destinationFileName) //&
    then begin
           if(oa<>oaOverwriteAll)and(oa<>oaSkipAll)and Assigned(FParent.FOnOverwriteFile)
             then FParent.FOnOverwriteFile(FParent,destinationFileName,oa);
           can:=oa>=oaOverwrite
         end;
2) Вместо:
      if (Result.GeneralPurposeBitFlag And (1 SHL 3)) > 0 Then
...
                MS.Read(Result.CompressedData[1],Result.CompressedSize);
              End;
         End;
это:
      with result,MS //&
        do begin
             if wordBool(generalPurposeBitFlag and 8)
               then begin
                      Seek(Items[IndexOf(filename)].fCentralDirectoryFile.compressedSize,soFromCurrent);
                      Read(dataDescriptor,SizeOf(tDataDescriptor));
                      crc32:=dataDescriptor.crc32;
                      compressedSize:=dataDescriptor.compressedSize;
                      uncompressedSize:=dataDescriptor.uncompressedSize;
                      Seek(-compressedSize-SizeOf(tDataDescriptor),soFromCurrent);
                    end;
             if not headerOnly and longBool(result.compressedSize)
               then begin
                      SetLength(result.compressedData,result.compressedSize);
                      Read(result.compressedData[1],result.compressedSize)
                    end
           end
23 янв 09, 18:16    [6729090]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
KoDnet
Member

Откуда:
Сообщений: 1
подскажите как содержимое stringgrida перенести в OpenOffice Calc
18 фев 09, 20:07    [6836505]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
AndrG
Member

Откуда:
Сообщений: 11
А знает кто-нибудь как можно программно создать/удалить макрос?
Все что удалось найти касается только выполнения уже созданных макросов.
3 мар 09, 09:21    [6879701]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
PWS
Member

Откуда: г.Волжский Волгоградской обл.
Сообщений: 49
Хороший модуль сделал Yuric74. Для своей задачки решил доработать.
Хотел сделать дополнительную процедуру для копирования листа, но
procedure TOOCalcSheets.Copy;
var
  OODispatcher:variant;
  Ar:variant;
  SM:variant;
begin

  SM:=CreateOleObject('com.sun.star.ServiceManager');
  OODispatcher:=SM.CreateInstance('com.sun.star.frame.DispatchHelper');

  Ar:=VarArrayCreate([0,2],varVariant);
  Ar[0]:=SM.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  Ar[0].Name:='DocName';
  Ar[0].Value:='';

  Ar[1]:=SM.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  Ar[1].Name:='Index';
  Ar[1].Value:=0;

  Ar[2]:=SM.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  Ar[2].Name:='Copy';
  Ar[2].Value:=True;

  OODispatcher.ExecuteDispatch(FDocument.GetCurrentController.GetFrame,'.uno:Move','',0,Ar);

  OODispatcher:=Unassigned;
  Ar:=Unassigned;
end;
Вот в этот кусок никак не могу как вставить что то вроде Ar[0].Value:=ActiveWorkBook.Name;
а то в текущем варианте копирует лист в новую книгу.
  Ar[0].Name:='DocName';
  Ar[0].Value:='';
3 мар 09, 16:32    [6882564]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
ndstar18
Member

Откуда:
Сообщений: 2
Помогите плиз. Делаю все как написано:

va:= VarArrayCreate([0, 0], varVariant);
va:=dt.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
va.Name := 'FilterName';
va.Value := 'MS Word 97';

doco:=dt.LoadComponentFromURL(ovfv, '_blank',0,va);


Тем не менее вылетает ошибка:

"Несовпадение типов"

На машине стоит MS 2003

Как бороться?
6 мар 09, 18:03    [6898645]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
xCod
Member

Откуда:
Сообщений: 11
ndstar18,

var
  OOff, DT, VA, Struc: Variant
begin
  OOff:=CreateOleObject('com.sun.star.ServiceManager');
  DT:=OOff.CreateInstance('com.sun.star.frame.Desktop');
  VA:=VarArrayCreate([0, 0], varVariant);
  Struc:=OOff.Bridge_GetStruct('com.sun.star.beans.PropertyValue');
  Struc.Name:='FilterName';
  Struc.Value:='MS Word 97';
  VArray[0]:=Struc;
  Doco:=DT.LoadComponentFromURL(ovfv, '_blank', 0, VA);
end;

может быть вот так должно быть?
10 мар 09, 06:08    [6903343]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
xCod
Member

Откуда:
Сообщений: 11
ndstar18,

VArray[0]:=Struc;

а должно быть вот так

VA[0]:=Struc;
10 мар 09, 08:21    [6903405]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
ndstar18
Member

Откуда:
Сообщений: 2
Спасибо !!!
Все заработало.

С уважением, Надежда.
10 мар 09, 14:15    [6905415]     Ответить | Цитировать Сообщить модератору
 Колличество заполненых ячеек  [new]
yaJohn
Member

Откуда:
Сообщений: 1
Цель - пробежать в цикле все не пустые ячейки таблицы Calc.
Но обрабатывать ВСЕ, то бишь 1024 столбцов и 32000 строк - несколько накладно.
Существует ли способ быстро определить диапазон ячеек содержащих данные? В таблицах Writer_a есть Rows.getCount(), но что делать в Calc_e? Уже второй день ищу :(
12 мар 09, 12:44    [6916026]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
PWS
Member

Откуда: г.Волжский Волгоградской обл.
Сообщений: 49
PWS
Хотел сделать дополнительную процедуру для копирования листа


В конечном варианте, процедура копирования листа в конец активного документа стала выглядеть так:

procedure TOOCalcSheets.Copy(NewSheetName:string);
var
  oSheet:variant;
  sOLD:String;
  iNum:Integer;
begin
  oSheet := FDocument.CurrentController.ActiveSheet;
  sOld := oSheet.Name;
  iNum := FDocument.getSheets.count;
  FDocument.GetSheets.CopyByName(sOld, NewSheetName, iNum );
end;
13 мар 09, 11:28    [6921699]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
AndreiCC
Member

Откуда:
Сообщений: 15
If MDATA.quRepTotalControl.RecordCount > 0
 then
  begin
     V:=VarArrayCreate([1,15,1,MDATA.quRepTotalControl.RecordCount-1],VarVariant);

     MDATA.quRepTotalControl.First;
     For y:=1 To MDATA.quRepTotalControl.RecordCount-1 do
      begin

        For x:=1 to 15 do
         begin
          IF x in [4..14]
           then V[x,y]:= MDATA.quRepTotalControl.Fields[x].AsFloat
           else V[x,y]:= MDATA.quRepTotalControl.Fields[x].AsString;

         end;
        MDATA.quRepTotalControl.Next;
      end;
  end;

 OO.SetCellByArray(0,7,V);


ругается на OO.SetCellByArray(0,7,V);. Invalid Argument

кто знает, чего не нравиться? делал как в примере
18 мар 09, 15:56    [6944281]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
MotoCV
Member

Откуда: Уфа
Сообщений: 289
ВЕРИ БИГ СЕНКС ТУ Yuric74. Реально спасибо, класс, жаль что в перестал тему поддерживать :(

Пипл, подскажите мне пожалуйста каким образом можно построить диаграмму? Я из дельфей, открываю калковский шаблон, набиваю данными, а как посторить диаграмму не могу понять и все???
Хелп ми плиз?

Вариант сразу в шаблоне диапазон определить - не подходит, т.к. я заранее не знаю сколко строк будет выгружено. Может как то можно если в шаблон вставить диаграмму, а из дельфей диапазон это диаграмме подменить???
Народ советуйте плиз... неужели никому не надо было до сих пор?
20 мар 09, 13:32    [6954335]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
MotoCV
Member

Откуда: Уфа
Сообщений: 289
Соколинский Борис
Я т В итоге стал просто вставлять текстовый файл с макросами в активный документ. В отличие от Excel-я это допускается.
А можно поподробнее написать как это текстовый файл с майро вставить?
23 мар 09, 07:41    [6960990]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
Марфуша
Member

Откуда:
Сообщений: 5
Здравствуйте.
Помогите разобраться.
Делаю экспорт в ОО из Дельфи.
ActiveSheet.getCellByPosition(k+2, i*5+1).setValue(Value);
где Value - элемент массива.
При этом ничего не выводится.
Если написать ActiveSheet.getCellByPosition(k+2, i*5+1).setFormula(Value);
то экспортируется все нормально
НО
Тогда уже в Calс все значения с одинарной кавычкой вначале.
23 мар 09, 10:19    [6961432]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
Yuric74
Member

Откуда: Пенза
Сообщений: 237
Я вернулся :)
Все-таки я победил сортировку и Transformation :)

Новые добавления
23.03.2009
1. Добавлен новый класс TOOShapeCursor.
2. В классе TOOShText убрано свойство Caption и добавлено свойство Cursor типа TOOShapeCursor.
3. Добавлены новые типы TOpenSMK, TOpenSMH, TOpenSMV.
4. Добавлены новые классы TOOMeasureShape, TOOMeasureShapes.
5. В класс TOOCalcSheet добавлено новое свойство MeasureShapes.
6. Добавлены новые типы TOpenLine, TOpenMatrix и соответствующая функция TMatrix.
7. В класс TOOBaseShape добавлено новое свойство Transformation, позволяющее масштабировать, сдвигать, наклонять и вращать фигуру.
8. Добавлен новый тип TOpenSR.
9. В класс TOOCalcCellRange добавлено новое свойство MaxSortFieldsCount.
10. Добавлены новые типы TOpenSortField, TOpenSortFields и соответствующая функция ASortField.
11. В класс TOOCalcCellRange добавлены новые процедуры Sort, SortTo. Сортировка доступна по количеству полей, определенных свойством MaxSortFieldsCount.
12. В классе TOOGraphicShape изменено название свойства AdjustTransparence на Transparence.

Выложить смогу только завтра с работы.
Сегодня еще почитаю последние страницы темы, посмотрю, какие еще есть проблемы и просьбы.
23 мар 09, 15:14    [6963889]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
MotoCV
Member

Откуда: Уфа
Сообщений: 289
Yuric74
Я вернулся :)

Сегодня еще почитаю последние страницы темы, посмотрю, какие еще есть проблемы и просьбы.
Ура! Очень хочется разобраться как же все-таки построить диаграмму? Ну и с макросом тоже беда, запускаются только макрос сохранненые в "мои макросы", а если макрос сохранен в документе не запускается
24 мар 09, 02:21    [6966192]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
Kovalery
Member

Откуда:
Сообщений: 5
Yuric74,

В классе TOOCalc версии 2008.10.25 утечка памяти. В деструкторе нужно добавить:
FGraphicFrames.Free;
24 мар 09, 10:38    [6966822]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
AndrG
Member

Откуда:
Сообщений: 11
Yuric74
Я вернулся :)
.....


И все дружно закричали УРАААА!!! :)
Я столкнулся еще с такой проблемой: надо скопировать лист из одного документа (файла) Calc в другой.
24 мар 09, 10:44    [6966875]     Ответить | Цитировать Сообщить модератору
 Re: Delphi & OpenOffice - Заполним пробел  [new]
Yuric74
Member

Откуда: Пенза
Сообщений: 237
MotoCV
Очень хочется разобраться как же все-таки построить диаграмму? Ну и с макросом тоже беда, запускаются только макрос сохранненые в "мои макросы", а если макрос сохранен в документе не запускается

Диаграмму построить можно, сделаю. Макросы посмотрю.
Kovalery
В классе TOOCalc версии 2008.10.25 утечка памяти. В деструкторе нужно добавить:
FGraphicFrames.Free;

Спасибо, поправил.
AndrG
Я столкнулся еще с такой проблемой: надо скопировать лист из одного документа (файла) Calc в другой.

Посмотрю.
24 мар 09, 13:51    [6968225]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 8 9 10 11 12 [13] 14 15 16 17 .. 38   вперед  Ctrl
Все форумы / Delphi Ответить