Что нового

Чтение из dbf файла.

savva24

Новичок
Сообщения
3
Репутация
0
Можно ли с помощью AutoIt считать данные из dbf файла и записать их например в txt файл?
 
Автор
S

savva24

Новичок
Сообщения
3
Репутация
0
Я на писал следующий скрипт:
Код:
#include <SQLite.au3>
#include <SQLite.dll.au3>

Local $hQueryResult, $aResult

_SQLite_Startup()

$DB=_SQLite_Open (@ScriptDir &"\BNKSEEK.DBF")

_SQlite_Query($DB, "SELECT * FROM BNKSEEK;", $hQueryResult)
While _SQLite_FetchData($hQueryResult, $aResult) = $SQLITE_OK
    ConsoleWrite($aResult[0] & @CR)
WEnd

_SQLite_Close($DB)
_SQLite_Shutdown()

Но в консоле я вижу Следующее
! SQLite.au3 Error
--> Function: _SQLite_Query
--> Query: SELECT * FROM BNKSEEK.DBF;
--> Error: file is encrypted or is not a database
Подскажите в чем ошибка.
 

zlo-kazan

Скриптер
Сообщения
374
Репутация
100
1. Код AutoIt должен быть заключен в тег [autoit][/autoit].
2. Скрипт сообщает, что файл не база данных. Проблема может быть в том, что база не создана через SQLite3 (это, как пытаться открыть Excel таблицу через Word)... Вопрос в том чем изначально был создан .dbf? Смотря чем была создана база в ту сторону и нужно копать. Чаще всего это MySQL/MSSQL.
 

axlwor

Скриптер
Сообщения
657
Репутация
147
;D
Код:
#include <Excel.au3>
$sFilePath1 = @ScriptDir & "\Test1.dbf" 
$oExcel = _ExcelBookOpen($sFilePath1)
If @error = 1 Then
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    Exit
ElseIf @error = 2 Then
    MsgBox(0, "Error!", "File does not exist - Shame on you!")
    Exit
EndIf
_ExcelBookSaveAs($oExcel, @ScriptDir & "\SaveAsExample", "csv")
If Not @error Then MsgBox(0, "Success", "File was Saved!", 3)
_ExcelBookClose($oExcel, 0, 0)
;FileMove( @ScriptDir & "\SaveAsExample.csv", @ScriptDir & "\SaveAsExample.txt")
 

Frost

Новичок
Сообщения
6
Репутация
0
Ребят вопрос может чуть не по теме. Вот есть dbf файл не шифрованный, экселем открывается легко. Вот есть потребность внести изменения в ячейку А6 и В6. Реально это сделать средствами автоит? И если не трудно подскажите с чего начать :smile:
 

NONer

Новичок
Сообщения
27
Репутация
0
Re: Чтение из dbf файла

Присоединяюсь к вопросу.
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Re: Чтение из dbf файла

Реально это сделать средствами AutoIt?
Реально. Есть даже UDF для работы с dbf файлами. Прикрепил библиотеку и с ней dll.
 

Вложения

  • dbf.7z
    10.2 КБ · Просмотры: 51

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Re: Чтение из dbf файла

axlwor сказал(а):
;D
Код:
#include <Excel.au3>
$sFilePath1 = @ScriptDir & "\Test1.dbf" 
$oExcel = _ExcelBookOpen($sFilePath1)
If @error = 1 Then
    MsgBox(0, "Error!", "Unable to Create the Excel Object")
    Exit
ElseIf @error = 2 Then
    MsgBox(0, "Error!", "File does not exist - Shame on you!")
    Exit
EndIf
_ExcelBookSaveAs($oExcel, @ScriptDir & "\SaveAsExample", "csv")
If Not @error Then MsgBox(0, "Success", "File was Saved!", 3)
_ExcelBookClose($oExcel, 0, 0)
;FileMove( @ScriptDir & "\SaveAsExample.csv", @ScriptDir & "\SaveAsExample.txt")

А как можно сделать, чтоб ЭТО открылось не в новой книге Ексель CSV, а в XLS и в определенной, уже созданной, и на конкретном листе, с заменой всего что там есть?
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Re: Чтение из dbf файла

ВиталийВВ, можно так :
Код:
#include "DBF.au3"
#include <Excel.au3>

Local $sDbf_file=@ScriptDir&'\test1.dbf'
Local $sExcel_file = @ScriptDir & "\Test1.xls"
Local $sSheet_name='Лист2'

;Чтение DBF файла
Local $hDBF=_DBF_Open($sDbf_file)
Local $aDBF = _DBF_DBFToArray($hDBF)
_DBF_Close($hDBF)

;Запись в Excel
Local $oExcel = _Excel_Open(False)
Local $oWorkbook = _Excel_BookOpen($oExcel,$sExcel_file)
_Excel_RangeWrite($oWorkbook,$sSheet_name,$aDBF)
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)

или используя только Excel :
Код:
#include <Excel.au3>

Local $sDbf_file = @ScriptDir & '\test1.dbf'
Local $sExcel_file = @ScriptDir & "\Test1.xls"
Local $sSheet_name = 'Лист2'

Local $oExcel = _Excel_Open(False)
;Чтение DBF файла
Local $oWorkbook_dbf = _Excel_BookOpen($oExcel, $sDbf_file)
Local $aDBF = _Excel_RangeRead($oWorkbook_dbf)
_Excel_BookClose($oWorkbook_dbf)

;Запись в Excel
Local $oWorkbook = _Excel_BookOpen($oExcel, $sExcel_file)
_Excel_RangeWrite($oWorkbook, $sSheet_name, $aDBF)
_Excel_BookClose($oWorkbook)
_Excel_Close($oExcel)
 

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Re: Чтение из dbf файла

Почему проверка ругается на:

Local $oExcel = _Excel_Open(False)

C:\11\AutoIt v3 Script (5).au3(7,34) : ERROR: _Excel_Open(): undefined function.
Local $oExcel = _Excel_Open(False)

У меня версия 3,3,8,1. Ощущение, что дело в не той версии автоита?
 
A

Alofa

Гость
Re: Чтение из dbf файла

ВиталийВВ сказал(а):
... У меня версия 3,3,8,1. Ощущение, что дело в не той версии AutoIt'а?
Библиотека Excel.au3 со времен Autoit v3.3.8.1 значительно переписана, изменены имена функций.
Вот почитайте Эту тему, для проформы.
 

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Re: Чтение из dbf файла

а можно попросить все это реализовать в рамках 3,3,8,1?
Версию менять - совсем грустно :-(
 

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Re: Чтение из dbf файла

заменил библиотеку Excel.au3 на новую, сейчас ругается на:
C:\Program Files (x86)\AutoIt3\Include\Excel.au3(4,10) : ERROR: can't open include file <ExcelConstants.au3>.
#include <ExcelConstants.au3>
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Re: Чтение из dbf файла

Вам не достаточно было скопировать новый файл "Excel.au3" нужно ещё и "ExcelConstants.au3". Я поступил иначе - что бы не переписывать все свои старые скрипты с "Excel.au3" с новой версией AutoIt я сохранил старую версию UDF "Excel.au3" под новым именем "_Excel.au3", установил новую версию AutoIt и в старых скриптах просто заменил "#include <_Excel.au3>".
 

Вложения

  • ExcelConstants.au3
    19.1 КБ · Просмотры: 6
A

Alofa

Гость
Re: Чтение из dbf файла

OffTopic:

А у меня в папке Include лежат еще папки (Include_v3.3.8.1, Include_v3.3.12, Include_v3.3.14.2) и если надо, то Делаю Так.
 

ВиталийВВ

Новичок
Сообщения
177
Репутация
0
Re: Чтение из dbf файла

Код:
#include <Excel.au3>
#include <Array.au3>

$sFilePath1 = @ScriptDir & "\1.dbf"
$oExcel = _ExcelBookOpen($sFilePath1)

$aArray = _ExcelReadSheetToArray($oExcel)

Local $iRows = UBound($aArray, 1) ; Обще количество строк.
Local $iCols = UBound($aArray, 2) ; Обще количество колонок.

Local $aArray2[$iRows-1][$iCols-1]

For $i = 1 To $iRows-1
	For $j = 1 To $iCols-1

		$aArray2[$i-1][$j-1] = $aArray[$i][$j]
Next
Next

$oExcel = _ExcelBookOpen(@ScriptDir & "\to.xls")
_ExcelSheetActivate($oExcel, "2")

_ExcelWriteSheetFromArray($oExcel, $aArray2, 1, 1, 0, 0)


Вот так вроде работает как мне надо :smile:
 

ra4o

AutoIT Гуру
Сообщения
1,165
Репутация
246
Re: Чтение из dbf файла

Всё же исползуете старую версию AutoIT... переходите на новую - скорость обработки во много раз быстрее будет, ещё быстрее вариант с "DBF.au3"
 
Верх