:: Visual Foxpro, Foxpro for DOS
Re: замена команды Import from xls
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Вам показали как можно работать с excel через его АПИ - в предложенном примере записываются данные в ячейки, если же заменить строчку внутри цикла на
? XLSheet.RANGE("A" + ALLTRIM(STR(lnPer + 1))).value
То они будут наборот считываться в фокс...
Это не самый быстрый и оптимальный способ (особенно топорен способ формирования адреса ячейки, т.к. куда как логичнее выглядело бы XLSheet.Cells(m.lnPer, 1).Value), но для начала разберитесь с ним, а потом поиск по форуму - есть масса примеров, в т.ч. и то как быстро можно забирать из экселя целые блоки данных (в фоксовый массив).


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Спасибо за помощь.
Но прежде чем перейти к другим примерам, хотелось бы разобраться почему часть данных считывается, а часть нет. Что же это за избирательность такая? При том, что считывание чисто числовых столбцов и чисто символьных выполняется отлично.
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Владимир Максимов

Сообщений: 14098
Откуда: Москва
Дата регистрации: 02.09.2000
Olegv
Спасибо за помощь.
Но прежде чем перейти к другим примерам, хотелось бы разобраться почему часть данных считывается, а часть нет. Что же это за избирательность такая? При том, что считывание чисто числовых столбцов и чисто символьных выполняется отлично.

У таблицы DBF одно поле (один столбец) может содержать данные только одного типа. Например, только символьные. Или только числовые. Если Вы работаете с листом Excel как с таблицей DBF, то вынуждены считаться с этим ограничением. Как следствие, адекватно прочитаны будут только те данные тип которых совпадает с типом данных соответствующего поля полученной таблицы. Остальные вернут NULL.
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Спасибо, это понятно.
Тогда скажите, а как прочитать данные из Эксель, содержащий и символьные и числовые значения?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
И еще вопрос: А можно ли из эксель 2007 сохранить файлы в формате Excel5.0/95?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
WbrErr

Сообщений: 1960
Дата регистрации: 05.12.2006
forum.foxclub.ru
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
WbrErr

Сообщений: 1960
Дата регистрации: 05.12.2006
Из эксель 2007 можно сохранить файлы в формате Excel5.0/95 при помощи самого эксель 2007.
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Тогда скажите, а как прочитать данные из Эксель, содержащий и символьные и числовые значения?
Как прочитать значения ячеек листа Excel из VFP с помощью OLE вам уже показали и дали все необходимые ссылки.

Если вы сохраните книгу Excel в формате Excel5.0/95, то можете преобразовать лист в таблицу командой IMPORT FROM ... TYPE XLS.
При этом для колонок Excel, которые содержат символьно-числовые данные, будут созданы поля символьного типа, а числовые данные будут преобразованы в соответствующие строковые значения.

Цитата:
Из эксель 2007 можно сохранить файлы в формате Excel5.0/95 при помощи самого эксель 2007
Добавлю, что для этого нужно после "Сохранить как" выбрать "Другие форматы", после чего в комбо "Тип файла" выбрать "Книга Microsoft Excel 5.0/95 (*.xls)



Исправлено 1 раз(а). Последнее : akvvohinc, 13.11.11 16:45
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Вот спасибочки огромное!
А то я дурень в эти "др. форматы" и не заглядывал! Все отлично импортировалось! и буквы и цифры!
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
А вот интересно, можно ли программно из Фокса открыть диалоговое окно, выбрать файл Эксель 97/2007, затем его программно сохранить в формате 95 и тут же импортировать?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Можно. Диалог запроса - фоксовый GETFILE(), далее создание экземпляра экселя, открытие файла - это уже всё было, и наконец SaveAs(). Будьте уж столь любезны, научитесь пользоваться ПОИСКОМ.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Спасибо! Поиском постараюсь, конечно, научиться.
Вот только я рано еще радовался - все хорошо читается, но при длине строки не больше 35 символов.... а у меня 80.
И что делать? (опять поиск, что ли? А чего искать?)
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
of63

Сообщений: 25250
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
Олег, пробовать надо, ошибаться, видоизменять, и еше раз пробовать

Вот, мои извращения над чтением ячеек Excel:



Исправлено 1 раз(а). Последнее : of63, 13.11.11 20:16
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Спасибо, конечно... но я сделал проще.
Т.к. у меня поле с буквами и цифрами меньше 36 символов, то я использовал оба метода и из двух таблиц сделал одну! Ессно файл в формате Эксель 95.
Сначала считываю длинные символьные данные
------------------
lcFile = GETFILE()
IF EMPTY(lcFile) THEN
RETURN
ENDIF
store SQLSTRINGCONNECT(;
"DRIVER={Microsoft Excel Driver (*.xls)};" + ;
"FIL=Excel 97;" + ;
"DefaultDir=D:\bdv1_data\;" + ;
"DBQ="+lcFile);
TO gn
?SQLexec(gn, 'select * from "Ëèñò1$"')
=SQLDISCONNECT(0)
-------------------
Потом считываю символьно-цифровые поля:
-----------------------------------
SELECT bdv1kdspxls2
APPEND FROM '&lcFile' TYPE XLS &&as 1251 &&delimiter WITH TAB
ну и далее столбец с символьно-цифровыми полями переписываю в первую таблИцу
----------------------
ВСЕ ОТЛИЧНО ПОЛУЧИЛОСЬ!
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Igor Korolyov
Можно. Диалог запроса - фоксовый GETFILE(), далее создание экземпляра экселя, открытие файла - это уже всё было, и наконец SaveAs(). Будьте уж столь любезны, научитесь пользоваться ПОИСКОМ.
Поиском аж за год ничего не нашел... в смысле SaveAs(95)?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
of63

Сообщений: 25250
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
плин, чего там не найти... когда в комадном окне отркроешь. этот ексел:
o = createobject("Application.Ecxel")
и дальше:
? o.
и там высвечиваются свойства последовательность параметров этого обьекта "o.SaveAs" (после нажатия точки/скобки)

...Вот оттуда и списал:
* Filename:="D:\Книга1.xls",
* FileFormat:=xlExcel8 - 56
* [xlOpenXMLWorkbook] 51
* DBF2(3,4) - 7(8,11);
* Excel5(7,8,9795) - 39(56,56,43),
* Template - 17
* Password:="",
* WriteResPassword:="",
* ReadOnlyRecommended:=False,
* CreateBackup:=False
Можно еще извратиться, и "через API" узнать какие версии Excel наличествуют в ОС, я такого не делал, оказалось, достаточно знать версию Excel, который запустился:
? VAL(m.o.Version) && под Office2007 - 12.0, ранее был 11.0

(ну, в интернете там все написано... блин, в ИЕ либое порно, там все все находят, любой вид извращений, а Excel.SaveAs - ну, не может быть сложным моментом...)

(щас вынужден писать в VB6 дипломчик (там ужасный редактор текста прог, набор штантных видеообьектов крайне убогий, все надо брать из МС, исплевался, 3 недели уже пишу... а шо делать? ), так там это "ИнтелигентСервис" вполне присутствует, странно, тогда же был и VFP6, вроде, что-то я не помню, что такое удобство в ВФП было, может не заметил, ... я правда не особо замечаю новшества, консерватор...)



Исправлено 8 раз(а). Последнее : of63, 13.11.11 22:15
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
akvvohinc

Сообщений: 4219
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Вот только я рано еще радовался - все хорошо читается, но при длине строки не больше 35 символов.... а у меня 80.
Не знаю, в чем у вас проблемы, так как у меня ничего подобного не происходит - отлично отрабатывает до положенного максимума (254 символов/поле).

Какой версией VFP пользуетесь?
Пришлите ваш xls-файл, могу попробовать импортировать его...
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Спасибо все огромное за участие.
of63
Я в Экселе и с Экселем не работаю. Только использую как промежуточное передаточное звено. В одной программе "сохранить как Эксель", а в другой "импорт Эксель". Бывает, если проект сырой, то перед импортом в Экселе просматриваю, где чего не хватает. Поэтому никогда не разбирался как там куда обращаться.
akvvohinc
Фокс у меня 9-ый. Если делаю "сохранить как текст" и потом в фоксе "импорт текст" - все работает с писком. Без ограничений и проблем. Но для некоторых товарищей нужно сделать и импорт из Эеселя - вот и парюсь! И Эксель у них 2007-ой. Так что надо программно и пересохранить и импортировать.
Времени разбираться самому нет и не будет. И так вечерами и в субботу приходится работать. А на Фоксе себе делаю вспомогательную базу, а то голова кругом уже идет.
Думаю покопаться в SET установках....
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Ну так пересохраните в формате текстового файла (их несколько разных видов в экселе есть, CSV например) и не парьтесь ни с ODBC драйвером, ни с TYPE XLS.
Вообще если на принимающей стороне заведомо есть эксель (а иначе чем же "конвертировать"), то может оказаться проще напрямую из него и читать - открыть книжку, потом
laData = loWorkbook.Worksheets(1).UsedRange.Value
и в массиве laData получить все данные из заполненной части листа. Да, если там возможны "огромные" массивы (что было бы странно для передачи данных при помощи экселя) то может не хватить памяти и придётся "кусочками" читать - например по 100 строк за раз...


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Ну так я и хочу пересохранить... но в ответ на
lcFile = GETFILE()
IF EMPTY(lcFile) THEN
RETURN
ENDIF
LOCAL XLApp, XLSheet, lnPer
XLApp = GETOBJECT('', 'excel.application')
XLApp.VISIBLE= .F.
XLApp.WorkBooks.ADD(lcFile)
XLApp.ActiveWindow.WINDOWSTATE = 2
.ActiveWorkbook.SaveAs Filename:="lcFile", FileFormat:=xlExcel9795,;
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False,;
CreateBackup:=False
мне пишут "неверный синтаксис"...
Ratings: 0 negative/0 positive


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

On-line: 32 of63  (Гостей: 31)

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