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

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Вот такая конструкция заработала:
#DEFINE Excel5 39
lcFile = GETFILE()
IF EMPTY(lcFile) THEN
RETURN
ENDIF
?lcfile
Local loExcel
loExcel=createobject("Excel.Application")
With loExcel
.workbooks.open("lcFile")
.ActiveWorkbook.SaveAs (lcFile,Excel5,"","",.f.,.f.)
.ActiveWorkbook.close(.f.)
EndWith
теперь вопрос:
Т.к. файл уже существует, то эксель просит подтвердить. Где написать ему "Yes"?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
akvvohinc

Сообщений: 4212
Откуда: Москва
Дата регистрации: 11.11.2008
Почему бы просто не написать:
DELETE FILE (lcFile)
перед сохранением?
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
alextash

Сообщений: 2281
Откуда: НСК
Дата регистрации: 03.05.2006
XLApp.DisplayAlerts = .F.
XLApp.ActiveWorkbook.SaveAs(lcFile, 1)
XLApp.DisplayAlerts = .T.



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

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Вот, что в итоге получилось:
------------------
#DEFINE Excel5 39 && кроме кода 39 ничего у меня не заработало исходные файлы имеют код 56
lcFile = GETFILE('xls')
IF EMPTY(lcFile) THEN
RETURN
ENDIF
lcfile2='D:\tmpExcel.xls' && обнаружил, что Эксель 5 не любит длинные имена файлов - поэтому
*потребовался промежуточный файл
Local loExcel
loExcel=createobject("Excel.Application")
With loExcel
.workbooks.open(lcFile) && кавычки не нужны
lofileformat1=.ActiveWorkbook.fileformat && это если кому интересно посмотреть в каком
?lofileformat1 && формате исходный файл
.ActiveWorkbook.SaveAs (lcFile2,Excel5,"","",.f.,.f.) && другие комбинации не работают
lofileformat=.ActiveWorkbook.fileformat && а здесь смотрим код выходного файла
?lofileformat
.ActiveWorkbook.close(.f.)
EndWith
filenamespxls='D:'+'\BDV1_DATA\BDV1_KD\bdv1kdspxls' && здесь я готовлю файл, куда будет
ON ERROR MESSAGEBOX("Файл уже открыт",4) && переписана таблица эксель
USE &filenamespxls IN 0 EXCLUSIVE
ON ERROR
SELECT bdv1kdspxls
KEYBOARD 'Y'
ZAP
ON ERROR MESSAGEBOX("Файл д.б. сохранен в версии 5/95",4) && это если что-нибудь не получится
SELECT bdv1kdspxls
APPEND FROM &lcFile2 TYPE XL8
ON ERROR
DELETE FILE &lcfile2 && удаляю вспомогательный файл
BROWSE && смотрим, что получили
---------
Поиском лучше пореже пользоваться - толку нуль, а читать болтовню трехлетней давности скучно.
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

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

Сообщений: 9978
Откуда: Николаев
Дата регистрации: 24.05.2002
Olegv
....
KEYBOARD 'Y'
ZAP
....
ужос


------------------
-
«свидомые украинцы озабочены не столько созданием украинской культуры, сколько уничтожением русской»
-
Олесь Бузина
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Igor VS

Сообщений: 2193
Откуда: Харьков
Дата регистрации: 26.01.2011
Olegv
Поиском лучше пореже пользоваться - толку нуль, а читать болтовню трехлетней давности скучно.

Зато ваш код читать очень весело.


------------------
Трехколесный пароход
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Igor VS
alextash
FOR lnPer = 1 TO .UsedRange.Rows.Count -1

И еще здесь
Можете даже поржать...
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Olegv

Сообщений: 69
Откуда: Санкт-Петербург
Дата регистрации: 29.11.2007
Mitchman
Olegv
....
KEYBOARD 'Y'
ZAP
....
ужос
И вот такое в поиске тоже окажется....
Всем удачи, веселья, досвидос!
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Baga

Сообщений: 535
Откуда: г. Махачкала
Дата регистрации: 03.06.2006
Olegv
Да, я понимаю, но проблема у меня в том, что в этом столбце у меня данные по товару. А именно код из каталога поставщика. И этот код бывает буквенно-цифровой или только цифровой. Буквенно-цифровой копируется отлично, где-бы ни стояла буква, а цифровой игнорируется.

Такая же проблема была и у меня. Поэтому я давно отказался от непосредственного импорта в VFP.
Я делаю так:
cNameXLSFile=GETFILE('XLS','Файл XLS','Выбрать',0,'Выберите файл учета поступлений')
IF EMPTY(cNameXLSFile)
WAIT 'Действие отменено пользователем' WINDOW AT 20,80 NOWAIT
RETURN
ENDIF
SET SAFETY OFF
SET ESCAPE ON
SET TALK OFF
SET EXACT ON
SET NEAR OFF
*"Номер строки" "Номер телефона" "Дата платежа" "Сумма платежа" "Тип платежа"
CREATE CURSOR tmp(n_stroki N(5,0), fon C(10), date_plat D, summavzn N(9,2),sposob C(80))
XLRelek1=GetObject("","Excel.Application")
XLRelek=XLRelek1.Workbooks.open((cNameXLSFile))
XLRelek.application.visible=.t. &&[1]
&& [1]Эту команду можно и пропустить, но если она присутствует Excel открывается и,
*если файл достаточно большой можно смотреть, как курсор прыгает по ячейкам
XLSheet1=XLRelek.Sheets(2) &&Второй лист. Можно выбрать любой.
XLSheet1.select
ii=4 && Пропускаю шапку файла Excel
XLSheet1.Cells(ii,1).select
DO WHILE !EMPTY(XLSheet1.Cells(ii,1).value)
STORE '' to mfon, mtipplat
STORE 0 TO msumplat
store{} to mdata
XLSheet1.Cells(ii,1).select &&[1]
mfon=XLSheet1.Cells(ii,1).value
IF TYPE("mfon")="N"
mfon=ALLTRIM(STR(mfon))
ENDIF
mfon=ALLTRIM(mfon)
XLSheet1.Cells(ii,2).select &&[1]
mdata=XLSheet1.Cells(ii,2).value
IF TYPE("mdata")="C"
mdata=CTOD(ALLTRIM(mdata))
ENDIF
XLSheet1.Cells(ii,3).select &&[1]
mtipplat=ALLTRIM(XLSheet1.Cells(ii,3).value)
XLSheet1.Cells(ii,4).select &&[1]
msumplat=XLSheet1.Cells(ii,4).value
IF TYPE("msumplat")="C"
msumplat=VAL(ALLTRIM(msumplat))
ENDIF
SELECT tmp
APPEND BLANK
REPLACE n_stroki WITH ii, fon WITH mfon, date_plat WITH mdata, summavzn WITH msumplat, sposob WITH mtipplat
ii=ii+1
ENDDO
XLRelek.application.quit &&Закрываю. Можете и не закрывать для сверки
IF RECCOUNT('tmp')=0
MESSAGEBOX('В выбранном файле нет платежей.','Внимание!')
USE IN tmp
ENDIF
Работает со всеми Офисами, включая 2010-й
Конечно, все это можно сделать гораздо более коротким кодом, но это дело вкуса.


------------------
Багавудин Мирзаев
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Igor VS

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

И еще здесь
Можете даже поржать...

Ржут лошади и вы вместе с ними.

PS.
Видимо благородный дон считает недостойным себя копаться в разговорах всякой черни. Типа - пусть другие сделают всю грязную работу, а ему подадут готовый ответ.


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




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

Сообщений: 34580
Дата регистрации: 28.05.2002
Baga
Конечно, все это можно сделать гораздо более коротким кодом, но это дело вкуса.
Как сказать. Когда импорт будет работать 10-20 минут вместо 1 секунды то придётся задуматься о чистоте кода.
Я выше приводил пример, как забирать данные на порядки быстрее - без абсолютно ненужных Select-ов, и не по 1 ячейке за раз, а сразу кучу (хоть вообще всё что есть на листе, если памяти хватает).


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

Сообщений: 5964
Дата регистрации: 23.03.2007
А кто-нибудь пробовал тупо парсить .xls на диске?
Вряд ли это востребовано, но все же. Разобрать формат нетрудно...
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Igor VS

Сообщений: 2193
Откуда: Харьков
Дата регистрации: 26.01.2011
medstrax
А кто-нибудь пробовал тупо парсить .xls на диске? Вряд ли это востребовано, но все же. Разобрать формат нетрудно...

Оно может разобрать и не трудно, но только сам Эксель справится с этим лучше. Тем более, что форматы файлов в разных версиях отличаются. Между какими-то версиями различия незначительные, между другими - кардинальные.
К тому же придется быть в роли постоянного догоняющего - отслеживая выход новых версий, проверяя совместимость кустарной логики с новыми форматами и дорабатывая ее при необходимости. Ото больше в жизни заняться не чем.


------------------
Трехколесный пароход
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
xls вряд-ли, а xlsx - вполне себе решаемо (в плане несложно). Надо на сайте Михаила Дроздова посмотреть - он то-ли вордовские, то-ли экселевские документы таким образом разбирал. Там то по сути XML внутрях...


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

Сообщений: 5964
Дата регистрации: 23.03.2007
ага, xlsx хорошо документирован, xls плохо, но разобрать не трудно, в сети доков весьма.
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
glaz58
Автор

Сообщений: 812
Откуда: Воронеж
Дата регистрации: 09.02.2008
При импорте из файла xl5 часть данных почему-то теряется в dbf, несмотря на то, что в экселе все данные кажутся на месте (MS Excel предупреждает при сохранении в формате xl5). Выход (для меня) нашёлся в Libre Office. Среди форматов для сохранения предлагает dbf. MS Excel почему-то "забыл", что есть такой формат.
Ratings: 0 negative/1 positive
Re: замена команды Import from xls
alextash

Сообщений: 2281
Откуда: НСК
Дата регистрации: 03.05.2006
с тех пор как Микрософт перестал поддерживать FoxPro.

Есть ещё формат csv.

А вообще легче забрать данные из Excel через программу.
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
glaz58
Автор

Сообщений: 812
Откуда: Воронеж
Дата регистрации: 09.02.2008
Для меня оказалось легче сохранить в dbf с помощью Libre Office. Как-то ни одна программа не заработала. Они оказались сложными при запуске. Программа чтения из xlsx->dbf должна быть простая: на входе имя файла xlsx на выходе таблица dbf. Если кому-то нужна сложная интерпретация, это другое дело. Тема называется: "Замена команды импорта из xls".
Ratings: 0 negative/0 positive
Re: замена команды Import from xls
ABB

Сообщений: 149
Откуда: Санкт-Петербург
Дата регистрации: 21.10.2006
praisachion.blogspot.com
Ratings: 0 negative/0 positive


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

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

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