Access excel in foxpro

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

FoxPro ODBC driver [ODBC], Excel

Visual FoxPro data [ODBC], Excel

Visual FoxPro data [ODBC], accessing

Visual FoxPro ODBC driver [ODBC], Excel

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

  1. Open a Microsoft Excel spreadsheet.

  2. From the Data menu, choose Get External Data. Microsoft Query opens.

  3. In the Select Data Source dialog box, click Other.

  4. In the ODBC Data Sources dialog box, click New.

  5. In the Add Data Source dialog box, select Microsoft Visual FoxPro Driver from the Installed ODBC Drivers list box and click OK.

  6. 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.

  7. Click OK.

    The new data source name is selected in the Available Data Sources text box of the Select Data Source dialog box.

  8. 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  
    ENDIF

    I keep on getting «File doesnt exist» error.

    Thanks in advance !

    • Edited by

      Wednesday, April 26, 2017 12:13 PM

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

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
A problem caused the program to stop working correctly. Windows will close the program and notify you if a solution is availiable.»

Im out of ideas… any clue?

Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

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:

  • Tek-Tips ForumsTalk 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следует запомнить.
Она используется не только для удаления
ййй памяти объектныхъ переменных, но и
форм, и элементов визуального интерфейса.

Понравилась статья? Поделить с друзьями:
  • Access excel from web
  • Access excel from sql server
  • Access database from excel file
  • Access data in excel vba
  • Access and excel formulas