:: Visual Foxpro, Foxpro for DOS
Падает VFP при попытке импорта XLS
MiD_E34
Автор

Сообщений: 65
Дата регистрации: 26.01.2006
VFP 9.0: при импорте (Append from...) совсем нетяжелого файла в формате Excel 97 падает намертво. Если файл-исходник сохранить как xls 5й версии, то процесс заканчивается нормально. Причем, насколько помню, пару лет назад работало нормально и с версией 97-2003. Возможно ли, что проблема связана с установкой W10? Или еще какие идеи?
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
dimuhametov

Сообщений: 1562
Откуда: Костанай
Дата регистрации: 01.11.2008
forum.foxclub.ru


------------------
Незнание делает жизнь такой интересной.
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Через OLEDB не работал, но обычным способом через автоматизацию самого экселя (OLE) на win10 проблем нет, проверено на практике, экспорт в Excel97/2003/2016 (разные версии на разных машинах)



Исправлено 2 раз(а). Последнее : AndyNigmatec, 27.08.19 19:18
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
Vedmak

Сообщений: 5967
Откуда: CiTY
Дата регистрации: 30.10.2003
AndyNigmatec
Через OLEDB не работал, но обычным способом через автоматизацию самого экселя (OLE) на win10 проблем нет, проверено на практике, экспорт в Excel97/2003/2016 (разные версии на разных машинах)

+1. Медленно, но надежно.


------------------
Говорить стоит лишь для тех, кто слушает.
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Vedmak
+1. Медленно, но надежно.
- ежели выводить через массив - то достаточно шустро (ну если комп конечно не совсем дрова))))
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
MiD_E34
Автор

Сообщений: 65
Дата регистрации: 26.01.2006
Спасибо всем ответившим.
Возможно я неудачно описал проблему. Мне нужно импортировать таблицу из Excel в таблицу VFP. Пустая таблица VFP повторяет структуру эксел.
Пока у меня число записей невелико, но оно растет и скоро превысит предел формата Excel5, а попытка загрузить из Excel 97-2003 ведет к краху VFP. Выше же советы идут на то, что бы заполнить Excel из VFP
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Ну почему же, таким же образом через OLE механизм и импортирую, причем ежели импортировать уже структуированные данные - то можно через массив что весьма шустро работает...

вот для наглядного примера выдрал кусок (именно выдрал - для запускабельного нужно чутка переделать):


причем версия MS-офиса значения не имеет - лишь бы та что установлена заведомо открывала нужную эксельку.

И да, это один из минусов OLE - сам офис (Excel) должен быть установлен на компе



Исправлено 2 раз(а). Последнее : AndyNigmatec, 28.08.19 14:22
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
У меня не было такой проблемы. И я что-то забыл.

Есть 2 конкурирующих способов по быстродействию
1. Читать в Фокс массивом, это проще, а я не могу быстро объяснить подробно. Это не больше, чем подсказка
FUNCTION aGetValues
LPARAMETERS laArray, loSheet, lcRange
LOCAL lnLastCol, lnLastLine
IF TYPE('loSheet.Name')#'C'
m.loSheet=THIS.ActiveSheet()
ENDIF
IF EMPTY(m.lcRange)
STORE 0 TO m.lnLastLine, m.lnLastCol
THIS.LastCell( m.loSheet, @m.lnLastLine, @m.lnLastCol)
m.lcRange = 'A1:' + Range_N2C(m.lnLastLine,m.lnLastCol)
ENDIF
m.laArray=m.loSheet.RANGE(m.lcRange).VALUE

2. Читать по передаче в _Cliptext



Исправлено 1 раз(а). Последнее : Ydin, 28.08.19 12:49
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
MiD_E34
Автор

Сообщений: 65
Дата регистрации: 26.01.2006
Да, ступил, спасибо. Сейчас буду пробовать
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Вот вам простой запускабельный пример импорта, тестовый файл из которого заточен этот пример прикрепил к сообщению
(всяческие проверки и TRY-и опустил ессно - это по вкусу добавляется в рассол))))

lcFileExcel='C:\temp\test.xls'
USE IN SELECT('cTest0')
IF FILE(lcFileExcel)
loExcel=CREATEOBJECT("EXCEL.APPLICATION")
loExcel.Visible=.F.
loExcel.EnableEvents=.T.
loExcel.DisplayAlerts=.F.
loExcel.Workbooks.Open(lcFileExcel)
lcWbName=JUSTFNAME(lcFileExcel)
laData=loExcel.Workbooks(lcWbName).Sheets(1).UsedRange.Value
* Код - Название
SELECT 0
CREATE CURSOR cTest0 (lcode i, lname c(80))
APPEND FROM ARRAY laData
loExcel.Workbooks(lcWbName).Close(.F.)
loExcel.Quit()
IF USED('cTest0')
SELECT lcode, lname FROM cTest0 INTO CURSOR cTest READWRITE;
WHERE RECNO()>1
ENDIF
USE IN SELECT('cTest0')
ENDIF



Исправлено 2 раз(а). Последнее : AndyNigmatec, 28.08.19 14:34
Ratings: 0 negative/1 positive
Re: Падает VFP при попытке импорта XLS
MiD_E34
Автор

Сообщений: 65
Дата регистрации: 26.01.2006
AndyNigmatec
Вот вам простой запускабельный пример импорта, тестовый файл из которого заточен этот пример прикрепил к сообщению
(всяческие проверки и TRY-и опустил ессно - это по вкусу добавляется в рассол))))
Работает. Спасибо. Сейчас попробую на большом объеме данных....
40000 записей Excel97-2003 за 5 сек примерно импортировались. Уфф - проблема решена, спасибо!



Исправлено 1 раз(а). Последнее : MiD_E34, 28.08.19 17:25
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
AndyNigmatec

Сообщений: 1573
Откуда: Волгоград
Дата регистрации: 28.06.2015
Не за что )))
И это не проблема даже - стандартный способ, имеющий ряд минусов - самый главный из которых - необходимо наличие установленного офиса на машине.
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
Вообще, конечно, IMPORT/APPEND FROM должны работать и с excel 97 - там для того тип-опция XL8 предназначена, НО... Все эти импорты зашитые в систему крайне капризные, и могут ломаться буквально на пустом месте - то какую закорючку на краю листа пропустил, то какие фишечки более нового офиса пролезли в документ даже сохранённый "как эксель 97". Да и сам эксель 97 это уже нереальный антиквариат. Потому всё же лучше будет импортировать другими способами. Из нх помимо автоматизации самого экселя (о чём выше и писалось) можно предложить банальный экспорт данных в текстовый формат (разделённый запятими, табуляторами или ещё какой вариант) - это можно даже автоматизированно макросом делать, чтобы не пугать пользователя диалогом save as


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
of63

Сообщений: 25244
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
+ 50 баллов Игорю Королёву!
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
MiD_E34
Автор

Сообщений: 65
Дата регистрации: 26.01.2006
Igor Korolyov
Вообще, конечно, IMPORT/APPEND FROM должны работать и с excel 97
Вообще, решение, предложенное AndyNigmatec, работает с любыми версиями Офиса. У нас все машины с Офисом (разных версий - от 2010 до последней) и я не заморачиваюсь теперь с версиями импортируемого файла.
Ratings: 0 negative/0 positive
Re: Падает VFP при попытке импорта XLS
Ydin

Сообщений: 7648
Откуда: Киев
Дата регистрации: 16.12.2005
APPEND FROM ARRAY laData
Imho, от версии Офиса не зависит.
Только от содержимого массива laData
Ratings: 0 negative/0 positive


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

On-line: 42 (Гостей: 42)

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