Acasă / Birou / Exportați date din fișierele dbf în Excel. Deschiderea și conversia unui fișier DBF în EXCEL Descrierea completă a soluției

Exportați date din fișierele dbf în Excel. Deschiderea și conversia unui fișier DBF în EXCEL Descrierea completă a soluției

dBASE este unul dintre cele mai vechi sisteme de gestionare a bazelor de date și a fost folosit formatul de fișier dBASE (DBF). pentru mult timp. Microsoft Access acceptă exportul de date în următoarele formate de fișiere dBASE: dBASE III, dBASE IV, dBASE 5 și dBASE 7.

Notă că suportul dBASE are următoarele cerințe.

    Abonarea la Office 365 Dacă sunteți abonat Office 365, asigurați-vă că aveți ultima versiune birou. Dacă sunteți un profesionist IT care gestionează procesul de actualizare Office 365, vizitați pagina canale de lansare pentru a vedea ce actualizări sunt furnizate în fiecare canal.

    Office 2016 Instalați următoarele actualizări în ordinea afișată: Actualizare din 2 mai 2017 pentru Office 2016 (KB3115501) și Actualizare din 2 mai 2017 pentru Access 2016 (KB3178700) .

    Edițiile Office 2016 Click-to-Run Actualizările sunt aplicate automat.

Exportați datele în fișierul dBASE

Aceasta va crea un fișier dBASE în locația și formatul specificate.

Access 2013 nu acceptă formatul dBASE

Exportul dBASE nu este acceptat în Access 2013. Pentru a lucra cu fișierele dBASE, luați în considerare actualizarea abonamentului Office 365. Exportul dBASE este disponibil în edițiile de abonament Office 365 ale Access.

DBF este un fișier de bază de date, abilitatea de a lucra cu care a fost integrată anterior în mediul Microsoft Office. Aplicațiile Access și Excel au funcționat cu formatul, mai târziu Access a fost eliminat din pachet și a devenit un program separat, iar în Excel, din 2007, suportul pentru DataBaseFile a fost semnificativ limitat.

Dacă nu puteți deschide un fișier DBF direct în Excel, trebuie mai întâi să îl convertiți.

Cu toate acestea, deși DBF este considerat de mulți un format învechit, este încă utilizat pe scară largă în programe specializate în domeniul afacerilor, designului și ingineriei. Oriunde trebuie să lucrați cu cantități mari de informații, structurarea și procesarea acestora, executarea interogărilor. De exemplu, pachetul software 1C Enterprise se bazează în întregime pe managementul bazei de date. Și având în vedere că o mulțime de documentație și date de birou merg la Excel, problema muncii integrate cu aceste formate este relevantă și solicitată.

Probleme cu Excel când lucrați cu DBF

În Excel 2003, a fost posibil să deschideți și să editați DBF, precum și să salvați documente XLS în acest format:

  1. Selectați „Fișier” din bara de meniu.
  2. Apoi, faceți clic pe „Salvare ca”.
  3. Selectați „*.dbf” din lista verticală.

IMPORTANT. Din 2007, puteți deschide și vizualiza formatul bazei de date în Excel, dar nu puteți face modificări sau salva documente .xls în acesta. Instrumente standard programele nu mai prevăd această posibilitate.

Cu toate acestea, există suplimente speciale pentru aplicație care îi adaugă o astfel de funcție. În rețea, la diferite forumuri, programatorii își postează evoluțiile, puteți găsi diferite opțiuni. Cel mai popular add-on numit XslToDBF poate fi descărcat de pe site-ul dezvoltatorului http://basile-m.narod.ru/xlstodbf/download.html. Descărcarea este gratuită, dar dacă doriți, puteți susține proiectul transferând orice sumă în portofel sau card.

Instalare si utilizare:

  1. Descărcați arhiva de pe site-ul de mai sus.
  2. Extrageți XlsToDBF.xla din acesta și salvați-l pe computer.
  3. În Excel, accesați meniul cu butonul pictogramă Microsoft din stânga, Opțiuni.
  4. Sub Opțiuni Excel, selectați Suplimente.
  5. În linia „Manage / Excel Add-ins”, faceți clic pe „Go”.
  6. Faceți clic pe Răsfoire și indicați spre XlsToDBF.xla salvat.
  7. În lista de suplimente, intrarea „XLS -> DBF” ar trebui să apară cu o casetă de selectare bifată. Observați dacă nu există.
  8. Acum puteți salva .xls în format .dbf. De pe același site puteți descărca instrucțiuni detaliate prin utilizare. Principalul lucru este să pregătiți corect datele tabelare.
  9. După ce tabelul este gata, selectați orice celulă umplută și apăsați Alt și F
  10. În fereastra macro care se deschide, tastați XlsToDBF în câmp, majusculele nu sunt importante.
  11. Faceți clic pe Run.
  12. Dacă ați pregătit și formatat datele corect, atunci fișierul bazei de date va fi salvat în folderul în care se află XLS original.

Dacă nu doriți să schimbați nimic în Office, nu aveți încredere în programe de completare și aplicații terțe, atunci puteți oferi o modalitate mai consumatoare de timp de a converti fișierul XLS în DBF:

  1. Cumpărați și instalați programul Microsoft acces.
  2. În Excel, pregătiți și salvați documentul.
  3. Faceți clic pe butonul „Deschidere” din MS Access și selectați fișierul.
  4. Acum trebuie să configurați corect importul.
  5. Alegeți o foaie pentru a începe. Dacă sunt mai multe, mai trebuie să faci unul câte unul.
  6. Dacă tabelul are un rând de antet, bifați caseta corespunzătoare.
  7. Apoi, puteți schimba numele tabelului.
  8. Acum faceți clic pe „Date externe”.
  9. Faceți clic pe butonul „Export”, „Avansat”.
  10. Selectați dBase File.
  11. Specificați un nume și salvați locația.

Această metodă nu funcționează întotdeauna cu succes, apar adesea erori în procesarea datelor și salvarea ulterioară. Și este foarte lung și incomod.

Conversie

Pentru a nu avea de suferit cu programele de birou, au fost create multe aplicații care vă permit să transferați date dintr-un format în altul. În primul rând, aproape toate programele DBMS puternice oferă posibilitatea de a exporta și de a încărca de pe XLS. În al doilea rând, există mici utilități care sunt specializate în conversie. Iată câteva dintre ele:


În toate aceste programe, conversia se reduce la faptul că trebuie să deschideți fișierul sursă și apoi să executați comanda „Convertire” sau „Exportare”.

Există și servicii de conversie online gratuite. Pe astfel de site-uri, se propune să trimiteți (încărcați) fișierul sursă, faceți clic pe „Convertire”, după care va apărea un link către documentul convertit. Cât de mult poți avea încredere în astfel de servicii, decizia este individuală, pe riscul și riscul tău.

Astfel, puteți deschide DBF în Excel, dar dacă versiunea sa este 2007 și mai nouă, atunci nu se mai poate face nimic cu el, doar uitați-vă. Pentru editare, salvare în XLS, există suplimente sau programe speciale, precum și pentru conversie în direcția opusă. Dacă aveți experiență de conversie și lucru cu DBF în diferite aplicații, vă rugăm să împărtășiți sfaturile dvs. în comentarii.

  • tutorial

În acest articol vă voi spune cum să încărcați multe fișiere dbf uriașe constând din milioane de înregistrări în baza de date pe serverul ms sql într-un timp rezonabil.

Sarcina este banala la prima vedere. Puteți utiliza vrăjitorul în sql management studio sau funcția OPENROWSET prin interogare.

Dar prima opțiune, după mai multe încercări, a dispărut din cauza diverselor erori și a necesității de a încărca multe fișiere într-un singur tabel (aproximativ 100 de fișiere). În plus, cu o încărcare lungă, a declanșat o eroare.

De asemenea, a doua opțiune nu s-a potrivit din cauza adâncimii de biți diferite a driverelor și a adâncimii de biți a serverului.

Deoarece fișierul este pur și simplu uriaș, s-a decis să-l citiți prin flux și să-l scrieți în baza de date. În plus, după citirea liniei din fișier, această linie trebuie scrisă în tabel. Primul lucru care mi-a venit în minte a fost să folosiți insert, dar scrierea în acest caz ar dura prea mult timp.

Și apoi mi-am amintit un alt mecanism de scriere prin SqlBulkCopy, care vă permite să completați un număr mare de înregistrări fără interogări de inserare.
De fapt, aceasta este utilizarea clasei SqlBulkCopy, pentru scriere prin care trebuie să implementați doar interfața IDataReader.

Deci, să începem cu implementarea clasei publice de interfață BDFBulkReader: IDataReader

Să începem cu o funcție care returnează valoarea înregistrării curente:
obiect public GetValue(int i) ( returnează R]; )
Vă voi atrage atenția asupra faptului că câmpurile din fișier și câmpurile din tabel pot fi într-o ordine diferită. Și pe un index ar fi de dorit să primiți valoare pentru câmpul corespunzător al tabelului. Prin urmare, am folosit suplimentar dicționarul FieldIndex, unde maparea numelor câmpurilor la numărul din tabelul sql. După număr se ia numele câmpului, după nume se ia valoarea din linia de citire a fișierului dbf din dicționarul R. Ca rezultat, pentru al n-lea index din baza de date, GetValue va returna valoarea corespunzătoare.
Dicţionar R = dicţionar nou (); Dicţionar FieldIndex = dicţionar nou ();

Vom transfera FieldIndex deja completat pentru tabel, iar R îl va completa atunci când cititorul apelează funcția Read, pe care o vom implementa și mai târziu.

Deci constructorul:

System.IO.FileStreamFS; buffer de octeți; int_FieldCount; intFieldsLength; System.Globalization.DateTimeFormatInfo dfi = new System.Globalization.CultureInfo("en-US", false).DateTimeFormat; System.Globalization.NumberFormatInfo nfi = new System.Globalization.CultureInfo("en-US", false).NumberFormat; stringFieldName; stringFieldType; byteFieldSize; byteFieldDigs; int RowsCount; int ReadedRow = 0; Dicţionar R = dicţionar nou (); Dicţionar FieldIndex = dicţionar nou (); public BDFBulkReader(string FileName, Dictionary FieldIndex) ( FS = nou System.IO.FileStream(FileName, System.IO.FileMode.Open); buffer = nou octet; FS.Position = 4; FS.Read (buffer, 0, buffer.Length); RowsCount = buffer + (buffer * 0x100) + (buffer * 0x10000) + (buffer * 0x1000000); buffer = octet nou; FS.Position = 8; FS.Read(buffer, 0, buffer.Length); _FieldCount = (((buffer + (buffer * 0x100)) - 1) / 32) - 1; FieldName = șir nou[_FieldCount]; FieldType = șir nou[_FieldCount]; FieldSize = nou octet[_FieldCount]; FieldDigs = nou octet[_FieldCount]; buffer = nou octet;FS.Posiție = 32;FS.Read(buffer, 0, buffer.Length);FieldsLength = 0;for(int i = 0;i< _FieldCount; i++) { FieldName[i] = System.Text.Encoding.Default.GetString(buffer, i * 32, 10).TrimEnd(new char { (char)0x00 }); FieldType[i] = "" + (char)buffer; FieldSize[i] = buffer; FieldDigs[i] = buffer; FieldsLength = FieldsLength + FieldSize[i]; } FS.ReadByte(); this.FieldIndex = FieldIndex; }

Sarcina sa este de a deschide fișierul, de a determina numele câmpurilor, numărul și tipurile acestora. Al doilea parametru al constructorului, așa cum am scris mai sus, este un dicționar de potriviri, astfel încât, de exemplu, prin primul număr de câmp, avem garanția că obținem câmpul dorit din fișier.

Acum să trecem la implementarea bool Read() . Va returna true dacă șirul a fost citit cu succes. Și fals dacă linia nu a fost citită și în același timp s-a ajuns la sfârșitul datelor.

Public bool Read() (dacă (ReadedRow >= RowsCount) returnează fals; R.Clear(); buffer = octet nou; FS.ReadByte(); FS.Read(buffer, 0, buffer.Length); int Index = 0 ; pentru (int i = 0; i< FieldCount; i++) { string l = System.Text.Encoding.GetEncoding(866).GetString(buffer, Index, FieldSize[i]).TrimEnd(new char { (char)0x00 }).TrimEnd(new char { (char)0x20 }); Index = Index + FieldSize[i]; object Tr; if (l.Trim() != "") { switch (FieldType[i]) { case "L": Tr = l == "T" ? true: false; break; case "D": Tr = DateTime.ParseExact(l, "yyyyMMdd", dfi); break; case "N": { if (FieldDigs[i] == 0) Tr = int.Parse(l, nfi); else Tr = decimal.Parse(l, nfi); break; } case "F": Tr = double.Parse(l, nfi); break; default: Tr = l; break; } } else { Tr = DBNull.Value; } R.Add(FieldName[i], Tr); } ReadedRow++; return true; }

Permiteți-mi să vă reamintesc încă o dată că după apelarea acestuia, linia de citit va fi scrisă în dicționarul R, pentru citire ulterioară de către cititor.
Deci, rămâne să implementăm o metodă care returnează numărul de câmpuri:

Public int FieldCount ( get ( return _FieldCount; ) )

Și stub-uri pentru interfață:

Public void Dispose() ( FS.Close(); ) public int Depth ( get ( return -1; ) ) public bool IsClosed ( get ( return false; ) ) public Object this ( get ( return new object(); ) ) public Object this ( get ( return new object(); ) ) public int RecordsAffected ( get ( return -1; ) ) public void Close() ( ) public bool NextResult() ( return true; ) public bool IsDBNull(int i) ( return false; ) public șir GetString(int i) ( return ""; ) public DataTable GetSchemaTable() ( return null; ) public int GetOrdinal(nume șir) ( return -1; ) public șir GetName(int i) ( return ""; ) public lung GetInt64(int i) ( return -1; ) public int GetInt32(int i) ( return -1; ) public scurt GetInt16(int i) ( return -1; ) public Guid GetGuid(int i) ( return new Guid(); ) public float GetFloat(int i) ( return -1; ) public Tip GetFieldType(int i) ( return typeof(string); ) public double GetDouble(int i) ( return -1; ) public zecimal GetDecimal(int i) ( return -1; ) public DateTime GetDa teTime(int i) ( returnează nou DateTime(); ) public șir GetDataTypeName(int i) ( return ""; ) public IDataReader GetData(int i) ( return this; ) public long GetChars(int i, long fieldoffset, char buffer, int bufferoffset, int length) ( return -1; ) public char GetChar(int i) ( return " "; ) public long GetBytes(int i, long fieldOffset, byte buffer, int bufferoffset, int length) ( return -1; ) public byte GetByte(int i) ( return 0x00; ) public bool GetBoolean(int i) ( return false; ) public int GetValues(Valori obiect) ( return -1; )

Unde în Dispose() închid fișierul.

Odată ce interfața este implementată, puteți scrie o metodă pentru a încărca un fișier:

Void SaveToTable(FileInfo dir, string TableName, string connestionString, Dictionary FieldIndex) ( folosind (var loader = new SqlBulkCopy(connestionString, SqlBulkCopyOptions.Default)) ( loader.DestinationTableName = TableName; loader.BulkCopyTimeout = 9999; loader.WriteToServer(new BDFBulkCopyOptions.Default));(Nadir) FieldIndex) ;(Namedir) FieldIndex)

Asta e tot. Rămâne să treceți locația fișierului, numele tabelului, șirul de conexiune și dicționarul corespunzător de potriviri acestei funcție, de exemplu:

Dicţionar FieldIndex= dicţionar nou (); FieldIndex.Add(0, „COD POSTAL”); FieldIndex.Add(1, "IFNSFL"); FieldIndex.Add(2, "TERRIFNSFL"); FieldIndex.Add(3, "IFNSUL"); FieldIndex.Add(4, "TERRIFNSUL"); FieldIndex.Add(5, "OKATO"); FieldIndex.Add(6, "OKTMO"); FieldIndex.Add(7, "UPDATEDATE"); FieldIndex.Add(8, "HOUSENUM"); FieldIndex.Add(9, "ESTSTATUS"); FieldIndex.Add(10, "BUILDNUM"); FieldIndex.Add(11, "STRUCNUM"); FieldIndex.Add(12, "STRSTATUS"); FieldIndex.Add(13, "HOUSEID"); FieldIndex.Add(14, "HOUSEGUID"); FieldIndex.Add(15, "AOGUID"); FieldIndex.Add(16, „STARTDATE”); FieldIndex.Add(17, "ENDDATE"); FieldIndex.Add(18, "STATUS"); FieldIndex.Add(19, "NORMDOC"); FieldIndex.Add(20, „CONTATOR”);

Tuturor, vă mulțumesc tuturor pentru atenție, descărcare plăcută.