Работа с OpenOffice Calc

166 views
Skip to first unread message

Вячеслав Черников

unread,
Apr 27, 2015, 3:39:57 AM4/27/15
to cla...@googlegroups.com
Добрый день, коллеги.
Нет ли у кого примера для работы с Calc из клариона? Наподобии, как с Excel через Ole.

PS. Про EasyOpenOffice знаю, но закрытые библиотеки не хочется. Вариант прямой работы с их xml рассматривается, но может уже появилось простое решение...

Nikolay Tsigouro

unread,
Apr 29, 2015, 3:21:38 AM4/29/15
to ClaList
А что тебе надо? Читать или создавать? Вариант создания их xml без ОО в этом процессе - вещь реальная и не очень сложная. Правда, не знаю, как это получится в чистом Кларионе, но у тебя же для работы с xml есть php.

WBR, Nikolay Tsigouro

27 апреля 2015 г., 10:39 пользователь Вячеслав Черников <fins...@gmail.com> написал:
Добрый день, коллеги.
Нет ли у кого примера для работы с Calc из клариона? Наподобии, как с Excel через Ole.

PS. Про EasyOpenOffice знаю, но закрытые библиотеки не хочется. Вариант прямой работы с их xml рассматривается, но может уже появилось простое решение...

--
Вы получили это сообщение, поскольку подписаны на группу "ClaList".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Вячеслав Черников

unread,
Apr 29, 2015, 4:21:13 AM4/29/15
to cla...@googlegroups.com
Я пока смотрю для задела на будущее. Если не ошибаюсь, в последних версиях mco тоже хранение в xml (xlsx). Xml в openoffice понятный, для разбора и формирования достаточно самодельного класса на кларионе. Архивация/разархивация через zlib, конвертация из/в юникода имеется. То есть на вскидку технических проблем я не вижу.
Больше вопрос выбора - работать на уровне структуры ods-файла или через программный интерфейс. 


среда, 29 апреля 2015 г. пользователь Nikolay Tsigouro написал:

Nikolay Tsigouro

unread,
Apr 29, 2015, 4:54:35 AM4/29/15
to ClaList
Все проще и работает с любыми "офисами", которые умеют сохранять/загружать свои документы в xml. У нас эта технология используется для отчетов в MS Word и Excel в портальном решении.
1. Данные для отчета выгружаются в xml.
2. К этому xml применяется xslt в результате которого получается документ требуемого формата.

Для подготовки данных у нас используется серверная VIEW к которой при выгрузке применяется фильтр по параметрам отчета. Выгрузку в xml (в таблицу БД) производит скрипт (хранимка) на PL/SQL
В клаше на tps это очевидно будет процедура типа Process. Чтобы сильно не заморачиваться, наверно можно  писать xml через клашину поддержку xml.

Для подготовки xsl шаблон документа размечается и выгружается в xml. Затем этот xml редактируется довольно простым и понятным образом и сохраняется как xsl. Основное редактирование это вставка цикла <xsl:for-each select="ROOT/TABLE/ROW_SET/ROW">... </xsl:for-each> для повторяющихся строк (excel) и замены разметки на <xsl:value-of disable-output-escaping="no" select="FieldName"/>

И все. Все рутинные опереции выполняет движок отчета, а задача разработчика - это преобразовать шаблон документа в xsl, написать CREATE VIEW и прописать этот отчет в системных таблицах.

WBR, Nikolay Tsigouro

29 апреля 2015 г., 11:21 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Вячеслав Черников

unread,
May 21, 2015, 3:59:25 PM5/21/15
to clalist
Привет.

Вроде мои потребности по OpenOffice закрывает использование wscript.exe. Из кларионовской программы генерим временный файл со скриптом на бэйсике и запускаем на обработку. Можем передавать параметры, получать результат работы, вызывать изнутри какие-нибудь другие скрипты. Это что-то наподобии интеграции с php в вебе, только локально.

Такая интеграции вообще довольно интересна.
1. wscript.exe (cscript.exe) есть во всех версиях винды, начиная с win 98.
2. Много разных объектных библиотек, которые можно легко заюзать, не ломая голову, а как это прикрутить к клариону. Например, работа с OpenOffice организуется весьма просто.
3. Много примеров использования в интернете. То есть это мэйнстрим.

Плата - создание одного или двух временных файлов. Поскольку все это рассматривается как дополнение к основному функционалу приложения, вроде вполне приемлемо.

PS. Прямая работа с xml не взлетает, т.к. может потребоваться работать с xls-файлами из OpenOffice. 

PS2. Подсмотрел в 1С Предприятие 8, они для работы с OpenOffice вроде как тоже wscript.exe используют, только немного иначе...


29 апреля 2015 г., 12:54 пользователь Nikolay Tsigouro <n.tsi...@gmail.com> написал:

Вячеслав Черников

unread,
May 23, 2015, 8:00:29 AM5/23/15
to clalist
Может кому пригодится. Ниже рабочий пример на WBScript, как вставить картинки в Calc. Внедряется одна картинка и две ссылки на нее из разных мест. Затем сохраняется в виде xls-файла для совместимости с Excel. Сам Calc визуально не открывается.

Код можно сохранить в файле с расширением vbs и открывать программой по умолчанию. Чтобы работало, должен быть установлен OpenOffice, и надо поменять имя картинки на свою.
Соответственно, такие скрипты можно создавать из кларионовской программы.

'------------------------------------------------------ 
Set ser_man = WScript.CreateObject("com.sun.star.ServiceManager")
Set desk = ser_man.createInstance("com.sun.star.frame.Desktop")

Set SaveParam = ser_man.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Set OpenParam = ser_man.Bridge_GetStruct("com.sun.star.beans.PropertyValue")
Set TheSize = ser_man.Bridge_GetStruct("com.sun.star.awt.Size")
Set ThePos = ser_man.Bridge_GetStruct("com.sun.star.awt.Point")

Dim no_arg()
Dim args1(0)

OpenParam.Name = "Hidden"
OpenParam.Value = true
Set args1(0) = OpenParam

Set Doc = desk.loadComponentFromURL("private:factory/scalc", "_blank", 0, args1)
Set sheet = Doc.getSheets().getByIndex(0)

'-------------------------------------------------
Set Graph = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
Graph.GraphicURL = "file:///e:/tmp/-/logo.wmf"

sheet.getDrawPage().add(Graph)

TheSize.width = 6000
TheSize.height = 3000
Graph.setsize(TheSize)

ThePos.X = 1500
ThePos.Y = 1500
Graph.setposition(ThePos)

Set oAnchor = Graph.getAnchor()
Set oText = oAnchor.getText()
Set oGraph_2 = Doc.createInstance("com.sun.star.drawing.BitmapTable")
call oGraph_2.insertByName( Graph.GraphicURL, Graph.GraphicURL )
Graph.GraphicURL = oGraph_2.getByName( Graph.GraphicURL )

'----------------------------------------
Set Graph = Nothing
Set Graph = Doc.createInstance("com.sun.star.drawing.GraphicObjectShape")
Graph.GraphicURL = "file:///e:/tmp/-/logo.wmf"

sheet.getDrawPage().add(Graph)

TheSize.width = 6000
TheSize.height = 3000
Graph.setsize(TheSize)

ThePos.X = 1500
ThePos.Y = 5500
Graph.setposition(ThePos)

Graph.GraphicURL = oGraph_2.getByName( Graph.GraphicURL )

'-----------------------------------------------

call Sheet.getCellByPosition( 0, 0 ).setString( "Пример вставки картинок")
call Sheet.getCellByPosition( 0, 1 ).setString( "Здравствуй, Мир!")

SaveParam.Name = "FilterName"
SaveParam.Value = "MS Excel 97"
Set args1(0)=SaveParam

call Doc.storeToURL("file:///e:/tmp/-/Test.xls",args1)
Doc.Close(1)
Set  Doc = Nothing

desk.terminate()

'-------------------------------------------------------

21 мая 2015 г., 23:59 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Вячеслав Черников

unread,
May 23, 2015, 8:05:18 AM5/23/15
to clalist
Сорри, остался мусор, следующие строки в примере можно удалить 

Set oAnchor = Graph.getAnchor()
Set oText = oAnchor.getText()

23 мая 2015 г., 16:00 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Вячеслав Черников

unread,
May 23, 2015, 3:52:33 PM5/23/15
to clalist
Пример кода на кларике. Создается xls-файл, в первую ячейку выводится строка.

!-----------------------------
form_r  routine
   DATA
fsOOL  &FsOpenOffice
   CODE

   fsOOL &= new(FsOpenOffice)
   fsOOL.init('1.vbs','')

   fsOOL.CalcConnect
   fsOOL.CalcNew

   fsOOL.CalcSetString(1,1,'Здравствуй, Мир!')

   fsOOL.CalcSaveToExcel('1.xls',1)

   fsOOL.SaveScript(1)

   fsOOL.kill
   dispose(fsOOL)

!------------------------------

23 мая 2015 г., 16:05 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Губин Игорь

unread,
May 24, 2015, 2:59:25 AM5/24/15
to cla...@googlegroups.com
С днём рождения Юрия Философова!
Удачи, здоровья и безглючных кодов с первого захода!


------------------------------------------------------------
Губин Игорь
Тел./факс: (+7 495) 989 7021
ICQ: 258187926
Google Talk: metaldata.info
WEB: http://www.metaldata.info

Владимир Дугинцов

unread,
May 24, 2015, 5:22:56 AM5/24/15
to cla...@googlegroups.com

+1

--
Отправлено из Mail.Ru для Android

воскресенье, 24 мая 2015г., 10:59 +0400 от Губин Игорь <gubi...@gmail.com>:

--
Вы получили это сообщение, поскольку подписаны на группу ClaList.
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.

Настройки подписки и доставки писем:  https://groups.google.com/d/optout .

Gmail

unread,
May 24, 2015, 6:47:14 AM5/24/15
to Губин Игорь

> С днём рождения Юрия Философова!
> Удачи, здоровья и безглючных кодов с первого захода!
Присоединяюсь к поздравлениям - корифею и гуру клариона всех благ!

> ------------------------------------------------------------
> Губин Игорь
> Тел./факс: (+7 495) 989 7021
> ICQ: 258187926
> Google Talk: metaldata.info
> WEB: http://www.metaldata.info




--
С уважением,
Вадим mailto:softcr...@gmail.com

Вячеслав Черников

unread,
May 24, 2015, 7:07:36 AM5/24/15
to cla...@googlegroups.com
+1

воскресенье, 24 мая 2015 г. пользователь Губин Игорь написал:
> --
> Вы получили это сообщение, поскольку подписаны на группу ClaList.
>
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.

Вячеслав Черников

unread,
May 24, 2015, 11:20:05 AM5/24/15
to clalist
Ниже практический пример загрузки накладной из xls-файла. 
Еще осталось работу со стилями ячеек подключить, чтобы свои потребности закрыть. Потом выложу класс как opensource.

!----------------------------------
form_r  routine
   DATA
fsOOL  &FsOpenOffice

lor:queue queue, pre()    !кьюшка для результата загрузки
lor:artic string(40), name('cArt')
lor:name  string(80), name('cName')
lor:kol   string(14), name('cKol')
lor:cena  string(14), name('cCena')
  end
   CODE

   fsOOL &= new(FsOpenOffice)
   fsOOL.init('1.vbs','1.txt')   !1 параметр - имя временного файла скрипта
                                        !на vbsript
                                        !2 параметр - имя временного файла 
                                        !результата

   fsOOL.CalcConnect        !код подключения к calc
   fsOOL.CalcOpen('1.xls')  !открываем файл с прайсом

   !мапим колонки на результирующую кьюшку
   !1 параметр - имя колонки
   !2 параметр - номер колонки
   !3 параметр - признак пропуска при пустом значении
   !4 параметр - фиксированное значение, нужно, если делаем
   !несколько чтений в кьюшку и выборки надо разделить
   fsOOL.CalcMapQueueAdd('cArt',0,1,'')
   fsOOL.CalcMapQueueAdd('cName',1,0,'')
   fsOOL.CalcMapQueueAdd('cKol',2,0,'')
   fsOOL.CalcMapQueueAdd('cCena',3,0,'')

   fsOOL.CalcGetRangeString(0)   !код загрузки данных
                                                  !1 параметр - стартовая строка (с 0)
                                                  !2 параметр - конечная строка, если
                                                  !опущена, то до конца таблицы

   fsOOL.CalcDisConnect(1)         !код завершения работы с calc

   fsOOL.MakeScript(1,lor:queue)  !сохранение и запуск скрипта
                                                  !1 параметр = 0, то просто формируем                                                     ! скрипт для отладки
                                                  !1 параметр =1, выполняем
                                                  !2 параметр - ссылка на очередь для
                                                  !результата

   fsOOL.kill
   dispose(fsOOL)

   fsViewQueue('',lor:queue)     !просмотр результатов загрузки

!----------------------------------

Юрий Философов

unread,
May 24, 2015, 4:44:15 PM5/24/15
to cla...@googlegroups.com
Спасибо всем поздравившим!

С уважением,
Юрий Философов 

24 мая 2015 г., 9:59 пользователь Губин Игорь <gubi...@gmail.com> написал:
--
Вы получили это сообщение, поскольку подписаны на группу ClaList.

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/d/optout.



--
С уважением,
Юрий Философов

Alexander Stepanets

unread,
May 24, 2015, 4:59:06 PM5/24/15
to cla...@googlegroups.com
24.05.2015 16:59, Губин Игорь пишет:
> С днём рождения Юрия Философова!
> Удачи, здоровья и безглючных кодов с первого захода!

С днём рождения! :)

serge62

unread,
May 24, 2015, 10:11:22 PM5/24/15
to cla...@googlegroups.com


Юрий! С днем рождения! Удачи и всех благ!

Александр Рыбников

unread,
May 25, 2015, 2:17:24 AM5/25/15
to Губин Игорь
Юрий! С днем рождения Вас! Здоровья, счастья, творческого озарения и
дачу на Бали :)

С уважением Александр
--
Best regards,
Александр mailto:gop...@mail.ru

Вячеслав Черников

unread,
May 25, 2015, 9:01:17 AM5/25/15
to clalist
Привет всем.

В аттаче сырцы класса для работы с OpenOffice Calc, использующий интерфейс с VBScript. В архив я приложил несколько примеров использования. Класс подключается стандартно, inc+clw. Зависимостей от версий клариона нет.

Класс может работать с форматами xls, xlsx, ods. Класс умеет загружать и выгружать данные, формировать файлы программно, вставлять картинки и т.п. с минимальным количеством кода.

Из замеченных проблем. После программного вывода границ ячеек, сохранения в xls и открытия файла в Excel почему-то перестает вызываться диалог свойства ячейки. В Calc все нормально. Если пересохранить файл в Calc, то в Excel все нормализуется.

Если возникнут вопросы или замечания, пишите. 

Удачи!


fsOpenOffice.7z

Вячеслав Черников

unread,
May 26, 2015, 3:27:16 AM5/26/15
to clalist
Можно еще расширить класс, добавив признак, с каким офисом работаем, OpenOffice или MCO. Получим полностью унифицированный код в приложении для Excel и Calc.

PS. Эта тема совсем никому не интересна?

25 мая 2015 г., 17:01 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Alexander Stepanets

unread,
May 26, 2015, 5:40:50 AM5/26/15
to cla...@googlegroups.com
26.05.2015 17:27, Вячеслав Черников пишет:
> Можно еще расширить класс, добавив признак, с каким офисом работаем,
> OpenOffice или MCO. Получим полностью унифицированный код в приложении
> для Excel и Calc.
>
> PS. Эта тема совсем никому не интересна?

Интересна. :)

Правда, практического применения "как есть" лично у меня не найдёт, но
собственно работа с офисом "снаружи" познавательна, спасибо. :)


L...@wireless.lt

unread,
May 26, 2015, 7:15:48 AM5/26/15
to cla...@googlegroups.com
> Можно еще расширить класс, добавив признак, с каким офисом работаем,
> OpenOffice или MCO. Получим полностью унифицированный код в приложении
> для Excel и Calc.
>
> PS. Эта тема совсем никому не интересна?

А как со скоростью, пользуюсь
!--------------------------------------------------------------------------------!
! MSExcelClass
! Microsoft Excel Class
! ®Copyright 1999 - SoftMasters (www.softmasters.com.ar)
! Juan Domingo Herrera
! Matķas Alejandro Flores
! Buenos Aires, Argentina
! Version: 2.0
!--------------------------------------------------------------------------------!
скорость при записи мала.
С уважением
Liudvikas

Вячеслав Черников

unread,
May 26, 2015, 7:55:01 AM5/26/15
to clalist
Я пока замеров на больших объемах не производил, но думаю, что вывод средствами vbscript должен работать быстрее, чем вывод из клариона через ole-контрол. 

26 мая 2015 г., 15:15 пользователь <L...@wireless.lt> написал:
--
Вы получили это сообщение, поскольку подписаны на группу ClaList.

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.

Вячеслав Черников

unread,
May 26, 2015, 12:48:37 PM5/26/15
to clalist
Сегодня внес небольшие изменения в класс.

1. Метод CalcSaveToExel переименован в CalcSaveTo. Формат сохранения определяется по расширению файла, передаваемого в параметрах. Поддерживаются xls, xlsx, ods и PDF для кучи.

2. Добавлен метод CalcReplace(<Исходная строка>,<Целевая строка>). Метод позволяет делать замены на выбранном листе. Например: CalcReplace('[Name'],'Иванов').

3. Добавлен метод Print для печати. Пока просто без параметров. В принципе, можно подключить установку всех опций из диалога печати, не знаю, надо ли. Есть отдельный метод для установки параметров страницы - портрет/ландшафт, отступы листа, масштаб.



Губин Игорь

unread,
May 28, 2015, 4:14:03 AM5/28/15
to cla...@googlegroups.com
Евгения Стефаненко с днём рождения!

--

Alexander Stepanets

unread,
May 28, 2015, 4:41:29 AM5/28/15
to cla...@googlegroups.com
28.05.2015 18:13, Губин Игорь пишет:
> Евгения Стефаненко с днём рождения!

Мои поздравления! :)


Юрий Философов

unread,
May 28, 2015, 4:48:02 AM5/28/15
to cla...@googlegroups.com
Всецело присоединяюсь. 

28 мая 2015 г., 11:40 пользователь Alexander Stepanets <clal...@partizansk.com> написал:
28.05.2015 18:13, Губин Игорь пишет:
Евгения Стефаненко с днём рождения!

Мои поздравления! :)
--
Вы получили это сообщение, поскольку подписаны на группу ClaList.

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/d/optout.

Владимир Дугинцов

unread,
May 28, 2015, 7:56:32 AM5/28/15
to cla...@googlegroups.com
+1


Четверг, 28 мая 2015, 11:13 +03:00 от Губин Игорь <gubi...@gmail.com>:
--
Вы получили это сообщение, поскольку подписаны на группу ClaList.

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Настройки подписки и доставки писем: https://groups.google.com/d/optout.


--
Владимир Дугинцов

"Чаплыгин В. Г."

unread,
May 28, 2015, 9:59:34 AM5/28/15
to cla...@googlegroups.com
+1

28.05.2015 14:56, Владимир Дугинцов пишет:
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

-- 
С уважением Чаплыгин Вадим Геннадьевич
мой адрес chapli...@yandex.ru
мой сайт в интернете chapligin.hut4.ru
Зеркало сайт в интернете: chapligin.fromru.com

Nikolay Tsigouro

unread,
May 28, 2015, 10:01:15 AM5/28/15
to ClaList
+1. Здоровья и успехов.

WBR, Nikolay Tsigouro

28 мая 2015 г., 11:13 пользователь Губин Игорь <gubi...@gmail.com> написал:

Вячеслав Черников

unread,
May 28, 2015, 11:21:34 AM5/28/15
to clalist
+1  Процветания clarionlife.

28 мая 2015 г., 12:13 пользователь Губин Игорь <gubi...@gmail.com> написал:

Вячеслав Черников

unread,
May 28, 2015, 11:28:02 AM5/28/15
to clalist
Привет всем.

В аттаче последняя версия класса. 
Добавлены несколько методов для работы с OO Writer.
WriterConnect
WriterDisConnect
WriterNew
WriterOpen
WriterSave
WriterSaveTo
WriterPrint
WriterReplace
WriterReplaceFromQueue
WriterAddImage    

Пример работы с Writer (заполнение бланка договора).
Вставку картинок можно делать в текст или в ячейки таблиц.

form_r  routine
   DATA
fsOOL  &FsOpenOffice

   CODE

   fsOOL &= new(FsOpenOffice)
   fsOOL.init('1.vbs','')

   fsOOL.WriterConnect
   fsOOL.WriterOpen('DogTempl.doc')

   fsOOL.WriterReplace('[Name]','Иванов')     !подстановка реквизитов
   fsOOL.WriterReplace('[Dolgn]','Директор')
   fsOOL.WriterAddImage('ivanov.jpg','#bmp#',6000,3000)  !вставка подписи

   fsOOL.WriterSaveTo('2.doc')

   fsOOL.WriterDisConnect(1)
   fsOOL.MakeScript(1)

   fsOOL.kill
   dispose(fsOOL)
fsOpenOffice.7z

Вячеслав Черников

unread,
May 30, 2015, 1:59:13 AM5/30/15
to clalist
Появился еще класс fsMsOffice для работы с Excel/Word. Функционал идентичен классу fsOpenOffice. Если вдруг кому такое надо, пишите в личку.

28 мая 2015 г., 19:28 пользователь Вячеслав Черников <fins...@gmail.com> написал:

--
Вы получили это сообщение, поскольку подписаны на группу "ClaList".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.

vvmaster gmail

unread,
May 31, 2015, 6:22:25 AM5/31/15
to Вячеслав Черников
Здравствуйте, Вячеслав.

Очень надо :) И очень интересно.
Если не жалко - пришлите.

Вы писали 30 мая 2015 г., 8:59:12:

--
С уважением,
vvmaster                          
mailto:vvmas...@gmail.com

Вячеслав Черников

unread,
May 31, 2015, 11:00:38 AM5/31/15
to clalist
Добрый день!

Ловите.

31 мая 2015 г., 14:22 пользователь vvmaster gmail <vvmas...@gmail.com> написал:
FsMsOffice.7z

Вячеслав Черников

unread,
Jun 5, 2015, 5:57:08 AM6/5/15
to clalist
Привет, коллеги.

Последние версии классов можно взять по ссылкам:



Добавлены базовые методы для построения графиков (Calc, Excel). Поддерживается построение графиков по заданной области данных и по сериям. 

Пример построения линейного графика с 2 сериями в Calc выглядит так.

form_r  routine
   DATA
fsOOL  &FsOpenOffice

   CODE

   fsOOL &= new(FsOpenOffice)
   fsOOL.init('1.vbs','')

   fsOOL.CalcConnect
   fsOOL.CalcOpen('1.xls')

    fsOOL.CalcChartAdd2(2,'MyChart','XYDiagram',1,1,1000,1000,10000,10000)
   fsOOL.CalcChartTitle('График')

   fsOOL.CalcChartSeriesNew(0,4,1, 0,4,2, 0,0)
   fsOOL.CalcChartSeriesPar(0,250,250)
   fsOOL.CalcChartSeriesAdd(0)

   fsOOL.CalcChartSeriesNew(0,4,4, 0,4,5, 1,0)
   fsOOL.CalcChartSeriesPar(1,250,250)
   fsOOL.CalcChartSeriesAdd(1)

   fsOOL.CalcChartSeriesFix

   fsOOL.CalcSaveTo('2.xls')

   fsOOL.CalcDisConnect(1)

   fsOOL.MakeScript(1)

   fsOOL.kill
   dispose(fsOOL)


vvmaster gmail

unread,
Jun 5, 2015, 6:23:45 AM6/5/15
to Вячеслав Черников
Здравствуйте, Вячеслав.

http://www.finsoftrz.ru/download/clarion/fsMsOffice.7z ошибка 404

Вы писали 5 июня 2015 г., 12:57:07:


Привет, коллеги.

Последние версии классов можно взять по ссылкам:

http://www.finsoftrz.ru/download/clarion/fsOpenOffice.7z

http://www.finsoftrz.ru/download/clarion/fsMsOffice.7z

Добавлены базовые методы для построения графиков (Calc, Excel). Поддерживается построение графиков по заданной области данных и по сериям.



Вячеслав Черников

unread,
Jun 5, 2015, 6:30:18 AM6/5/15
to clalist
Сорри, попробуйте еще раз.



5 июня 2015 г., 14:23 пользователь vvmaster gmail <vvmas...@gmail.com> написал:

--

vvmaster gmail

unread,
Jun 5, 2015, 6:44:47 AM6/5/15
to Вячеслав Черников
Здравствуйте, Вячеслав.

Вы писали 5 июня 2015 г., 13:30:17:

Спасибо!!!!

Вячеслав Черников

unread,
Jun 5, 2015, 7:05:28 AM6/5/15
to clalist
Пожалуйста.
На всякий случай еще пример для Excel, я его сразу в архив не вложил.

form_r  routine
   DATA
fsMOL  &FsMsOffice

   CODE

   fsMOL &= new(FsMsOffice)
   fsMOL.init('1.vbs','')

   fsMOL.ExcelConnect
   fsMOL.ExcelOpen('1.xls')

   fsMOL.ExcelChartAdd('xlPie', 1)
   fsMOL.ExcelChartData(1,1,5,3,  5)
   fsMOL.ExcelPlotArea(0,0)
   fsMOL.ExcelChartSeriesParam(1,15,'RGB(0,0,0)')
   fsMOL.ExcelChartArea(49,14,1,1)
   fsMOL.ExcelChartTitle('Заголовок',20,'RGB(0,255,0)')

   fsMOL.ExcelSaveTo('2.xls')

   fsMOL.ExcelDisConnect

   fsMOL.MakeScript(1)

   fsMOL.kill
   dispose(fsMOL)

5 июня 2015 г., 14:44 пользователь vvmaster gmail <vvmas...@gmail.com> написал:

Александр Рыбников

unread,
Jun 28, 2015, 3:13:41 AM6/28/15
to Вячеслав Черников
Здравствуйте Вячеслав,
 
 Попробовал Ваш класс, это самое простое решение из того с чем я сталкивался. :) Спасибо реально экономит время и дает большие возможности при работе с OO и OfficeMS.
 Но столкнулся с некоторыми проблемами при создании Excel файла, при выгрузке строчных значений в кириллице, выдает ошибку - недопустимый знак.
 Моя строка в кларионе -> fsMOL.ExcelSetString(1,2,Queue:Browse:1.WaresName)
 Вот строка результата на которую ссылается скрипт -> Sheet.Cells(1,3).Value = °≥
 Я так понимаю значение должно быть в ' ' :) 
 Прошу Вашей помощи, укажите как правильно решить данную проблему. 

 MS Office 2013, Clarion 10

-- 

Олег А. Руденко

unread,
Jun 28, 2015, 6:02:24 AM6/28/15
to Александр Рыбников
Здравствуйте, Александр!

воскресенье, 28 июня 2015 г., Вы писали:

Ну, решений два:
- или передавать в метод ExcelSetString строку, сразу завернутую в кавычки, типа
ExcelSetString(1,2,''''& Clip(Queue:Browse:1.WaresName) &'''')
- или доробатать метод ExcelSetString, что бы он сам "заворачивал" переданный ему
параметр в кавычки, типа:
SELF.AddScriptInt('Sheet.Cells(' & Row & ',' & Col & ').Value = ''' & clip(Str) &'''')


Здравствуйте Вячеслав,

Попробовал Ваш класс, это самое простое решение из того с чем я сталкивался. :) Спасибо реально экономит время и дает большие возможности при работе с OO и OfficeMS.
Но столкнулся с некоторыми проблемами при создании Excel файла, при выгрузке строчных значений в кириллице, выдает ошибку - недопустимый знак.
Моя строка в кларионе ->
fsMOL.ExcelSetString(1,2,Queue:Browse:1.WaresName)
Вот строка результата на которую ссылается скрипт -> Sheet.Cells(1,3).Value = °≥
Я так понимаю значение должно быть в ' ' :)
Прошу Вашей помощи, укажите как правильно решить данную проблему.

MS Office 2013, Clarion 10

Best regards,
Александр                            
mailto:gop...@mail.ru
--
.


=============================
С уважением, Олег А. Руденко.
Oleg_R...@mail.ru

Вячеслав Черников

unread,
Jun 28, 2015, 6:59:56 AM6/28/15
to clalist
Здравствуйте, Александр!

Там надо строку в двойные кавычки брать. Я поправил методы ExcelSetString и ExcelSetFormula, чтобы делалось автоматически.

Еще одна замеченная проблема была в том, что в методе загрузки данных ExcelGetRangeString не всегда корректно определялось количество строк в таблице. То есть макрос rowsmax = sheet.UsedRange.Rows.Count иногда выдавал количество строк, меньшее на 1. Я пока просто сделал +1. В комбинации с установкой проверки необходимости значения в ячейке это у меня работает нормально.

Обновить класс можно по ссылке:


28 июня 2015 г., 11:13 пользователь Александр Рыбников <gop...@mail.ru> написал:

Александр Рыбников

unread,
Jun 28, 2015, 7:02:57 AM6/28/15
to Олег А. Руденко
Здравствуйте Олег,
 Спасибо сделал, правда у меня рабочий вариант в таком виде :)

      IF NOT NUMERIC(clip(Str))

              SELF.AddScriptInt('Sheet.Cells(' & Row & ',' & Col & ').Value = "' & clip(Str) &'"')
      ELSE                        
              SELF.AddScriptInt('Sheet.Cells(' & Row & ',' & Col & ').Value = ' & clip(Str))
      END        
 
Просто решил подставить-потестить данный class 
Большиство вопросов возникают при выгрузке данных в Excel, вордом пользуюсь меньше :)
Вот на данный момент проблеммы с которыми мне пришлось столкнуться.
1. Вставка картинки, бросает ее - безадресно(безклеточно) :)
 Может из-за того, что используется старый Sheets(1).Pictures.Insert FName, а не Sheets(1).Shapes.AddPicture FName, False, True, 0, 0, X, Y  
 У меня в рабочем варианте используя abxl, картинка запихивалась в клетку с помощью такого кода:    

    IF Access:WaresImages.Fetch(WARIMA:PRIMARY) = Level:Benign
       IF BLOBTOFILE(WARIMA:Picturesloc_pathProgram '\tmp.jpg')  !если копирование неудачно возвращается ERRORCODE
           MESSAGE('Невозможно записать в файл - ОШИБКА: ' ERRORCODE()) !' & BaseFoto.Count & '
       END
       
xlo.SetProperty('Selection.RowHeight',loc_VisotaKletki)
       rec_SetCommand 'Application.ActiveSheet.Pictures.Insert("'loc_pathProgram '\tmp.jpg").Select'
       
xlo.SendCommand(CLIP(rec_SetCommand))
       IF loc_FotoProportion 0
         
xlo.SetProperty('Application.Selection.ShapeRange.LockAspectRatio',0)
       ELSE
         
xlo.SetProperty('Application.Selection.ShapeRange.LockAspectRatio',1)
       END
       
xlo.SetProperty('Application.Selection.ShapeRange.Height',loc_VisotaKletki)    ! Height
       !xlo.SetProperty('Application.Selection.ShapeRange.Width',loc_VisotaKletki)   ! Width
       xlo.SendCommand('Selection.Cut')
       xlo.SendCommand('ActiveSheet.Pictures.Paste.Select')
     ELSE
       
xlo.SetProperty('Selection.RowHeight',20)
       xlo.SetProperty('Selection.VerticalAlignment',2)             ! 1 верх, при 2 - по центру, 3 - низ
       xlo.SetProperty('Selection.HorizontalAlignment',3)           ! 1 используется выравнивание по умолчанию, при 2 - выравнивание слева, 3 - по центру, 4 - справа.
       xlo.SetCellValue('Нет фото',,0,0)                   ! значение, формат, строка, колонка
     END
 


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

-- 
Вы получили это сообщение, поскольку подписаны на группу "ClaList".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.



-- 

Вячеслав Черников

unread,
Jun 28, 2015, 7:15:22 AM6/28/15
to clalist
В догонку.
Если в выводимой строке есть двойные кавычки, то их надо задублировать. Сейчас это тоже сделано автоматически.
Возможно, еще какие-нибудь спецсимволы могут встретиться.

28 июня 2015 г., 14:59 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Вячеслав Черников

unread,
Jun 28, 2015, 8:33:34 AM6/28/15
to clalist
Александр, все, что делается через abxl, можно делать через метод AddOutLine(<Строка>). Строки команд практически одинаковые. 

Кстати, вставка числового значения в кавычках проходит нормально, Excel определяет его как число по содержимому.


28 июня 2015 г., 15:02 пользователь Александр Рыбников <gop...@mail.ru> написал:

Александр Рыбников

unread,
Jun 28, 2015, 8:49:08 AM6/28/15
to Вячеслав Черников




Александр, все, что делается через abxl, можно делать через метод AddOutLine(<Строка>). Строки команд практически одинаковые. 

Кстати, вставка числового значения в кавычках проходит нормально, Excel определяет его как число по содержимому.
 Спасибо Вячеслав, не знал :) 

Александр Рыбников

unread,
Jun 28, 2015, 9:08:36 AM6/28/15
to Вячеслав Черников
Вячеслав , киньте пожалуйста пример строки с использованием .MakeUrl, это строка ввиде ссылки? 



Вячеслав Черников

unread,
Jun 28, 2015, 9:39:18 AM6/28/15
to cla...@googlegroups.com
Погугли makeurl excel basic, там много примеров кода. Мне такое пока не требовалось.

воскресенье, 28 июня 2015 г. пользователь Александр Рыбников написал:

Александр Рыбников

unread,
Jun 28, 2015, 9:57:58 AM6/28/15
to Вячеслав Черников
Вячеслав, еще AddOutLine(<Строка>) - если внутри строки присуствуют  " (двойные кавычки), ошибка завершение конструкции

Вячеслав Черников

unread,
Jun 28, 2015, 11:00:15 AM6/28/15
to clalist
Сорри, для вставки команд надо использовать метод AddScriptLine. 
Метод AddOutLine предназначен для записи в выходной файл внутри скрипта.

28 июня 2015 г., 17:57 пользователь Александр Рыбников <gop...@mail.ru> написал:

Александр Рыбников

unread,
Jun 28, 2015, 1:31:57 PM6/28/15
to Вячеслав Черников
Привязка картинки к указаной ячейке, дополнил немного, проверил работает :)

Добавил в файле fsMsOffice.inc

ExcelAddImageCell    PROCEDURE (STRING fName, STRING pC, LONG pX, LONG pWidth, LONG pheight)  !Вставить картинку в ячейку

и в файле fsMsOffice.clw

!===================================================================================
!
! Вставить картинку в ячейку Excel
!
FsMsOffice.ExcelAddImageCell  PROCEDURE (STRING fName, STRING pC, LONG pX, LONG pWidth, LONG pheight) 
   CODE

      if SELF.Active = 0
         return
      end    

      if fName=''
         return
      end

      if ~exists(fName)
         return 
      end

      if LEN(CLIP(pC))<1 or pX<1 or pWidth<1 or pheight<1
         return
      end

      SELF.AddScriptInt('With Sheet.Pictures.Insert("' & clip(longpath(fName)) & '")')
      SELF.AddScriptInt('    With .ShapeRange')
      SELF.AddScriptInt('        .LockAspectRatio = msoTrue')
      SELF.AddScriptInt('        .Width = ' & pWidth)
      SELF.AddScriptInt('        .Height = ' & pHeight)
      SELF.AddScriptInt('    End With')
      SELF.AddScriptInt('    .Left = Sheet.Range("' & CLIP(pC) & pX & '").Left')
      SELF.AddScriptInt('    .Top = Sheet.Range("' & CLIP(pC) & pX & '").Top')
      SELF.AddScriptInt('    .Placement = 1')
      SELF.AddScriptInt('    .PrintObject = True')
      SELF.AddScriptInt('End With')
      SELF.AddScriptInt('')

Вячеслав Черников

unread,
Jun 28, 2015, 3:30:51 PM6/28/15
to cla...@googlegroups.com
Здорово. А пример вызова какой?

Александр Рыбников

unread,
Jun 28, 2015, 5:18:42 PM6/28/15
to Вячеслав Черников
fsMOL.ExcelAddImageCell('C:\_Excel\IMAG1789.jpg','B',3,60,30)  ! <путь к какртинке>, <колонка>, <строка>, <ширина картинки>, <высота картинки>

если верить интернету самый быстрый способ вставки картинок :)

Повторю вопрос, как быть с двойными кавычками?
вот пример запускаемый из vsc файла, который выдает ошибку
Sheet.Cells(1,1).Value = "=ГИПЕРССЫЛКА("http://www.shoppoint.org";"сделано на программе ShopPoint")"


Вячеслав Черников

unread,
Jun 29, 2015, 1:50:54 AM6/29/15
to clalist
Вставка ссылки в ячейку таблицы:

Sheet.Cells(4,1) = "=HYPERLINK(""http://www.google.com"", ""Пример"")"

29 июня 2015 г., 1:18 пользователь Александр Рыбников <gop...@mail.ru> написал:

--

Вячеслав Черников

unread,
Jun 29, 2015, 2:00:15 AM6/29/15
to clalist
Через класс так:

fsMOL.ExcelSetFormula(4,1,4,1,'=HYPERLINK("http://www.shoppoint.org","сделано на программе ShopPoint")')

Может, удобнее отдельный метод для вставки гиперссылки добавить? 


29 июня 2015 г., 9:50 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Александр Рыбников

unread,
Jun 29, 2015, 2:44:54 AM6/29/15
to Вячеслав Черников
не работает, результат скрипта 
sheet.Range(sheet.Cells(4,1), sheet.Cells(4,1)).Formula = "=HYPERLINK("http://www.shoppoint.org","сделано на программе ShopPoint")"
ошибка на символ после вторых кавычек "=HYPERLINK("?http://www.
       


Через класс так:

fsMOL.ExcelSetFormula(4,1,4,1,'=HYPERLINK("http://www.shoppoint.org","сделано на программе ShopPoint")')


vsc 2015-06-29_094338.jpg

Вячеслав Черников

unread,
Jun 29, 2015, 2:46:56 AM6/29/15
to clalist
Ну, в общем, добавил пару методов.

Вывод гиперссылки:
fsMOL.ExcelSetHyperLink(4,1,4,1,'http://www.finsoftrz.ru','ФинСофт:КупецЪ')

Вставка картинки в ячейку (высота и ширина определяется по размерам ячейки):
fsMOL.ExcelAddImageCell('logo.wmf',5,1)



29 июня 2015 г., 10:00 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Вячеслав Черников

unread,
Jun 29, 2015, 2:47:49 AM6/29/15
to clalist
Кавычки не задвоил внутри формулы.

29 июня 2015 г., 10:44 пользователь Александр Рыбников <gop...@mail.ru> написал:

--

Александр Рыбников

unread,
Jun 29, 2015, 3:16:00 AM6/29/15
to Вячеслав Черников
Спасибо все отлично! Ссылка и фото работает. :) 

Александр Рыбников

unread,
Jun 29, 2015, 3:43:33 AM6/29/15
to Александр Рыбников
Да еще в догонку, все вроде есть в Excel только объединение ячеек не хватает, например:

 xlwTest.ActiveSheet.Cells(iRow + 1, Column).Resize(, 2).Merge 


Вячеслав Черников

unread,
Jun 29, 2015, 4:13:48 AM6/29/15
to clalist
Это совсем просто:
sheet.Range(sheet.Cells(1,1), sheet.Cells(3,3)).Merge

Добавил метод в класс:
fsMOL.ExcelCellsMerge(1,1,3,3)


29 июня 2015 г., 11:43 пользователь Александр Рыбников <gop...@mail.ru> написал:

Александр Рыбников

unread,
Jun 29, 2015, 5:55:58 AM6/29/15
to Вячеслав Черников
Спасибо, проверил, работает.  Еще возник вопрос, создаю пустой файл в xls 
(формат MS Office 2003) все выводимые данные в документе есть, достаточно 
поменять расширение на xlsx и открывается пустой документ(книга)

У меня офис 2013

Вячеслав Черников

unread,
Jun 29, 2015, 6:04:45 AM6/29/15
to clalist
У меня под рукой последних офисов (с поддержкой xlsx) нет. 
Для информации - Calc из OpenOffice их открывает, но сохранять, насколько знаю, не умеет. Или не хочет.

29 июня 2015 г., 13:55 пользователь Александр Рыбников <gop...@mail.ru> написал:

--

Вячеслав Черников

unread,
Jun 29, 2015, 6:17:33 AM6/29/15
to clalist
В интернете пишут, что надо использовать формат с кодом 51:

objWb.saveas "C:\Users\xxx\test.xlsx",51

Можно попробовать в методе ExcelSaveTo проверить расширение файла и для xlsx поставить строку 

SELF.AddScriptInt('objDoc.SaveAs("' & clip(longpath(FName)) & '",51)')


29 июня 2015 г., 14:04 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Александр Рыбников

unread,
Jun 29, 2015, 6:25:09 AM6/29/15
to Вячеслав Черников
Вячеслав, проблема в указании формата файла, указав формат (fileformat) можно даже под МАС сохранять

ActiveWorkbook.SaveAs "C:\Users\YourUserName\Desktop\ron.xlsm", fileformat:=52 

 вот сама ссылки на источник
http://www.rondebruin.nl/win/s5/win001.htm
https://blogs.office.com/2009/07/07/use-the-vba-saveas-method-in-excel-2007/

Александр Рыбников

unread,
Jun 29, 2015, 6:32:34 AM6/29/15
to Вячеслав Черников
Вячеслав,
Тупо в скрипте поменял и все заработало :)
 
objDoc.SaveAs("C:\_Excel\Накл_Поставщик_22 06 2015 (13.16.06).xlsx"),51
Set objDoc = objExcel.Workbooks.Open("C:\_Excel\Накл_Поставщик_22 06 2015 (13.16.06).xlsx")


Вячеслав Черников

unread,
Jun 29, 2015, 6:47:13 AM6/29/15
to clalist
Попробуй сейчас. Ссылка на класс прежняя.

По хорошему, тогда надо определять версию офиса, а то на старых будет выдавать ошибку из-за недопустимого формата файла.

29 июня 2015 г., 14:32 пользователь Александр Рыбников <gop...@mail.ru> написал:

Александр Рыбников

unread,
Jun 29, 2015, 7:03:39 AM6/29/15
to Вячеслав Черников
Вячеслав,

С расширением xls открывает, с xlsx - документ пустой

Вопрос сообществу может напрягаем с классом и нам перебратся на другие способы общения? :)

Валерий Будько

unread,
Jun 29, 2015, 7:08:21 AM6/29/15
to cla...@googlegroups.com

интересно

 

С уважением

   Валерий Будько

  mailto:wbudko@gmail.com

--

Вы получили это сообщение, поскольку подписаны на группу "ClaList".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.




Avast logo

Это сообщение проверено на вирусы антивирусом Avast.
www.avast.com


Владимир Дугинцов

unread,
Jun 29, 2015, 7:09:20 AM6/29/15
to cla...@googlegroups.com
Продолжайте-продолжайте :)
Глядишь и еще кто-то подключится. :)


Понедельник, 29 июня 2015, 14:03 +03:00 от Александр Рыбников <gop...@mail.ru>:
--
Вы получили это сообщение, поскольку подписаны на группу "ClaList".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.


--
Владимир Дугинцов

Вячеслав Черников

unread,
Jun 29, 2015, 7:34:27 AM6/29/15
to clalist
Странно. Я попробовал вместо 51 подставить 6, у меня нормально в csv сохранилось. А какой код в скрипте для saveas получился? 

29 июня 2015 г., 15:03 пользователь Александр Рыбников <gop...@mail.ru> написал:

--

Александр Рыбников

unread,
Jun 29, 2015, 10:11:34 AM6/29/15
to Вячеслав Черников
Вячеслав,

строка из скрипта
objDoc.SaveAs("C:\Program_2016\ShoppointLite\_Excel\Накл_Поставщик_22 06 2015 (17.08.02).xlsx"),51

мое то, что работало


objDoc.SaveAs("C:\_Excel\Накл_Поставщик_22 06 2015 (13.16.06).xlsx"),51
Set objDoc = objExcel.Workbooks.Open("C:\_Excel\Накл_Поставщик_22 06 2015 (13.16.06).xlsx")

как видим пропала 2-я строка

Вячеслав Черников

unread,
Jun 29, 2015, 10:41:48 AM6/29/15
to clalist
Кажется, я понял, о чем речь. В методе ExcelOpen есть проверка на расширение открываемого файла. Добавил туда xlsx. Обновление по старой ссылке.

29 июня 2015 г., 18:11 пользователь Александр Рыбников <gop...@mail.ru> написал:

Александр Рыбников

unread,
Jun 29, 2015, 11:11:31 AM6/29/15
to Вячеслав Черников
Вячеслав,
Все работает, еще есть кое-что, ширина колонки я что есть ExcelColumnsWidthSet,
но она работает через буквенные значение колонок у Вас все вроде через R1C1
типа для одной колонки Columns(1).ColumnWidth=10 
или для несколько  Cells(2,2).EntireColumn.ColumnWidth=10  

и авто-ширина,
Range("A1:E1").Columns.AutoFit

Вачеслав, я не замучал Вас своими просьбами? :)

Вячеслав Черников

unread,
Jun 29, 2015, 11:45:02 AM6/29/15
to clalist
Установка ширины колонок на выбор:
fsMOL.ExcelColumnsWidthSet('B','C',20) 
fsMOL.ExcelColumnsWidthSet(5,6,20)

Установка авто-ширины колонок:
fsMOL.ExcelColumnsWidthAvtoSet(7,7)

Обновление по прежней ссылке.

PS. Да, пора отдыхать...

29 июня 2015 г., 19:11 пользователь Александр Рыбников <gop...@mail.ru> написал:

Александр Рыбников

unread,
Jun 29, 2015, 11:56:32 AM6/29/15
to Вячеслав Черников
Спасибо Вячеслав!


Установка ширины колонок на выбор:
fsMOL.ExcelColumnsWidthSet('B','C',20) 
fsMOL.ExcelColumnsWidthSet(5,6,20)

Установка авто-ширины колонок:
fsMOL.ExcelColumnsWidthAvtoSet(7,7)

Обновление по прежней ссылке.

PS. Да, пора отдыхать...

29 июня 2015 г., 19:11 пользователь Александр Рыбников <gop...@mail.ru> написал:
Вячеслав,
Все работает, еще есть кое-что, ширина колонки я что есть ExcelColumnsWidthSet,
но она работает через буквенные значение колонок у Вас все вроде через R1C1
типа для одной колонки Columns(1).ColumnWidth=10 
или для несколько  Cells(2,2).EntireColumn.ColumnWidth=10  

и авто-ширина,
Range("A1:E1").Columns.AutoFit

Вачеслав, я не замучал Вас своими просьбами? :)


Vitaly B.

unread,
Jun 29, 2015, 8:56:13 PM6/29/15
to Вячеслав Черников
Привет, Вячеслав.

Вы писали 29 июня 2015 г., 21:34:26:

> Странно. Я попробовал вместо 51 подставить 6, у меня нормально в
> csv сохранилось. А какой код в скрипте для saveas получился?

! File formats
Exc:CSV Equate(6)
Exc:CSVMSDOS Equate(24)
Exc:CSVWindows Equate(23)
Exc:DBF3 Equate(8)
Exc:DBF4 Equate(11)
Exc:Excel4 Equate(33)
Exc:Excel5 Equate(39)
Exc:Excel7 Equate(39)
Exc:Excel9795 Equate(43)
Exc:ExcHtml Equate(44)
Exc:ExcXLSX Equate(51)
Exc:xlNormal Equate(-4143)
Exc:Template Equate(17)
Exc:TextMSDOS Equate(21)
Exc:TextWindows Equate(20)


--
Всего наилучшего,
poruchik mailto:fighti...@mail.ru
-------------------------------------------------------------------
Покупайте Советских боевых слонов!

Вячеслав Черников

unread,
Jun 29, 2015, 11:53:40 PM6/29/15
to clalist
Аналогичные методы добавил для Calc.

CalcSetHyperLink - вставить ссылку
CalcAddImageCell - вставить картинку в ячейку
CalcCellsMerge - объединить ячейки
CalcColumnsWidthAvtoSet - установить авто-ширину для колонки

Примеры использования в архиве.




29 июня 2015 г., 19:56 пользователь Александр Рыбников <gop...@mail.ru> написал:

--

Александр Рыбников

unread,
Jun 30, 2015, 1:26:40 AM6/30/15
to Вячеслав Черников
Вячеслав,
ExcelColumnsWidthAvtoSet - ошибка надо подправить
Columns.Autofit поправить на EntireColumn.Autofit

перестали работать свойства клеток - шрифт, стили


Установка ширины колонок на выбор:
fsMOL.ExcelColumnsWidthSet('B','C',20) 
fsMOL.ExcelColumnsWidthSet(5,6,20)

Установка авто-ширины колонок:
fsMOL.ExcelColumnsWidthAvtoSet(7,7) 




 Александр                            mailto:gop...@mail.ru

Александр Рыбников

unread,
Jun 30, 2015, 1:44:42 AM6/30/15
to Александр Рыбников
Вячеслав,


перестали работать свойства клеток - шрифт, стили

извините, все работает, моя ошибка


 Александр                            mailto:gop...@mail.ru 

-- 
Вы получили это сообщение, поскольку подписаны на группу "ClaList".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.

Вячеслав Черников

unread,
Jun 30, 2015, 2:05:15 AM6/30/15
to clalist
У меня оба варианта работают, Columns.Autofit и EntireColumn.Autofit, одинаково.

Со шрифтами тоже проблем не вижу. Тестовый пример отрабатывает. Там ничего не менялось.

Может, с версией офиса связано? У меня MsOffice XP (2002 год).

30 июня 2015 г., 9:26 пользователь Александр Рыбников <gop...@mail.ru> написал:

--

Александр Рыбников

unread,
Jun 30, 2015, 2:28:13 AM6/30/15
to Вячеслав Черников
Вячеслав,


У меня оба варианта работают, Columns.Autofit и EntireColumn.Autofit, одинаково.
Может быть из-за версий офисов



Со шрифтами тоже проблем не вижу. Тестовый пример отрабатывает. Там ничего не менялось.

Может, с версией офиса связано? У меня MsOffice XP (2002 год).
это я просто со стилями не разобрался, а кроме стилей присвоение свойст для клеток какие то используются? 



30 июня 2015 г., 9:26 пользователь Александр Рыбников <gop...@mail.ru> написал:
Вячеслав,
ExcelColumnsWidthAvtoSet - ошибка надо подправить
Columns.Autofit поправить на EntireColumn.Autofit

перестали работать свойства клеток - шрифт, стили


Установка ширины колонок на выбор:
fsMOL.ExcelColumnsWidthSet('B','C',20) 
fsMOL.ExcelColumnsWidthSet(5,6,20)

Установка авто-ширины колонок:
fsMOL.ExcelColumnsWidthAvtoSet(7,7) 





 Александр                            mailto:gop...@mail.ru
-- 
Вы получили это сообщение, поскольку подписаны на группу "ClaList".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
-- 
Вы получили это сообщение, поскольку подписаны на группу "ClaList".
Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.




Вячеслав Черников

unread,
Jun 30, 2015, 2:48:11 AM6/30/15
to clalist
30 июня 2015 г., 10:28 пользователь Александр Рыбников <gop...@mail.ru> написал:
Вячеслав,


У меня оба варианта работают, Columns.Autofit и EntireColumn.Autofit, одинаково.
Может быть из-за версий офисов

Я изменил на второй вариант.
 



Со шрифтами тоже проблем не вижу. Тестовый пример отрабатывает. Там ничего не менялось.

Может, с версией офиса связано? У меня MsOffice XP (2002 год).
это я просто со стилями не разобрался, а кроме стилей присвоение свойст для клеток какие то используются? 

Через стили сделано для единообразия с calc (там модель намного сложнее, чем в Excel). Можно, конечно, напрямую использовать макросы через AddScriptLine. Если создавать форму вручную, то, наверно, проще наследовать класс и после инициализации создать базовый набор стилей, чтобы всегда был в готовом виде. Хотя мне такой подход (ручное описание формы) кажется довольно трудоемким. 

Сейчас у меня другие инструменты, а когда-то давно, при работе через ole, я просто копировал диапазоны ячеек с настройки на второй закладке, вставлял в выходную форму на первой закладке, а затем заполнял. Аналогично можно делать и через класс, метод копирования ячеек в наличии.

Александр Рыбников

unread,
Jul 29, 2015, 6:22:09 AM7/29/15
to Вячеслав Черников
Здравствуйте,
Извините, если не по теме, но мне кажется, что данная тема и для Вячеслава близка. 
Вордовский документ(*.doc) используется как шаблон в котором указаны переменные для вставки данных. 
Сам вопрос, как при создании ворд-документа шаблона набрасывать сами переменные "блондинкам", чтобы они "не убили" сам документ :) 
Я создал таблицу в которой есть все переменные, как с помощью Drag-drop или 
Clipboard бросить переменные из списка в шаблон-документ, чтобы не дать "угробить" шаблон-документ.
То есть, чтобы бросались переменные и сам документ был только для просмотра.

Вячеслав Черников

unread,
Jul 29, 2015, 7:03:40 AM7/29/15
to cla...@googlegroups.com
Добрый день. У меня не актуально, в основном договорами занимаются умные брюнетки :-) А больше вывод в вордовский формат нигде не используется.

среда, 29 июля 2015 г. пользователь Александр Рыбников написал:

Vitaly B.

unread,
Aug 1, 2015, 10:57:44 PM8/1/15
to Александр Рыбников
Привет, Александр.

> Вордовский документ(*.doc) используется как шаблон в котором
> указаны переменные для вставки данных.
> Сам вопрос, как при создании ворд-документа шаблона набрасывать
> сами переменные "блондинкам", чтобы они "не убили" сам документ :)
> Я создал таблицу в которой есть все переменные, как с помощью Drag-drop или
> Clipboard бросить переменные из списка в шаблон-документ, чтобы не дать "угробить" шаблон-документ.
> То есть, чтобы бросались переменные и сам документ был только для просмотра.

сохранить шаблон, как шаблон dot

> --
> Best regards,
> Александр mailto:gop...@mail.ru




--
Всего наилучшего,
poruchik mailto:fighti...@mail.ru
-------------------------------------------------------------------
В молодости шалил - думал, потом поумнел и стал соображать... ©

Serge

unread,
Aug 4, 2015, 5:31:55 AM8/4/15
to Александр Рыбников
Здравствуйте, Александр.

Я пробовал использовать вордовский документ с помощью OfficeTemplates. Однако понял, что это неудобно, в Ворде едет текст при вставке и прочие заморочки. Перешел на те же OfficeTemplates, только в Экселе. Там вообще проблем нет. От блондинок защищался путем копирования шаблона в их рабочие папки при запуске программы, реально они умудрялись портить их. 

Вы писали 29 июля 2015 г., 20:22:04:


 
-- 
Вы получили это сообщение, поскольку подписаны на одну из тем в группе "ClaList".
Чтобы отменить подписку на эту тему, перейдите по ссылке 
https://groups.google.com/d/topic/clalist/xhzVpPAD0DI/unsubscribe.
Чтобы отменить подписку на эту группу и все ее темы, отправьте письмо на электронный адрес 
clalist+u...@googlegroups.com.

Чтобы настроить другие параметры, перейдите по ссылке 
https://groups.google.com/d/optout.




-- 
С уважением,
 Serge                          
mailto:pavle...@gmail.com
Reply all
Reply to author
Forward
0 new messages