for flooders
:: Главная :: Решения :: Статьи :: Сайт М. Дроздова :: Файловый архив :: Книга по VFP 9 :: Русский Help Online :: OFF-LINE Форум
   Лисоводы   всех   стран,  объединяйтесь !!!  

Список Форумов  :: Visual Foxpro, Foxpro for DOS
  

Методы Excel с аргументом ожидающим Array(Array())
kvichans
Автор

Сообщений: 307
Откуда: Москва
Дата: 25.10.07 11:48:57
Возможно ли сформировать аргумент для метода 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
Откуда: Тамбов
Дата: 25.10.07 14:28:23
Точно знаю, что сформировать аргумент для метода 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
Дата: 25.10.07 18:28:04
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
Откуда: Москва
Дата: 27.10.07 16:20:20
Спасибо, Юра. Это как раз то, что нужно.


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



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

On-line: 27 lemenev  (Гостей: 26)

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