itthon / Hivatal / Adatok exportálása dbf fájlokból Excelbe. DBF fájl megnyitása és konvertálása EXCEL formátumba A megoldás teljes leírása

Adatok exportálása dbf fájlokból Excelbe. DBF fájl megnyitása és konvertálása EXCEL formátumba A megoldás teljes leírása

A dBASE az egyik legrégebbi adatbázis-kezelő rendszer, és a dBASE (DBF) fájlformátumot használják hosszú ideje. A Microsoft Access támogatja az adatok exportálását a következő dBASE fájlformátumokba: dBASE III, dBASE IV, dBASE 5 és dBASE 7.

jegyzet hogy a dBASE támogatás a következő követelményekkel rendelkezik.

    Előfizetés az Office 365-re Ha Ön Office 365-előfizető, győződjön meg róla legújabb verzió hivatal. Ha Ön az Office 365 frissítési folyamatát felügyelő IT-szakember, látogasson el a kiadási csatornák oldalára, hogy megtudja, mely frissítések érhetők el az egyes csatornákon.

    Office 2016 Telepítse a következő frissítéseket a felsorolt ​​sorrendben: 2017. május 2-i frissítés az Office 2016-hoz (KB3115501) és 2017. május 2-i frissítés az Access 2016-hoz (KB3178700).

    Office 2016 Click-to-Run kiadások A frissítések automatikusan alkalmazásra kerülnek.

Adatok exportálása dBASE fájlba

Ezzel létrehoz egy dBASE fájlt a megadott helyen és formátumban.

Az Access 2013 nem támogatja a dBASE formátumot

A dBASE-exportálást az Access 2013 nem támogatja. A dBASE-fájlokkal való együttműködéshez fontolja meg az Office 365-előfizetés frissítését. A dBASE export az Access Office 365-előfizetéses kiadásaiban érhető el.

A DBF egy adatbázisfájl, amellyel dolgozni korábban a Microsoft Office környezetbe integrálták. Az Access és az Excel alkalmazások működtek a formátummal, később az Access kikerült a csomagból és külön program lett, Excelben pedig 2007-től jelentősen korlátozott volt a DataBaseFile támogatása.

Ha nem tudja megnyitni a DBF fájlt közvetlenül az Excelben, először konvertálnia kell.

Bár a DBF-et sokan elavult formátumnak tekintik, még mindig széles körben használják az üzleti, tervezési és mérnöki szakterületeken. Bárhol, ahol nagy mennyiségű információval kell dolgozni, azok strukturálása és feldolgozása, lekérdezés végrehajtása. Például az 1C Enterprise szoftvercsomag teljes mértékben adatbázis-kezelésen alapul. És mivel sok irodai dokumentáció és adat megy az Excelbe, az ezekkel a formátumokkal való integrált munka kérdése releváns és igényes.

Excel problémák a DBF-fel való munka során

Az Excel 2003-ban lehetőség nyílt a DBF megnyitására és szerkesztésére, valamint az XLS dokumentumok mentésére ebben a formátumban:

  1. Válassza a "Fájl" lehetőséget a menüsorban.
  2. Ezután kattintson a "Mentés másként" gombra.
  3. Válassza ki a "*.dbf" elemet a legördülő listából.

FONTOS. 2007 óta Excelben megnyithatja és megtekintheti az adatbázis-formátumot, de nem módosíthat és nem menthet el benne .xls dokumentumokat. Szabványos eszközök programok már nem biztosítják ezt a lehetőséget.

Vannak azonban speciális kiegészítők az alkalmazáshoz, amelyek ilyen funkciót adnak hozzá. A hálózatban különböző fórumokon a programozók közzéteszik a fejlesztéseiket, különféle lehetőségeket találhat. A legnépszerűbb XslToDBF kiegészítő letölthető a fejlesztő webhelyéről: http://basile-m.narod.ru/xlstodbf/download.html. A letöltés ingyenes, de ha szeretnéd, tetszőleges összeget pénztárcájára vagy kártyájára utalva támogathatja a projektet.

Telepítés és használat:

  1. Töltse le az archívumot a fenti webhelyről.
  2. Bontsa ki belőle az XlsToDBF.xla fájlt, és mentse el a számítógépére.
  3. Az Excelben lépjen a bal oldali Microsoft ikon gombbal a Beállítások menübe.
  4. Az Excel beállításai alatt válassza a Bővítmények lehetőséget.
  5. A „Manage / Excel-bővítmények” sorban kattintson a „Go” gombra.
  6. Kattintson a Tallózás gombra, és mutasson a mentett XlsToDBF.xla fájlra.
  7. A kiegészítők listájában az „XLS -> DBF” bejegyzésnek meg kell jelennie egy bejelölt jelölőnégyzet mellett. Jegyezze meg, ha nem létezik.
  8. Most már mentheti az .xls fájlokat .dbf formátumba. Ugyanarról az oldalról töltheti le részletes utasításokat használat által. A legfontosabb dolog a táblázatos adatok megfelelő előkészítése.
  9. Miután elkészült a táblázat, jelöljön ki egy kitöltött cellát, és nyomja meg az Alt és az F billentyűt
  10. A megnyíló makró ablakban írja be az XlsToDBF mezőbe, a kis- és nagybetűk nem fontosak.
  11. Kattintson a Futtatás gombra.
  12. Ha megfelelően előkészítette és formázta az adatokat, akkor az adatbázis fájl abba a mappába kerül, ahol az eredeti XLS található.

Ha nem szeretne semmit megváltoztatni az Office-ban, nem bízik a bővítményekben és a harmadik féltől származó alkalmazásokban, akkor felajánlhat egy időigényesebb módot az XLS-fájl DBF-re konvertálására:

  1. Vásárlás és telepítés Microsoft program hozzáférés.
  2. Excelben készítse elő és mentse el a dokumentumot.
  3. Kattintson a "Megnyitás" gombra az MS Accessben, és válassza ki a fájlt.
  4. Most helyesen kell konfigurálnia az importálást.
  5. Válasszon egy lapot a kezdéshez. Ha több is van, akkor is meg kell tennie egyenként.
  6. Ha a táblázatnak van fejléce, jelölje be a megfelelő négyzetet.
  7. Ezután megváltoztathatja a tábla nevét.
  8. Most kattintson a "Külső adatok" elemre.
  9. Kattintson az "Exportálás", "Speciális" gombra.
  10. Válassza a dBase fájlt.
  11. Adjon meg egy nevet és mentse a helyet.

Ez a módszer nem mindig működik sikeresen, gyakran előfordulnak hibák az adatfeldolgozásban és az azt követő mentésben. És nagyon hosszú és kényelmetlen.

Átalakítás

Annak érdekében, hogy ne szenvedje magát az irodai programokkal, számos olyan alkalmazást hoztak létre, amelyek lehetővé teszik az adatok egyik formátumból a másikba történő átvitelét. Először is, szinte minden hatékony DBMS-program lehetőséget kínál az XLS-be való exportálásra és az onnan való betöltésre. Másodszor, vannak kis segédprogramok, amelyek az átalakításra specializálódtak. Íme néhány közülük:


Ezekben a programokban az átalakítás ahhoz a tényhez vezet, hogy meg kell nyitnia a forrásfájlt, majd végre kell hajtania a "Konvertálás" vagy az "Exportálás" parancsot.

Vannak ingyenes online konverziós szolgáltatások is. Az ilyen webhelyeken javasolt a forrásfájl elküldése (feltöltése), kattintson a "Konvertálás" gombra, majd megjelenik a konvertált dokumentumra mutató hivatkozás. Hogy mennyire megbízhat az ilyen szolgáltatásokban, a döntés egyéni, saját felelősségére és kockázatára.

Így a DBF-et meg tudod nyitni Excelben, de ha 2007-es és újabb verzió, akkor nem lehet vele többet tenni, csak nézd. Szerkesztéshez, XLS-ben történő mentéshez vannak speciális kiegészítők vagy programok, valamint az ellenkező irányú konvertáláshoz. Ha van tapasztalata a DBF konvertálásában és a különböző alkalmazásokban való használatában, kérjük, ossza meg tippjeit a megjegyzésekben.

  • oktatóanyag

Ebben a cikkben elmondom, hogyan tölthet be ésszerű időn belül sok hatalmas, több millió rekordból álló dbf fájlt az adatbázisába az ms sql szerveren.

A feladat első pillantásra triviális. Használhatja a varázslót az sql Management Studio-ban vagy az OPENROWSET függvényt lekérdezéssel.

De az első lehetőség, több próbálkozás után, eltűnt a különféle hibák és sok fájl egy táblázatba való betöltésének szükségessége miatt (körülbelül 100 fájl). Ráadásul hosszú terhelésnél hiba jelentkezett.

A második lehetőség szintén nem felelt meg az illesztőprogramok eltérő bitmélysége és a szerver bitmélysége miatt.

Mivel a fájl egyszerűen hatalmas, úgy döntöttünk, hogy átolvassuk a folyamon, és beírjuk az adatbázisba. Továbbá a fájl sorának beolvasása után ezt a sort be kell írni a táblázatba. Az első dolog, ami eszembe jutott, a betét használata volt, de ebben az esetben az írás túl sok időt vesz igénybe.

És akkor eszembe jutott egy másik írási mechanizmus az SqlBulkCopy-n keresztül, amely lehetővé teszi, hogy rengeteg rekordot töltsön ki beszúrási lekérdezések nélkül.
Valójában ez az SqlBulkCopy osztály használata, amelyen keresztül csak az IDataReader felületet kell megvalósítani.

Kezdjük tehát a BDFBulkReader: IDataReader nyilvános osztály interfész megvalósításával

Kezdjük egy függvénnyel, amely visszaadja az aktuális rekord értékét:
nyilvános objektum GetValue(int i) ( return R]; )
Felhívom a figyelmet arra, hogy a fájl mezői és a táblázat mezői eltérő sorrendben is lehetnek. És egy indexen kívánatos lenne értéket kapni a táblázat megfelelő mezőjéhez. Ezért ezen kívül a FieldIndex szótárat használtam, ahol a mezőnevek leképezése az sql táblában lévő számokhoz. Szám szerint a mező neve, név szerint a dbf fájl olvasási sorából származó érték az R szótárból származik. Ennek eredményeként az adatbázis n-edik indexénél a GetValue a megfelelő értéket adja vissza.
Szótár R = új szótár (); Szótár FieldIndex = új szótár ();

A táblázathoz a már kitöltött FieldIndexet átvisszük, az R pedig akkor tölti ki, amikor az olvasó meghívja a Read függvényt, amit később szintén megvalósítunk.

Tehát a kivitelező:

System.IO.FileStreamFS; bájtos puffer; 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 Olvasott sor = 0; Szótár R = új szótár (); Szótár FieldIndex = új szótár (); public BDFBulkReader(karakterlánc fájlnév, szótár FieldIndex) ( FS = new System.IO.FileStream(Fájlnév, System.IO.FileMode.Open); puffer = új bájt; FS.Position = 4; FS.Read(puffer, 0, puffer.Length); RowsCount = puffer + (puffer * 0x100) + (puffer * 0x10000) + (puffer * 0x1000000); puffer = új bájt; FS.Position = 8; FS.Read(puffer, 0, puffer.Length); _FieldCount = (((puffer + (puffer * 0x100)) - 1) / 32) - 1; FieldName = új karakterlánc[_FieldCount]; FieldType = új karakterlánc[_FieldCount]; FieldSize = új bájt[_FieldCount]; FieldDigs = új bájt[_FieldCount]; puffer = új bájt bájt;FS.Position = 32;FS.Read(puffer, 0, puffer.Length);Mezők hossza = 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; }

Feladata a fájl megnyitása, a mezők nevének, számának és típusának meghatározása. A konstruktor második paramétere, ahogy fentebb is írtam, a találatok szótára, így például az első mezőszámmal garantáltan megkapjuk a kívánt mezőt a fájlból.

Most térjünk át a bool Read() implementációra. A karakterlánc sikeres beolvasása esetén igazat ad vissza. És hamis, ha a sort nem olvasták be, és egyben az adatok végét is elérték.

Public bool Read() ( if (ReadedRow >= RowsCount) hamis értéket ad vissza; R.Clear(); puffer = új bájt; FS.ReadByte(); FS.Read(puffer, 0, puffer.Length); int Index = 0 ; for (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; }

Hadd emlékeztesselek még egyszer, hogy a behívás után az olvasott sor az R szótárba kerül, hogy az olvasó később elolvashassa.
Tehát hátra van egy olyan módszer megvalósítása, amely visszaadja a mezők számát:

Nyilvános int FieldCount ( get ( return _FieldCount; ) )

És az interfész csonkjai:

Public void Dispose() ( FS.Close(); ) public int Mélység ( 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 KövetkezőResult() ( return true; ) public bool IsDBNull(int i) ( return false; ) public string GetString(int i) ( return ""; ) public DataTable GetSchemaTable() ( return null; ) public int GetOrdinal(karakterlánc neve) ( return -1; ) public string GetName(int i) ( return ""; ) public long GetInt64(int i) ( return -1; ) public int GetInt32(int i) ( return -1; ) public short GetInt16(int i) ( return -1; ) public Guid GetGuid(int i) ( return new Guid(); ) public float GetFloat(int i) ( return -1; ) public Type GetFieldType(int i) ( return typeof(string); ) public double GetDouble(int i) ( return -1; ) public decimális GetDecimal(int i) ( return -1; ) public DateTime GetDa teTime(int i) ( return new DateTime(); ) public string GetDataTypeName(int i) ( return ""; ) public IDataReader GetData(int i) ( ezt adja vissza; ) public long GetChars(int i, long fieldoffset, char puffer, int bufferoffset, int long) ( return -1; ) public char GetChar(int i) ( return " "; ) public long GetBytes(int i, long fieldOffset, byte buffer, int bufferoffset, int long) ( return -1; ) public byte GetByte(int i) ( return 0x00; ) public bool GetBoolean(int i) ( hamis értéket ad vissza; ) public int GetValues(Objektumértékek) ( return -1; )

Ahol a Dispose()-ban csak bezárom a fájlt.

Az interfész megvalósítása után írhat egy metódust a fájl betöltésére:

Void SaveToTable(FileInfo könyvtár, string TableName, string connestionString, szótár FieldIndex) ( using (var loader = new SqlBulkCopy(connestionString, SqlBulkCopyOptions.Default)) ( loader.DestinationTableName = TableName; loader.BulkCopyTimeout = 9999; loader.WriteToServer(új BDFBuld));

Ez minden. Továbbra is át kell adni ennek a függvénynek a fájl helyét, a tábla nevét, a kapcsolati karakterláncot és a megfelelő szótárat, például:

Szótár FieldIndex= új szótár (); FieldIndex.Add(0, "IRÁNYÍTÓSZÁM"); 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, "HÁZSZÁM"); 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, "COUNTER");

Mindenkinek köszönöm a figyelmet, jó letöltést.