Uy / Idora / Ma'lumotlarni dbf fayllaridan Excelga eksport qiling. DBF faylini ochish va EXCEL ga aylantirish Yechimning toʻliq tavsifi

Ma'lumotlarni dbf fayllaridan Excelga eksport qiling. DBF faylini ochish va EXCEL ga aylantirish Yechimning toʻliq tavsifi

dBASE eng qadimgi ma'lumotlar bazasini boshqarish tizimlaridan biri bo'lib, dBASE (DBF) fayl formati ishlatilgan uzoq vaqt. Microsoft Access quyidagi dBASE fayl formatlariga ma'lumotlarni eksport qilishni qo'llab-quvvatlaydi: dBASE III, dBASE IV, dBASE 5 va dBASE 7.

Eslatma dBASE yordami quyidagi talablarga ega.

    Office 365-ga obuna bo'lish Agar siz Office 365 obunachisi bo'lsangiz, sizda borligiga ishonch hosil qiling oxirgi versiya idora. Agar siz Office 365 yangilash jarayonini boshqaruvchi IT mutaxassisi bo‘lsangiz, har bir kanalda qaysi yangilanishlar taqdim etilganini ko‘rish uchun chiqarish kanallari sahifasiga tashrif buyuring.

    Ofis 2016 Quyidagi yangilanishlarni roʻyxatda keltirilgan tartibda oʻrnating: 2017-yil 2-may, Office 2016 uchun yangilanish (KB3115501) va Access 2016 uchun yangilanish (KB3178700) 2017-yil 2-may.

    Office 2016 "Ishga tushirish uchun bosing" nashrlari Yangilanishlar avtomatik ravishda qo'llaniladi.

Ma'lumotlarni dBASE fayliga eksport qiling

Bu belgilangan joylashuv va formatda dBASE faylini yaratadi.

Access 2013 dBASE formatini qo'llab-quvvatlamaydi

Access 2013 da dBASE eksporti qo‘llab-quvvatlanmaydi. dBASE fayllari bilan ishlash uchun Office 365 obunangizni yangilang. dBASE eksporti Accessning Office 365 obuna nashrlarida mavjud.

DBF ma'lumotlar bazasi fayli bo'lib, u bilan ishlash imkoniyati ilgari Microsoft Office muhitiga integratsiya qilingan. Access va Excel ilovalari format bilan ishladi, keyinchalik Access paketdan olib tashlandi va alohida dasturga aylandi va Excelda 2007 yildan beri DataBaseFile qo'llab-quvvatlashi sezilarli darajada cheklangan.

Agar siz DBF faylini to'g'ridan-to'g'ri Excelda ocholmasangiz, avval uni o'zgartirishingiz kerak.

Biroq, DBF ko'pchilik tomonidan eskirgan format deb hisoblansa-da, u hali ham biznes, dizayn va muhandislik sohasidagi ixtisoslashtirilgan dasturlarda keng qo'llaniladi. Qaerda katta hajmdagi ma'lumotlar bilan ishlash kerak bo'lsa, ularni tizimlashtirish va qayta ishlash, so'rovlarni bajarish. Masalan, 1C Enterprise dasturiy ta'minot to'plami butunlay ma'lumotlar bazasini boshqarishga asoslangan. Va ko'plab ofis hujjatlari va ma'lumotlar Excelga o'tishini hisobga olsak, ushbu formatlar bilan integratsiyalashgan ishlash masalasi dolzarb va talabga ega.

DBF bilan ishlashda Excel muammolari

Excel 2003 da DBFni ochish va tahrirlash, shuningdek XLS hujjatlarini ushbu formatda saqlash mumkin edi:

  1. Menyu satridan "Fayl" ni tanlang.
  2. Keyin, "Boshqa saqlash" tugmasini bosing.
  3. Ochiladigan ro'yxatdan "*.dbf" ni tanlang.

MUHIM. 2007 yildan beri siz Excelda ma'lumotlar bazasi formatini ochishingiz va ko'rishingiz mumkin, lekin unda o'zgartirishlar kirita olmaysiz yoki .xls hujjatlarini saqlay olmaysiz. Standart asboblar dasturlar endi bu imkoniyatni ta'minlamaydi.

Biroq, dastur uchun bunday funktsiyani qo'shadigan maxsus qo'shimchalar mavjud. Tarmoqda turli forumlarda dasturchilar o'z ishlanmalarini joylashtiradilar, siz turli xil variantlarni topishingiz mumkin. XslToDBF deb nomlangan eng mashhur plaginni ishlab chiquvchining http://basile-m.narod.ru/xlstodbf/download.html saytidan yuklab olish mumkin. Yuklab olish bepul, lekin agar xohlasangiz, hamyoningiz yoki kartangizga istalgan miqdorni o'tkazish orqali loyihani qo'llab-quvvatlashingiz mumkin.

O'rnatish va foydalanish:

  1. Yuqoridagi saytdan arxivni yuklab oling.
  2. Undan XlsToDBF.xla faylini chiqarib oling va uni kompyuteringizga saqlang.
  3. Excelda chap tarafdagi Microsoft belgisi tugmasi bilan menyuga o'ting, Variantlar.
  4. Excel parametrlari ostida Qo'shimchalar-ni tanlang.
  5. "Boshqarish / Excel plaginlari" qatorida "O'tish" tugmasini bosing.
  6. Browse tugmasini bosing va saqlangan XlsToDBF.xla-ga ishora qiling.
  7. Qo'shimchalar ro'yxatida "XLS -> DBF" yozuvi belgilangan katakcha bilan paydo bo'lishi kerak. Agar u mavjud bo'lmasa, e'tibor bering.
  8. Endi siz .xls ni .dbf formatida saqlashingiz mumkin. Xuddi shu saytdan yuklab olishingiz mumkin batafsil ko'rsatmalar foydalanish orqali. Asosiysi, jadval ma'lumotlarini to'g'ri tayyorlash.
  9. Jadval tayyor bo'lgach, istalgan to'ldirilgan katakchani tanlang va Alt va F tugmalarini bosing
  10. Ochilgan so'l oynada XlsToDBF maydoniga yozing, katta harf muhim emas.
  11. Run tugmasini bosing.
  12. Agar siz ma'lumotlarni to'g'ri tayyorlagan va formatlagan bo'lsangiz, ma'lumotlar bazasi fayli asl XLS joylashgan papkada saqlanadi.

Agar siz Office-da biror narsani o'zgartirishni xohlamasangiz, qo'shimchalar va uchinchi tomon ilovalariga ishonmasangiz, XLS faylini DBF-ga aylantirishning ko'proq vaqt talab qiladigan usulini taklif qilishingiz mumkin:

  1. Sotib oling va o'rnating Microsoft dasturi kirish.
  2. Excelda hujjatni tayyorlang va saqlang.
  3. MS Access-da "Ochish" tugmasini bosing va faylni tanlang.
  4. Endi siz importni to'g'ri sozlashingiz kerak.
  5. Boshlash uchun varaqni tanlang. Agar bir nechta bo'lsa, siz hali ham bir vaqtning o'zida bajarishingiz kerak.
  6. Jadvalda sarlavha qatori bo'lsa, tegishli katakchani belgilang.
  7. Keyinchalik, jadval nomini o'zgartirishingiz mumkin.
  8. Endi "Tashqi ma'lumotlar" ni bosing.
  9. "Eksport", "Kengaytirilgan" tugmasini bosing.
  10. dBase faylini tanlang.
  11. Ismni belgilang va manzilni saqlang.

Bu usul har doim ham muvaffaqiyatli ishlamaydi, xatolar ko'pincha ma'lumotlarni qayta ishlash va keyinchalik saqlashda yuzaga keladi. Va bu juda uzoq va noqulay.

Konvertatsiya

Ofis dasturlari bilan o'zingizni azoblamaslik uchun ma'lumotlarni bir formatdan boshqasiga o'tkazish imkonini beruvchi ko'plab ilovalar yaratilgan. Birinchidan, deyarli barcha kuchli DBMS dasturlari XLS ga eksport qilish va undan yuklash imkoniyatini taklif qiladi. Ikkinchidan, konvertatsiya qilishga ixtisoslashgan kichik yordamchi dasturlar mavjud. Mana ulardan ba'zilari:


Ushbu dasturlarning barchasida konvertatsiya siz manba faylini ochishingiz va keyin "Konvertatsiya" yoki "Eksport" buyrug'ini bajarishingiz kerakligi bilan bog'liq.

Bundan tashqari, bepul onlayn konvertatsiya xizmatlari mavjud. Bunday saytlarda manba faylni yuborish (yuklash) taklif etiladi, "Konvertatsiya qilish" tugmasini bosing, shundan so'ng aylantirilgan hujjatga havola paydo bo'ladi. Bunday xizmatlarga qanchalik ishonishingiz mumkin, qaror individualdir, o'zingizning xavf-xataringiz va xavfingiz ostida.

Shunday qilib, siz DBF-ni Excel-da ochishingiz mumkin, ammo agar uning versiyasi 2007 va undan yangiroq bo'lsa, u bilan boshqa hech narsa qilish mumkin emas, shunchaki qarang. XLS-da tahrirlash, saqlash uchun maxsus qo'shimchalar yoki dasturlar, shuningdek, teskari yo'nalishda aylantirish uchun mavjud. Agar sizda DBF ni turli ilovalarda konvertatsiya qilish va ular bilan ishlash bo'yicha tajribangiz bo'lsa, maslahatlaringizni izohlarda baham ko'ring.

  • darslik

Ushbu maqolada men sizga MS SQL serveridagi ma'lumotlar bazasiga millionlab yozuvlardan iborat ko'plab katta dbf fayllarni qanday qilib oqilona vaqt ichida yuklashni aytib beraman.

Vazifa birinchi qarashda ahamiyatsiz. Siz sql boshqaruv studiyasida sehrgardan yoki so'rov orqali OPENROWSET funksiyasidan foydalanishingiz mumkin.

Ammo birinchi variant, bir nechta urinishlardan so'ng, turli xil nosozliklar va ko'plab fayllarni bitta jadvalga (taxminan 100 ta fayl) yuklash zarurati tufayli yo'qoldi. Bundan tashqari, uzoq yuk bilan xatolik yuz berdi.

Ikkinchi variant ham drayverlarning turli bit chuqurligi va serverning bit chuqurligi tufayli mos kelmadi.

Fayl juda katta bo'lgani uchun uni oqim orqali o'qish va ma'lumotlar bazasiga yozishga qaror qilindi. Bundan tashqari, fayldagi qatorni o'qib chiqqandan so'ng, ushbu satr jadvalga yozilishi kerak. Aqlga kelgan birinchi narsa insertdan foydalanish edi, lekin bu holda yozish juda ko'p vaqtni oladi.

Va keyin men SqlBulkCopy orqali boshqa yozish mexanizmini esladim, bu sizga so'rovlarsiz juda ko'p sonli yozuvlarni to'ldirishga imkon beradi.
Aslida, bu SqlBulkCopy sinfidan foydalanish bo'lib, yozish uchun siz faqat IDataReader interfeysini amalga oshirishingiz kerak.

Shunday qilib, BDFBulkReader: IDataReader umumiy klassi interfeysini amalga oshirishdan boshlaylik

Joriy yozuvning qiymatini qaytaruvchi funksiyadan boshlaylik:
umumiy obyekt GetValue(int i) ( R]; qaytaring)
Men sizning e'tiboringizni fayldagi maydonlar va jadvaldagi maydonlar boshqacha tartibda bo'lishi mumkinligiga qarataman. Va indeksda jadvalning tegishli maydoni uchun qiymat olish maqsadga muvofiqdir. Shuning uchun men qo'shimcha ravishda FieldIndex lug'atidan foydalandim, bu erda maydon nomlarini sql jadvalidagi raqamga solishtirish. Raqam bo'yicha, maydon nomi, nomi bo'yicha, dbf faylining o'qish satridagi qiymat R lug'atidan olinadi. Natijada, ma'lumotlar bazasidagi n-indeks uchun GetValue mos keladigan qiymatni qaytaradi.
Lug'at R = yangi lug'at (); Lug'at FieldIndex = yangi lug'at ();

Jadval uchun allaqachon to'ldirilgan FieldIndex ni o'tkazamiz va o'quvchi Read funksiyasini chaqirganda R uni to'ldiradi, biz buni keyinroq ham amalga oshiramiz.

Shunday qilib, konstruktor:

System.IO.FileStreamFS; bayt buferi; 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; Lug'at R = yangi lug'at (); Lug'at FieldIndex = yangi lug'at (); ommaviy BDFBulkReader (string FileName, Dictionary FieldIndex) ( FS = yangi System.IO.FileStream(FileName, System.IO.FileMode.Open); bufer = yangi bayt; FS.Position = 4; FS.Read(bufer, 0, bufer.Length); RowsCount = bufer + (bufer * 0x100) + (bufer * 0x10000) + (bufer * 0x1000000); bufer = yangi bayt; FS.Position = 8; FS.Read(bufer, 0, bufer.Length); _FieldCount = (((bufer) + (bufer * 0x100)) - 1) / 32) - 1; FieldName = yangi satr[_FieldCount]; FieldType = yangi qator[_FieldCount]; FieldSize = yangi bayt[_FieldCount]; FieldDigs = yangi bayt[_FieldCount =yangi]; bayt;FS.Position = 32;FS.Read(bufer, 0, bufer.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; }

Uning vazifasi faylni ochish, maydonlarning nomlarini, ularning sonini va turlarini aniqlashdir. Konstruktorning ikkinchi parametri, men yuqorida yozganimdek, mos keluvchi lug'atdir, shuning uchun, masalan, birinchi maydon raqami bo'yicha, fayldan kerakli maydonni olish kafolatlanadi.

Endi bool Read() ilovasiga o'tamiz. Agar satr muvaffaqiyatli o'qilgan bo'lsa, u true bo'ladi. Va agar chiziq o'qilmagan bo'lsa va bir vaqtning o'zida ma'lumotlarning oxiriga erishilgan bo'lsa, noto'g'ri.

Ommaviy bool Read() ( if (ReadedRow >= RowsCount) false qaytaradi; R.Clear(); bufer = yangi bayt; FS.ReadByte(); FS.Read(bufer, 0, bufer.Length); int Index = 0 ; uchun (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; }

Yana bir bor eslatib o'tamanki, uni chaqirgandan so'ng, o'qilgan satr o'quvchi tomonidan keyingi o'qish uchun R lug'atiga yoziladi.
Shunday qilib, maydonlar sonini qaytaradigan usulni amalga oshirish qoladi:

Public int FieldCount (olish (qaytish _FieldCount; ))

Va interfeys uchun stublar:

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 string GetString(int i) ( return ""; ) public DataTable GetSchemaTable() ( return null; ) public int GetOrdinal(string name) ( return -1; ) public string GetName(int i) ( return ""; ) umumiy uzoq GetInt64(int i) (qaytish -1; ) public int GetInt32(int i) (qaytish -1; ) umumiy qisqa GetInt16(int i) (qaytish -1; ) ommaviy 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 o'nlik GetDecimal(int i) (qaytish -1; ) umumiy DateTime GetDa teTime(int i) (yangi DateTime(); ) umumiy satr GetDataTypeName(int i) ( ""; qaytarish ) umumiy IDataReader GetData(int i) ( buni qaytaring; ) umumiy uzun GetChars(int i, uzun maydon ofset, char bufer, int buferoffset, int uzunlik) ( qaytarish -1; ) public char GetChar(int i) ( return " "; ) public long GetBytes(int i, long fieldOffset, byte bufer, int bufferoffset, int length) ( return -1; ) public byte GetByte(int i) ( return 0x00; ) public bool GetBoolean(int i) ( false qaytaradi; ) public int GetValues(Ob'ekt qiymatlari) (qaytish -1; )

Dispose() da faylni yopaman.

Interfeys amalga oshirilgandan so'ng, faylni yuklash usulini yozishingiz mumkin:

SaveToTable-ni bekor qiling(FileInfo dir, string TableName, string connetionString, Dictionary FieldIndex) ((var loader = new SqlBulkCopy(connestionString, SqlBulkCopyOptions.Default) dan foydalanish)) ( loader.DestinationTableName = TableName; loader.BulkCopyTimeout = 9999; loader.WriteToServer(new)Name(new)Filder.x);

Ana xolos. Fayl joylashuvi, jadval nomi, ulanish qatori va mos keladigan lug'atni ushbu funktsiyaga o'tkazish qoladi, masalan:

Lug'at FieldIndex= yangi lug'at (); FieldIndex.Add(0, "POSTALCODE"); 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, "YANGILANISH"); 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, "STATSTATUS"); FieldIndex.Add(19, "NORMDOC"); FieldIndex.Add(20, "COUNTER");

Hamma, e'tiboringiz uchun rahmat, yaxshi yuklab oling.