Source: Microsoft Support
RAPID PUBLISHING
RAPID PUBLISHING ARTICLES PROVIDE INFORMATION DIRECTLY FROM WITHIN THE MICROSOFT SUPPORT ORGANIZATION. THE INFORMATION CONTAINED HEREIN IS CREATED IN RESPONSE TO EMERGING OR UNIQUE TOPICS, OR IS INTENDED SUPPLEMENT OTHER KNOWLEDGE BASE INFORMATION.
Action
You have a Microsoft Excel 2007 workbook (.XLSX). You want to import data from it into a Microsoft Visual FoxPro (VFP) table using VFP.
Resolution
There are a number of ways of accomplishing this task:
1. Export the Excel sheet(s) as comma delimited files (.CSV) and use the IMPORT command or the Import Wizard inside VFP to import the file(s).
2. Write custom VFP OLE automation code to automate Excel and extract the data to VFP.
3. Use the Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb) ODBC driver included with the 2007 Office System Driver: Data Connectivity Components package to access and extract data from the Excel workbook, either through a VFP Remote View or programmatically, as in the following sample code:
*————————————
* AUTHOR: Trevor Hancock
* CREATED: 02/15/08 04:55:31 PM
* ABSTRACT: Code demonstrates how to connect to
* and extract data from an Excel 2007 Workbook
* using the «Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)»
* from the 2007 Office System Driver: Data Connectivity Components
*————————————
LOCAL lcXLBook AS STRING, lnSQLHand AS INTEGER, ;
lcSQLCmd AS STRING, lnSuccess AS INTEGER, ;
lcConnstr AS STRING
CLEAR
lcXLBook = [C:SampleWorkbook.xlsx]
lcConnstr = [Driver=] + ;
[{Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};] + ;
[DBQ=] + lcXLBook
IF !FILE( lcXLBook )
? [Excel file not found]
RETURN .F.
ENDIF
*— Attempt a connection to the .XLSX WorkBook.
*— NOTE: If the specified workbook is not found,
*— it will be created by this driver! You cannot rely on a
*— connection failure — it will never fail. Ergo, success
*— is not checked here. Used FILE() instead.
lnSQLHand = SQLSTRINGCONNECT( lcConnstr )
*— Connect successful if we are here. Extract data…
lcSQLCmd = [Select * FROM «Sheet1$»]
lnSuccess = SQLEXEC( lnSQLHand, lcSQLCmd, [xlResults] )
? [SQL Cmd Success:], IIF( lnSuccess > 0, ‘Good!’, ‘Failed’ )
IF lnSuccess < 0
LOCAL ARRAY laErr[1]
AERROR( laErr )
? laErr(3)
SQLDISCONNECT( lnSQLHand )
RETURN .F.
ENDIF
*— Show the results
SELECT xlResults
BROWSE NOWAIT
SQLDISCONNECT( lnSQLHand )
DISCLAIMER
MICROSOFT AND/OR ITS SUPPLIERS MAKE NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY, RELIABILITY OR ACCURACY OF THE INFORMATION CONTAINED IN THE DOCUMENTS AND RELATED GRAPHICS PUBLISHED ON THIS WEBSITE (THE “MATERIALS”) FOR ANY PURPOSE. THE MATERIALS MAY INCLUDE TECHNICAL INACCURACIES OR TYPOGRAPHICAL ERRORS AND MAY BE REVISED AT ANY TIME WITHOUT NOTICE.
TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW, MICROSOFT AND/OR ITS SUPPLIERS DISCLAIM AND EXCLUDE ALL REPRESENTATIONS, WARRANTIES, AND CONDITIONS WHETHER EXPRESS, IMPLIED OR STATUTORY, INCLUDING BUT NOT LIMITED TO REPRESENTATIONS, WARRANTIES, OR CONDITIONS OF TITLE, NON INFRINGEMENT, SATISFACTORY CONDITION OR QUALITY, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE, WITH RESPECT TO THE MATERIALS.
Need more help?
title | description | author | ms.author | ms.date | ms.service | ms.subservice | ms.topic | helpviewer_keywords | ||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
Accessing a Visual FoxPro Data Source from Microsoft Excel |
Accessing a Visual FoxPro Data Source from Microsoft Excel |
David-Engel |
v-davidengel |
01/19/2017 |
sql |
connectivity |
conceptual |
|
Accessing a Visual FoxPro Data Source from Microsoft Excel
If you have Microsoft Query installed, you can create a data source in Microsoft Excel that connects to Visual FoxPro data.
To access Visual FoxPro data from Microsoft Excel
-
Open a Microsoft Excel spreadsheet.
-
From the Data menu, choose Get External Data. Microsoft Query opens.
-
In the Select Data Source dialog box, click Other.
-
In the ODBC Data Sources dialog box, click New.
-
In the Add Data Source dialog box, select Microsoft Visual FoxPro Driver from the Installed ODBC Drivers list box and click OK.
-
In the ODBC Visual FoxPro Setup dialog box, enter the data source name, select the Database type, enter the path to the database or directory, and click OK.
The new data source name is displayed in the Enter Data Source text box of the ODBC Data Sources dialog box.
-
Click OK.
The new data source name is selected in the Available Data Sources text box of the Select Data Source dialog box.
-
Click Use.
You can now add tables to the open query. For more information about building a query, see Importing Data into Microsoft Excel from a Visual FoxPro Database.
- Remove From My Forums
-
Question
-
Hi Guys,
I am trying to import data from a Excel Sheet into a VFP 9.0 table.
Excel File I have saved in Excel ver 5.0
SELECT uploadfile &&Table for importing the Excel data
MyFile = GETFILE(«Excel *.xls:XLS»,»Import the excel file:»,»Import»,0,»Choose the file to import»)
IF .NOT. EMPTY(MyFile)
APPEND FROM MyFile TYPE XL5
ENDIFI keep on getting «File doesnt exist» error.
Thanks in advance !
-
Edited by
Wednesday, April 26, 2017 12:13 PM
-
Edited by
Answers
-
July If your file or directory contain a space or spaces ... your command won't work APPEND FROM MyFile TYPE XL5 You have to replace it for APPEND FROM (MyFile) TYPE XL5 your variable between parenthesis
-
Edited by
Benny Gabel
Thursday, April 27, 2017 3:10 AM -
Marked as answer by
July Derek
Thursday, April 27, 2017 3:42 AM
-
Edited by
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS
Contact US
Thanks. We have received your request and will respond promptly.
Log In
Come Join Us!
Are you a
Computer / IT professional?
Join Tek-Tips Forums!
- Talk With Other Members
- Be Notified Of Responses
To Your Posts - Keyword Search
- One-Click Access To Your
Favorite Forums - Automated Signatures
On Your Posts - Best Of All, It’s Free!
*Tek-Tips’s functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.
Posting Guidelines
Promoting, selling, recruiting, coursework and thesis posting is forbidden.
Students Click Here
Import excel sheet to foxpro table?Import excel sheet to foxpro table?(OP) 28 Jun 12 14:32 Hi, I want to import data from excel file into a vfp table. I tried with IMPORT command but it does not work… here is the code i use: CODE —>MyFile = GETFILE("Excel *.xls:XLS","Import the excel file:","Import",0,"Choose the file to import") IF NOT EMPTY(MyFile) THEN IMPORT FROM JUSTFNAME(MyFile) TYPE XL8 && imports the XLS into a DBF ENDIF Note: for the tests the excel file is in the application root folder. At first i received the following error message: «Microsoft Excel file format is invalid.» I tought i was probably because the excel was in excel 2007 and this format is not supported by vfp… then i saved it in excel 97-2003 format. Now it seems to be working for 10 seconds and then it gives me this message: «Microsoft Visual FoxPro 9.0 SP2 has stopped working Im out of ideas… any clue? Red Flag SubmittedThank you for helping keep Tek-Tips Forums free from inappropriate posts. |
Join Tek-Tips® Today!
Join your peers on the Internet’s largest technical computer professional community.
It’s easy to join and it’s free.
Here’s Why Members Love Tek-Tips Forums:
- Talk To Other Members
- Notification Of Responses To Questions
- Favorite Forums One Click Access
- Keyword Search Of All Posts, And More…
Register now while it’s still free!
Already a member? Close this window and log in.
Join Us Close
Воспользуемся
механизмом OLE-контейнеров
для связи с такими объектами, как
документыWORD,EXCELи другими приложениямиFoxPro.
Простейший пример имеет такой вид:
Ole=CREATEOBJECT(“EXCEL.Application”)
Ole.WorkBooks.Add
Ole.Visible=.T.
Если выполнить
эту группу команд, то откроется окно
Excel. Для загрузки конкретного
документаExcelилиWordориентируемся на следующий программный
код, ассоциированный с кнопкой.
Define ClassWordOb As
OleControl
OleClass=”WordDocument”
DocumentFile=”d:msdevreview.doc”
EndDefine
Define Class cmdbtn As
CommandButton
Caption=”Quit”
Cancel=.T.
Left=125
Top=210
Height=25
Procedure Click
CLEAR EVENTS
EndDefine
Procedure
g4proc
myfrm=CREATEOBJECT(“form”)
myfrm.Closable=.F.
myfrm.AddObject(“cmdCom”,”cmdbtn”)
myfrm.AddObject(“oleDb”,”WordOb”)
myfrm.cmdCom.Visible=.T.
myfrm.oleOb.Height=50
myfrm.Show
myfrm.oleOb.Visible=.T.
myfrm.oleOb.DoVerb(-2)
READ EVENTS
Endproc
Данный
программный код размещен в файле g4.prg.
В начале объявлены два класса: один –
для описания кнопки, второй – для
описанияOle-объекта.
Описание классаOle-объекта
содержит установку двух свойств:
OleClass=”WordDocument”
DocumentFile=”d:msdevreview.doc”
Первое свойство
– OleClass– определяет
базовый классOle-объекта.
Второе свойствоDocumentFileуказывает место размещения документаWord. В тексте программного
файлаg4.prgсначала создается форма:myfrm=CREATEOBJECT(“form”).
Затем к ней добавляются кнопка иOle-объект. Например,Ole-объект добавляется с
помощью командыmyfrm.AddObject(“oleDb”,”WordOb”).
Первый операнд этой команды представляет
программное имяOle-объекта,
второй – имя класса. Команда
myfrm.oleOb.Visible=.T.
делает сам объектoleObвидимым. Командаmyfrm.oleOb.DoVerb(-2)
открывает документWordвOle-объекте с возможностью
редактирования документа. На это
указывает значение –2 в операнде команды.
Если указать значение –1, то документ
будет открыт, но редактировать его
нельзя.
Еще более
интересным является вариант вызова
шаблона WORDи заполнения
его полей изFoxpro. Для
иллюстрации разместим на форме кнопку
и запрограммируем ее следующим образом:
Procedure progword
Parameters fform
oleOb=CreateObject(«Word.Application»)
oleOb.Documents.Add(«d:msdevworktemp.dot»)
oleOb.Documents(1).FormFields(«f1″).Range=»German»
oleOb.ActiveDocument.FormFields(«f2″).Range=»46»
oleOb.Visible=.t.
Read EVENTS
return
endproc
В этом примере
сначала создаем объект Word.Application.
Этот объект не содержит никаких
документов. Добавляем документ командой:
oleOb.Documents.Add(«d:msdevworktemp.dot»)
В данном
примере в объект добавляем шаблон WORD(шаблоны имеют расширение .dot.
В шаблоне размещены два текстовых поля
с именамиf1,f2
Для того чтобы разместить в шаблоне
текстовые поля, нужно выбрать в менюWORDпунктView,
а затем подпунктFORMS.
Откроется панель с элементами. Текстовому
полю соответствует элементab|.
Разместите элемент в окне шаблона.
Активизируйте контекстное меню щелчком
правой кнопки мыши и выберите п.Properties(Свойства). Установите имя элемента
равнымf1 илиf2.
Сохраните шаблон. Наш шаблон сохранен
по адресуd:msdevworktemp.dot).
Результат выполнения программы показан
на рис.2.43
Рис.2.43
Теперь
рассмотрим вызов из Foxproдругого приложенияFoxPro.
В действительности, описываемый способ
применим для вызова приложенийFoxpro,
главным образом, из других сред, например,ExcelилиVisualBasic. Итак, разместим на
форме кнопку и запрограммируем ее таким
образом:
c=50
Ole=CREATEOBJECT(«VisualFoxpro.Application»)
Ole.DoCmd(«Set Path To
d:ProgramsKKRMicroSoft Visual StudioVfp98»)
Ole.DoCmd(«Open DataBase
db3»)
Ole.DoCmd(«use persons in a»)
Ole.DoCmd(«Select fio from
persons where age=»+str(c))
Ole.DoCmd(«MessageBox(fio)»)
Ole.DoCmd(«Set Path To «)
Сначала
создаем объект VisualFoxpro.Application:
Ole=CREATEOBJECT(«VisualFoxpro.Application»)
Последующее
выполнение команд в созданном приложении
реализуется с помощью инструкции
Ole.DoCmd(текст_команды)
Обращаем
внимание на то, что Oleв
этом примере представляет параллельно
выполняющееся приложение, связь с
которым может быть осуществлена только
через таблицу (в тексте этой связи нет).
Нетрудно понять, что в объектеOleвыполняется подключение базы с именемdb3 и загрузка таблицы с
именемpersons. Затем
выполняется запрос
Ole.DoCmd(«Select fio from
persons where age=»+str(c))
На выборку
информации из таблицы. В результате
выдается сообщение с выбранной из
таблицы фамилией. Заметим, что команда
Browseпри выполнении из
инструкцииDoCmdтаблицу
на экран не выводит. Теперь реализуем
вариант с передачей результата из
другого приложения через таблицу. Он
имеет такое
представление.
Ole=CREATEOBJECT(«VisualFoxpro.Application»)
c=50
Ole.DoCmd(«Set Path To
d:ProgramsKKRMicroSoft Visual StudioVfp98»)
Ole.DoCmd(«Open DataBase
db3»)
Ole.DoCmd(«use persons in a»)
Ole.DoCmd(«Select fio from
persons where age=»+str(c) +» TO FILE zza»)
Ole.DoCmd(«MessageBox(fio)»)
Ole.DoCmd(«Close all»)
Теперь
результат выборки
по команде
Ole.DoCmd(«Select fio from
persons where age=»+str(c) +» TO FILE zza»)
направляется
в файл zza.txt( это текстовый файл, которому система
присвоит именно такое расширение). Важно
проследить, чтобы запись в файл выполнялась
в текущий каталог (!). Прочитать содержимое
текстового файла в текущую таблицу
можно следующим образом.
SET Compatible ON
if!FILE(“zza.txt”)
messageBox(“No File found”)
else
z= FSIZE(“zza.txt”)
gf=FOPEN(“zza.txt”)
cString=FREAD(gf,z)
n=AT(“FIO”,cString)
cS=substr(cString,n+3+1,LEN(cString))
item=””
k=1
do while(k>0)
k=AT(chr(13),cS)
item=substr(cS,1,k-1)
if!Len(alltrim(item))=0
messagebox(item)
endif
cS=substr(cS,k+1,Len(cS))
enddo
messageBox(“end of file”)
FCLOSE(gf)
endif
Строка SET
Compatible ONнеобходима для правильного вычисления
размера файла с помощью функцииFSIZE.
Если данную строку не использовать, то
по умолчанию при вычислении функции
FSIZE операнд рассматривается не как имя
файла, а как имя поля или таблицы(!), при
этом функция будет возвращать значение
0. Командаz=FSIZE(“zza.txt”)
присваивает переменной z значение
размера файла zza.txt в байтах. Далее
открывается данный файл:gf=FOPEN(“zza.txt”).
При успешном открытии переменнаяgfполучает номер заголовка файла, при
неудачном – 0. Считывание содержимого
файла выполняет командаcString=FREAD(gf,z).
Содержимое заносится в строковую
переменную cString. Аргументами командыFREAD(gf,z)
являются заголовок файла gf и число
считываемых байтов – z. Учитывая, что
содержимое файла zza.txt представляет
собой набор строк, причем первой строкой
является название поля FIO, записанное
заглавными буквами, командаn=AT(“FIO”,cString)
определяет номер позиции, с которого
слово FIO встречается первый раз в строке
cString. КомандаcS=substr(cString,n+3+1,LEN(cString))
заносит в переменную cS оставшуюся часть
этой строки, начиная с позиции, следующей
за словом FIO (3 – это число букв в слове
FIO, 1- смещение на следующую позицию за
словом FIO, n – номер позиции, с которой
слово FIO записано в строке cS). Далее
следует отметить, что слова в строке cS
отделены друг от друга символом перевода
каретки (символом перехода на новую
строку). Символ перевода каретки имеет
код 13, ему соответствует литера CHR(13).
CHR() – это функция,
возвращающая символ по его номеру ASCII.
Таким образом, команда
k=AT(chr(13),cS)
присваивает
переменной kномер позиции
ближайшего символа перевода каретки в
словеcS. Это действие
выполняется в цикле do while до тех пор,
пока верно условие k>0 (т.е.kотыскивается в оставшейся части строки).
Команда
item=substr(cS,1,k-1)
присваивает
переменной item значение поля FIOдля очередной записи, помещенной в файл
zza.txt. Нетрудно понять, что значение item
берется из начала строки cS до ближайшего
символа перевода каретки, свидетельсвующего
о начале нового значения поля FIO.
Объяснения
оставшегося кусочка текста программы,
вероятно. Не требуется ввиду очевидности
его содержания.
Следующая
программа заносит данные из таблицы
FoxProв листExcel.
oleOb=CREATEOBJECT(“Excel.Sheet”)
oleOb.Application.Visible=.T.
use persons
row=1
for i=1 to RecCount()
row=row+1
oleOb.Cells(nRow,1).Value=fio
skip
endfor
oleOb.Application.quit
release oleOb
Занесение
данных выполняется в цикле по числу
записей в таблице persons. Команда установки
значения в ячейку листа Excel:
oleOb.Cells(nRow,1).Value=fio
Здесь
идентификатор oleOb играет роль листа
Excel. Сама же конструкция oleOb.Cells(nRow,1)
адресует ячейку листа на пересечении
строки nRow и столбца 1. Значение ячейки
берется через свойство Value (заметим –
не обязательное в данном контексте).
Вообще говоря, запись oleOb.Cells(nRow,1) относится
к языку Visual Basic For Applications (VBA), на котором
программируют приложения Word, Excel,Access.
После занесения значений в лист Excel
выполняется выход из Excel:
oleOb.Application.quit
и уничтожение
объектной переменной oleObиз памяти:
releaseoleOb.
Команду
releaseследует запомнить.
Она используется не только для удаления
ййй памяти объектныхъ переменных, но и
форм, и элементов визуального интерфейса.