هل من الممكن إجبار Excel على التعرف على ملفات CSV UTF-8 تلقائيًا؟


Answers

سوف تحدد علامة UTF-8 Byte-order بإصدار Excel 2007+ إلى حقيقة أنك تستخدم UTF-8. (انظر هذا المنصب SO ).

في حالة وجود نفس المشاكل التي يواجهها أي شخص ، لا تقوم فئة ترميز UTF8 الخاصة بـ .NET بإخراج علامة أمر البايت حتى عندما يتم إخبار منشئها بشكل صريح. يجب عليك استخدام هذا الحل إذا كنت تريد بالفعل حفظه باستخدام علامة ترتيب بايت.

Question

أقوم بتطوير جزء من تطبيق مسؤول عن تصدير بعض البيانات إلى ملفات CSV. يستخدم التطبيق دائمًا UTF-8 نظرًا لطبيعته المتعددة اللغات على جميع المستويات. لكن فتح ملفات CSV هذه (التي تحتوي على علامات التشكيل والرسائل السيريلية والأحرف اليونانية) في Excel لا يحقق النتائج المتوقعة التي تظهر شيئًا مثل Г„/Г¤, Г–/Г¶ . ولا أعرف كيفية إجبار Excel على فهم أن ملف CSV المفتوح مرمز بتشفير UTF-8. كما أنني حاولت تحديد UTF-8 BOM EF BB BF ، لكن Excel يتجاهل ذلك.

هل هناك أي عمل في الأرجاء؟

PS ما هي الأدوات التي من المحتمل أن تتصرف مثل Excel؟

تحديث

يجب أن أقول إنني قد أربكت المجتمع بصياغة السؤال. عندما كنت أطرح هذا السؤال ، سألت عن طريقة لفتح ملف UTF-8 CSV في Excel دون أي مشاكل للمستخدم ، بطريقة بطلاقة وشفافة. ومع ذلك ، استخدمت تركيبة خاطئة لطلب القيام بذلك تلقائيًا . هذا مربك جداً وهو يتعارض مع أتمتة الماكرو VBA. هناك إجابتان على هذه الأسئلة أقدرها أكثر من غيرها: أول إجابة من قبل Alex https://.com/a/6002338/166589 ، وقد قبلت هذه الإجابة ؛ والثانية عن طريق علامة https://.com/a/6488070/166589 التي ظهرت في وقت لاحق قليلا. من وجهة نظر قابلية الاستخدام ، يبدو أن Excel تفتقر إلى دعم UTF-8 CSV سهل الاستخدام ، لذا أعتبر كل الإجابات صحيحة ، وقد قبلت إجابة أليكس أولاً لأنها ذكرت فعلاً أن برنامج Excel لم يتمكن من القيام بذلك هذا بشفافية. هذا هو ما أخلط معه تلقائياً هنا. تشجع إجابة مارك طريقة أكثر تعقيدًا للمستخدمين الأكثر تقدمًا لتحقيق النتيجة المتوقعة. كل الإجابات رائعة ، ولكن واحدة أليكس يناسب سؤالي غير المحدد بوضوح أفضل قليلا.

تحديث 2

بعد خمسة أشهر من التعديل الأخير ، لاحظت أن إجابة أليكس قد اختفت لسبب ما. آمل حقاً ألا تكون مشكلة تقنية ، وآمل ألا يكون هناك المزيد من النقاش حول أي إجابة أكبر الآن. لذلك أنا أقبل إجابة مارك كأفضل واحد.




السؤال القديم ، لكن الحل هو أبسط:

  1. افتح CSV في المفكرة
  2. حفظ باسم -> حدد الترميز الصحيح
  3. افتح الملف الجديد



  1. تحميل وتثبيت LibreOffice احسب
  2. افتح ملف CSV من اختيارك في LibreOffice Calc
  3. أشكر السماوات التي تظهر معالج نص الاستيراد ...
  4. ... حدد خيارات التشفير ومحددات الأحرف الخاصة بك
  5. حدد البيانات الناتجة في Calc ثم قم بنسخ لصق إلى Excel



قائمة رائعة بالفعل من الإجابات ، ولكن بما أن واحدة جيدة واحدة ما زالت مفقودة ، سوف أذكرها هنا: افتح ملف csv مع أوراق google واحفظه مرة أخرى إلى الكمبيوتر المحلي كملف excel.

على عكس Microsoft ، تمكنت Google من دعم ملفات UTF-8 csv حتى تعمل فقط على فتح الملف هناك. والتصدير إلى تنسيق التفوق يعمل أيضا فقط. وعلى الرغم من أن هذا قد لا يكون الحل المفضل للجميع ، إلا أنه آمن تمامًا ، وعدد النقرات ليس مرتفعًا كما قد يبدو ، خاصةً عندما تكون قد سجلت الدخول بالفعل إلى google على أي حال.




لقد استخدمنا هذا الحل:

  1. قم بتحويل CSV إلى UTF-16
  2. إدراج BOM في بداية الملف
  3. استخدم علامة التبويب كفاصل للحقل



كان لديه نفس المشاكل مع ملفات CSV التي تم إنشاؤها PHP. تجاهل Excel BOM عندما تم تعريف "sep=,\n" فاصل "sep=,\n" عبر "sep=,\n" في بداية المحتوى (ولكن بالطبع بعد BOM).

لذا ، قم بإضافة BOM ( "\xEF\xBB\xBF" ) في بداية المحتوى وتعيين الفاصلة المنقوطة كفاصل عبر fputcsv($fh, $data_array, ";"); عمل الحيلة.




هذا هو حل عملي:

vbFILEOPEN = "your_utf8_file.csv"
Workbooks.OpenText Filename:=vbFILEOPEN, DataType:=xlDelimited, Semicolon:=True, Local:=True, Origin:=65001

المفتاح هو الأصل: = 65001




بسيط الماكرو vba لفتح ملفات نصية و csv 8 utf

Sub OpenTextFile()

   filetoopen = Application.GetOpenFilename("Text Files (*.txt;*.csv), *.txt;*.csv")
   If filetoopen = Null Or filetoopen = Empty Then Exit Sub

   Workbooks.OpenText Filename:=filetoopen, _
   Origin:=65001, DataType:=xlDelimited, Comma:=True

End Sub

المنشأ: = 65001 هو UTF-8. الفاصلة: صحيح لملفات .csv موزعة في colums

احفظه في Personal.xlsb لجعله متوفرًا دائمًا. إضفاء الطابع الشخصي على شريط أدوات التفوق إضافة زر استدعاء الماكرو وفتح الملفات من هناك. يمكنك إضافة المزيد من التنسيق إلى الماكرو ، مثل التهيئة التلقائية للعمود ، والمحاذاة ، وما إلى ذلك.




نعم ، هذا ممكن. كما لاحظنا من قبل العديد من المستخدمين ، يبدو أن هناك مشكلة مع excel في قراءة علامة ترتيب البايت الصحيحة عند تشفير الملف في UTF-8. مع UTF-16 لا يبدو أن لديها مشكلة ، لذلك فهي مستوطنة UTF-8. الحل الذي أستخدمه لهذا هو إضافة BOM ، مرتين. لهذا أقوم بتنفيذ الأمر sed التالي مرتين:

sed -I '1s/^/\xef\xbb\xbf/' *.csv

، حيث يمكن استبدال حرف البدل بأي اسم للملف. ومع ذلك ، يؤدي هذا إلى حدوث تغيير في sep = في بداية ملف .csv. عندئذٍ سيفتح الملف .csv بشكل طبيعي في excel ، لكن مع صف إضافي بـ "sep =" في الخلية الأولى. يمكن أيضًا إزالة "sep =" في المصدر .csv نفسه ، لكن عند فتح الملف باستخدام VBA ، يجب تحديد المحدد:

Workbooks.Open(name, Format:=6, Delimiter:=";", Local:=True)

التنسيق 6 هو تنسيق .csv. تعيين محلي على true ، في حالة وجود تواريخ في الملف. إذا لم يتم تعيين Local على "true" ، فستتم إعادة توطين التواريخ ، مما يؤدي في بعض الحالات إلى تلف تنسيق .csv.




هذا سؤال قديم ولكني واجهت مشكلة مماثلة وقد يساعد الحل الآخرين:

لديه نفس المشكلة عند كتابة بيانات نص CSV إلى ملف ، ثم يؤدي فتح ملف .csv في Excel إلى تحويل كل النص إلى عمود واحد. بعد قراءة الإجابات المذكورة أعلاه ، جربت ما يلي ، والذي يبدو أنه حل المشكلة.

تطبيق ترميز UTF-8 عند إنشاء StreamWriter الخاص بك. هذا هو.

مثال:

using (StreamWriter output = new StreamWriter(outputFileName, false, Encoding.UTF8, 2 << 22)) {
   /* ... do stuff .... */
   output.Close();
}



Links