:: Visual Foxpro, Foxpro for DOS
Методы Excel с аргументом ожидающим Array(Array())
kvichans

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
Возможно ли сформировать аргумент для метода Excel в виде массива массивов?

Встретился такой случай. Метод Workbooks.OpenText позволяет указать форматы колонок через параметр FieldInfo. Запись макро показала, что на VBA значение этого параметра выглядит так
FieldInfo:=Array(Array(1, 1), Array(2, 1))
Пояснения: первое число - номер колонки, второе - формат (General, Тext,...)

Можно ли на фоксе сформировать такое?


------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive
Re: Методы Excel с аргументом ожидающим Array(Array())
rvc44
Автор

Сообщений: 2211
Откуда: Тамбов
Дата регистрации: 06.12.2005
Точно знаю, что сформировать аргумент для метода OpenOffice Calc (бесплатный аналог Excel)
в виде массива массивов (array of array) возможно. Более того, даже пробывал сам!
Как-то раз при автоматизации Calc из VFP нужно было выполнить строку вида
oNumRules.replaceByIndex(lJ-1, oRule)
где oRule есть массив некоторых объектов.
Обсуждая эту проблему с французским коллегой Бернардом Марселли выяснилось,
что это проблема VFP, что он умеет работать ТОЛЬКО с многомерными массивами,
а с массивами массивов не умеет работать (хотя даже СУБД Clipper for DOS)
этот тип данных поддерживает.
Такой облом произошел очевидно, т.к. FoxPro в свое время перекупил M$, а все языки
программирования от MS никогда не были перегруженными исчерпывающе-полезной функциональностью, как, например, это было свойственно Clipper'у и ClipperTools II.
Но при автоматизации OO данный просчет в архитектуре VFP возможно преодолеть,
если напрямую объяснить automation bridge ("мостику" автоматизации) от Sun Microsystems
(создатель OpenOffice, Java и пр.) что это за тип данных!
Так, чтобы вышеуказанный код в одну строку, легко выполнимый из макросов Calc,
также работал из VFP переписываем его согласно главы Professional Uno > Automation Bridge
> Type Mappings > Mapping of a sequence руководства Developer's Guide от Sun Microsystems:
ooServiceManager = OOoGetServiceManager()
unoWrap = ooServiceManager.Bridge_GetValueObject()
unoWrap.set('[]com.sun.star.beans.PropertyValue', @oRule)
oNumRules.replaceByIndex(lJ-1, unoWrap)
В третьей строке и заключается всё волшебство!

Как быть в случае с Excel я не знаю, т.к. наша контора работает только на OpenOffice
и вцелом все весьма довольны.
Думаю, что в этой задаче неплохо было бы поискать аналог automation bridge для Excel,
если, конечно, он существует. Ведь в штатных ситуациях, при программировании для Calc
можно также обойтись без automation bridge.
В общем копайте документацию от MS.
Удачи!
Ratings: 0 negative/0 positive
Re: Методы Excel с аргументом ожидающим Array(Array())
rubinov

Сообщений: 483
Дата регистрации: 07.02.2005
kvichans
Возможно ли сформировать аргумент для метода Excel в виде массива массивов?
Встретился такой случай. Метод Workbooks.OpenText позволяет указать форматы колонок через параметр FieldInfo. Запись макро показала, что на VBA значение этого параметра выглядит так
FieldInfo:=Array(Array(1, 1), Array(2, 1))
Пояснения: первое число - номер колонки, второе - формат (General, Тext,...)

Можно ли на фоксе сформировать такое?


FieldInfo - просто 2-размерный массив. Прилагаю что я когда-то записал в свою записную книжку

*OPenText NOtes
*expression.OpenText(Filename, Origin, StartRow, DataType, TextQualifier, ConsecutiveDelimiter, Tab, Semicolon, Comma, Space, Other, OtherChar, FieldInfo),
*where only one parameter requered, Filename
* www.universalthread.com, Message# 702641
oExcel.Workbooks.OpenText(lcSemiColonFile,,,xlDelimited,,,,.T.,,,,, @arrFldSemicolonInfo)
*If you know the format of fields create an array defining it,
* otherwisee do not pass field info array.
oExcel.Workbooks.OpenText(lcSemiColonFile,,,xlDelimited,,,,.T.)
*Field info array is two dimensional where first defines the column order and second formatting. ie:
*If you would export 10 columns where 5,6th columns are date type and you want them as MDY (rest text):
*#DEFINE xlDelimited 1
*#DEFINE xlFixedWidth 2
*#DEFINE xlGeneralFormat 1
*#DEFINE xlTextFormat 2
*#DEFINE xlMDYFormat 3
*#DEFINE xlDMYFormat 4
*#DEFINE xlYMDFormat 5
*#DEFINE xlMYDFormat 6
*#DEFINE xlDYMFormat 7
*#DEFINE xlYDMFormat 8
*#DEFINE xlSkipColumn 9
*#DEFINE xlEMDFormat 10
dimension arrFldSemicolonInfo[10,2]
for ix=1 to 10
arrFldSemicolonInfo[ix,1]=ix
arrFldSemicolonInfo[ix,2]=xlTextFormat
endfor
arrFldSemicolonInfo[5,2]=xlMDYFormat
arrFldSemicolonInfo[6,2]=xlMDYFormat



Исправлено 1 раз(а). Последнее : rubinov, 25.10.07 18:29
Ratings: 0 negative/1 positive
Re: Методы Excel с аргументом ожидающим Array(Array())
kvichans

Сообщений: 307
Откуда: Москва
Дата регистрации: 19.01.2006
Спасибо, Юра. Это как раз то, что нужно.


------------------
Андрей, FoxPro с 2003 года
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 22 akvvohinc  (Гостей: 21)

© 2000-2024 Fox Club 
Яндекс.Метрика