:: Visual Foxpro, Foxpro for DOS
замена команды Import from xls
glaz58
Автор

Сообщений: 812
Откуда: Воронеж
Дата регистрации: 09.02.2008
Уважаемые знатоки! Даже VFP9 импортирует из Excel-таблицы только из версии Excel5.0/95. Даёшь ему Excel97/2003 и уже invalid format. Как с помощью CreateObject('Excel.Application') сделать импорт из таблицы Excel?


------------------
Александр Глазьев, Воронеж
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
Лучше так

store SQLSTRINGCONNECT(;
"DRIVER={Microsoft Excel Driver (*.xls)};" + ;
"FIL=Excel 2007;" + ;
"DefaultDir=С:\...\;" + ;
"DBQ=С:\...\МойФайл.xls");
TO gn
?SQLexec(gn, 'select * from "Лист1$"') && в зависимости от локали
?SQLexec(gn, 'select * from "Sheet 1$"')


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




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

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
glaz58
Уважаемые знатоки! Даже VFP9 импортирует из Excel-таблицы только из версии Excel5.0/95. Даёшь ему Excel97/2003 и уже invalid format. Как с помощью CreateObject('Excel.Application') сделать импорт из таблицы Excel?
Не совсем так. Help:
XL8 [SHEET cSheetName]
Задайте XL8, чтобы импортировать данные из Microsoft Excel 97.
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Влад Колосов

Сообщений: 22664
Откуда: Ростов-на-Дону
Дата регистрации: 05.05.2005
Дело в том, что
Цитата:
XL8 [SHEET cSheetName]
Задайте XL8, чтобы импортировать данные из Microsoft Excel 97.
перестало работать с какого-то обновления windows или office.


------------------
Совершенство - это не тогда, когда нельзя
ничего прибавить, а тогда, когда нечего убавить.




Исправлено 2 раз(а). Последнее : Влад Колосов, 22.10.10 15:32
Ratings: 0 negative/1 positive
Re: замена команды Import from xls
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
И ещё добавок, доступ через провайдер позволяет на стадии выборки преобразовать типы данных к нужному формату.
forum.foxclub.ru


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)




Исправлено 1 раз(а). Последнее : PaulWist, 22.10.10 15:59
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Dims

Сообщений: 155
Откуда: Tallinn
Дата регистрации: 21.02.2008
Файл *.xlsx от Офиса 2003 представляет из себя запакованный набор XML. При желании можно парсить и XML
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
glaz58
Автор

Сообщений: 812
Откуда: Воронеж
Дата регистрации: 09.02.2008
Я даю следующую команду:
Import From &xlsname Type Xl8 Sheet ""
и на Excel97/2003 ругается. Если ту же таблицу сохранить в формате Excel5.0/95, то работает.

------------------
Александр Глазьев, Воронеж
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
PaulWist
Лучше так
store SQLSTRINGCONNECT(;
"DRIVER={Microsoft Excel Driver (*.xls)};" + ;
"FIL=Excel 2007;" + ;
"DefaultDir=С:\...\;" + ;
"DBQ=С:\...\МойФайл.xls");
TO gn
?SQLexec(gn, 'select * from "Лист1$"') && в зависимости от локали
?SQLexec(gn, 'select * from "Sheet 1$"')
Подскажите, можно ли вызвать окно выбора файла? или имя файла нужно прописывать?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
alextash

Сообщений: 2281
Откуда: НСК
Дата регистрации: 03.05.2006
lcFile = GETFILE()
IF EMPTY(lcFile) THEN
RETURN
ENDIF
store SQLSTRINGCONNECT(;
"DRIVER={Microsoft Excel Driver (*.xls)};" + ;
"FIL=Excel 2007;" + ;
"DefaultDir=С:\...\;" + ;
"DBQ="+lcFile);
TO gn
?SQLexec(gn, 'select * from "Лист1$"') && в зависимости от локали
?SQLexec(gn, 'select * from "Sheet 1$"')
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
Все хорошо работает, вот только не "видит" цифровые данные. Если данные в поле начинаются с буквы - все хорошо, а когда одни цифры (код товара по каталогу) - в ячейках нулл.
Что делать?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
alextash

Сообщений: 2281
Откуда: НСК
Дата регистрации: 03.05.2006
LOCAL XLApp, XLSheet, lnPer
XLApp = GETOBJECT('', 'excel.application')
XLApp.VISIBLE= .F.
XLApp.WorkBooks.ADD(lcFile)
XLApp.ActiveWindow.WINDOWSTATE = 2
XLSheet= XLApp.ActiveSheet
XLSheet.RANGE("A1").Select
FOR lnPer = 1 TO .UsedRange.Rows.Count -1
.RANGE("A" + ALLTRIM(STR(lnPer + 1))).value = lnPer
NEXT
XLApp.quit
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Спасибо за помощь
Но что-то я не то делаю.
Исходный файл выбирается, выходной файл создается.... но пишет ошибку
Expession is not valid outside of WITH/ENDWITH
на строке
FOR InPer = 1.....



Исправлено 3 раз(а). Последнее : Olegv, 10.11.11 21:03
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
alextash

Сообщений: 2281
Откуда: НСК
Дата регистрации: 03.05.2006
было вырвано с корнем, поэтому неизбежные ошибки синтаксиса
LOCAL XLApp, XLSheet, lnPer
XLApp = GETOBJECT('', 'excel.application')
XLApp.VISIBLE= .F.
XLApp.WorkBooks.ADD(lcFile)
XLApp.ActiveWindow.WINDOWSTATE = 2
XLSheet= XLApp.ActiveSheet
XLSheet.RANGE("A1").Select
FOR lnPer = 1 TO .UsedRange.Rows.Count -1
XLSheet.RANGE("A" + ALLTRIM(STR(lnPer + 1))).value = lnPer
NEXT
XLApp.quit
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Igor VS

Сообщений: 2193
Откуда: Харьков
Дата регистрации: 26.01.2011
alextash
FOR lnPer = 1 TO .UsedRange.Rows.Count -1

И еще здесь


------------------
Трехколесный пароход




Исправлено 1 раз(а). Последнее : Igor VS, 11.11.11 11:13
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
FOR lnPer = 1 TO XLSheet.UsedRange.Rows.Count -1
XLSheet.RANGE("A" + ALLTRIM(STR(lnPer + 1))).value = lnPer
NEXT

Вот так заработало. Спасибо. Но ставит просто цифры.
И результирующий файл не открыть - мигнет и все?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
XAndy

Сообщений: 3803
Откуда: Киев
Дата регистрации: 05.02.2004
Дык Вы ж его сами закрываете командой
XLApp.quit
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Я неправильно выразился - уже после закрытия Фокса пытаюсь открыть файл Экселем.
Впрочем, установил
XLApp.VISIBLE= .T.
и файл открывается.
Но вот в столбец просто записываются 1,2,3 и т.д.
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
akvvohinc

Сообщений: 4203
Откуда: Москва
Дата регистрации: 11.11.2008
Цитата:
Но вот в столбец просто записываются 1,2,3 и т.д.
Они не сами "просто записываются".
Именно вы их туда записываете:
XLSheet.RANGE("A" + ALLTRIM(STR(lnPer + 1))).value = lnPer



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

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Да, я понимаю, но проблема у меня в том, что в этом столбце у меня данные по товару. А именно код из каталога поставщика. И этот код бывает буквенно-цифровой или только цифровой. Буквенно-цифровой копируется отлично, где-бы ни стояла буква, а цифровой игнорируется. Например, разъемы есть GDS4756839093 и просто 0944675858000.
И что делать?
Проблема в этом коде:
lcFile = GETFILE()
IF EMPTY(lcFile) THEN
RETURN
ENDIF
store SQLSTRINGCONNECT(;
"DRIVER={Microsoft Excel Driver (*.xls)};" + ;
"FIL=Excel 2007;" + ;
"DefaultDir=С:\...\;" + ;
"DBQ="+lcFile);
TO gn
?SQLexec(gn, 'select * from "Лист1$"')
Ratings: 0 negative/0 positive


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

On-line: 35 MikhsR hvh2007  (Гостей: 33)

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