سؤال

أقوم بإنتاج تقرير كملف CSV.عندما أحاول فتح الملف في Excel، فإنه يضع افتراضًا حول نوع البيانات بناءً على محتويات الخلية، ويعيد تنسيقه وفقًا لذلك.

على سبيل المثال، إذا كان ملف CSV يحتوي على

...,005,...

ثم يعرضها Excel على أنها 5.هل هناك طريقة لتجاوز هذا وعرض 005؟

أفضل أن أفعل شيئًا ما بالملف نفسه، حتى يتمكن المستخدم من النقر نقرًا مزدوجًا على ملف CSV لفتحه.

أستخدم إكسل 2003.

هل كانت مفيدة؟

المحلول

لا توجد طريقة سهلة للتحكم في التنسيق الذي يطبقه برنامج Excel عند فتح ملف بتنسيق ‎.csv.ومع ذلك، المدرجة أدناه هي ثلاثة أساليب قد تساعد.

تفضيلي هو الخيار الأول.

الخيار 1 - تغيير البيانات في الملف

يمكنك تغيير البيانات في ملف .csv كما يلي...،=”005”،...سيتم عرض هذا في Excel كـ ...،005,...

سيحتفظ برنامج Excel بالبيانات كصيغة، ولكن نسخ العمود واستخدام لصق القيم الخاصة سيؤدي إلى التخلص من الصيغة مع الاحتفاظ بالتنسيق

الخيار 2 - تنسيق البيانات

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

الخيار 3 – تغيير امتداد الملف إلى .dif (تنسيق تبادل البيانات)

قم بتغيير امتداد الملف واستخدم معالج استيراد الملفات للتحكم في التنسيقات.يتم فتح الملفات ذات الامتداد .dif تلقائيًا بواسطة Excel عند النقر عليها مرتين.

خطوة بخطوة:

  • قم بتغيير امتداد الملف من .csv ل .dif
  • انقر نقرًا مزدوجًا على الملف لفتحه في برنامج Excel.
  • سيتم إطلاق "معالج استيراد الملفات".
  • اضبط "نوع الملف" على "محدد" وانقر على زر "التالي".
  • ضمن المحددات، حدد "فاصلة" وانقر على زر "التالي".
  • انقر على كل عمود من بياناتك المعروضة وحدد "تنسيق بيانات العمود".يجب تنسيق العمود ذو القيمة "005" كـ "نص".
  • انقر فوق زر "إنهاء"، سيتم فتح الملف بواسطة Excel بالتنسيقات التي حددتها.

نصائح أخرى

لا تستخدم CSV، استخدم SYLK.
http://en.wikipedia.org/wiki/SYmbolic_LinK_(SYLK)

فهو يوفر قدرًا أكبر من التحكم في التنسيق، ولن يحاول Excel تخمين نوع الحقل من خلال فحص المحتويات.يبدو الأمر معقدًا بعض الشيء، لكن يمكنك التخلص منه باستخدام مجموعة فرعية صغيرة جدًا.

يعمل هذا مع Microsoft Office 2010، الإصدار 14 من Excel

لقد أخطأت في قراءة تفضيل البروتوكول الاختياري "لفعل شيء للملف نفسه." ما زلت أحتفظ بهذا لأولئك الذين يريدون حل لتنسيق الاستيراد مباشرة

  1. فتح ملف فارغ (جديد) (ملف -> جديد من المصنف)
  2. افتح معالج الاستيراد (البيانات -> من النص)
  3. حدد ملف .csv الخاص بك وقم بالاستيراد
  4. في مربع الحوار، اختر "محدد"، ثم انقر فوق "التالي".
  5. اختر المحددات الخاصة بك (قم بإلغاء تحديد كل شيء ما عدا "الفاصلة")، واختر مؤهلات النص (من المحتمل {لا شيء})، ثم انقر فوق "التالي"
  6. في ال معاينة البيانات حدد العمود الذي تريد أن يكون نصًا.ينبغي تسليط الضوء.
  7. في ال تنسيق بيانات العمود الحقل، حدد "النص".
  8. انقر فوق انتهى.

يمكنك ببساطة تنسيق النطاق الخاص بك كنص.

أيضًا هنا مقالة لطيفة عن تنسيقات الأرقام وكيف يمكنك برمجتها.

لقد اكتشفت في الواقع أنه، على الأقل بدءًا من Office 2003، يمكنك حفظ جدول بيانات Excel كملف XML.وبالتالي، يمكنني إنتاج ملف XML وعندما أنقر عليه نقرًا مزدوجًا، سيتم فتحه في Excel.فهو يوفر نفس مستوى التحكم الذي يوفره SYLK، لكن بناء جملة XML أكثر سهولة.

يمكن أن تساعد إضافة مساحة غير قابلة للكسر في الخلية.على سبيل المثال:"firstvalue";"secondvalue";"005 ";"othervalue"

فهو يفرض على Excel معاملته كنص ولا تكون المسافة مرئية.في نظام التشغيل Windows، يمكنك إضافة مسافة غير منقسمة عن طريق الضغط على Alt+0160.انظر هنا لمزيد من المعلومات: http://en.wikipedia.org/wiki/Non-breaking_space

تم التجربه على اكسس 2010نأمل أن يساعد هذا الأشخاص الذين ما زالوا يبحثون عن حل مناسب لهذه المشكلة.

لقد واجهت هذه المشكلة عند تصدير بيانات CSV من كود C#، وقمت بحل هذه المشكلة عن طريق إضافة البيانات الصفرية البادئة مسبقًا بحرف علامة التبويب ، لذلك تم تفسير البيانات كنص بدلاً من كونها رقمية في Excel (ومع ذلك، على عكس إضافة الأحرف الأخرى مسبقًا، لن يحدث ذلك) لا يمكن رؤيته).

لقد أعجبتني الطريقة = "001"، ولكن هذا لن يسمح بإعادة استيراد بيانات CSV المصدرة مرة أخرى إلى تطبيق C# الخاص بي دون إزالة كل هذا التنسيق من ملف الاستيراد CSV (بدلاً من ذلك سأقوم فقط بقص بيانات الاستيراد) .

أعتقد أنه عند استيراد الملف يمكنك تحديد نوع العمود.اجعله نصًا بدلاً من الرقم.ليس لدي نسخة أمامي في الوقت الحالي للتحقق منها.

قم بتحميل ملف CSV إلى oleDB وإجبار جميع أنواع البيانات المستنتجة على السلسلة

لقد سألت نفس السؤال ثم أجبت عليه بالكود.

في الأساس، عندما يتم تحميل ملف CSV، يقوم برنامج تشغيل oledb بوضع افتراضات، ويمكنك إخباره بالافتراضات التي يجب القيام بها.

يفرض الكود الخاص بي على جميع أنواع البيانات سلسلة بالرغم من ذلك ...من السهل جدًا تغيير المخطط.لأغراضي، استخدمت xslt للحصول على ti بالطريقة التي أردتها - لكنني أقوم بتحليل مجموعة واسعة من الملفات.

أعلم أن هذا سؤال قديم، ولكن لدي حل غير مدرج هنا.

عندما تقوم بإنشاء ملف CSV أضف مسافة بعد الفاصلة ولكن قبل القيمة الخاصة بك، على سبيل المثال: , 005,.

لقد نجح هذا في منع تنسيق التاريخ التلقائي في برنامج Excel 2007 على أية حال.

لا تعمل طريقة معالج استيراد النص عندما يكون ملف CSV الذي يتم استيراده به فواصل أسطر داخل الخلية.تتعامل هذه الطريقة مع هذا السيناريو (على الأقل مع البيانات المحددة بعلامات الجدولة):

  1. إنشاء ملف إكسل جديد
  2. Ctrl+A لتحديد كافة الخلايا
  3. في مربع التحرير والسرد تنسيق الأرقام، حدد نص
  4. فتح ملف محدد بعلامات التبويب في محرر النصوص
  5. حدد الكل وانسخه والصقه في Excel

لقد كان هذا يقودني إلى الجنون طوال اليوم (نظرًا لأنه لا يمكنك بالفعل التحكم في أنواع أعمدة Excel قبل فتح ملف CSV)، وقد نجح هذا بالنسبة لي، باستخدام VB.NET وExcel Interop:

        'Convert .csv file to .txt file.
        FileName = ConvertToText(FileName)

        Dim ColumnTypes(,) As Integer = New Integer(,) {{1, xlTextFormat}, _
                                                        {2, xlTextFormat}, _
                                                        {3, xlGeneralFormat}, _
                                                        {4, xlGeneralFormat}, _
                                                        {5, xlGeneralFormat}, _
                                                        {6, xlGeneralFormat}}

        'We are using OpenText() in order to specify the column types.
        mxlApp.Workbooks.OpenText(FileName, , , Excel.XlTextParsingType.xlDelimited, , , True, , True, , , , ColumnTypes)
        mxlWorkBook = mxlApp.ActiveWorkbook
        mxlWorkSheet = CType(mxlApp.ActiveSheet, Excel.Worksheet)


Private Function ConvertToText(ByVal FileName As String) As String
    'Convert the .csv file to a .txt file.
    'If the file is a text file, we can specify the column types.
    'Otherwise, the Codes are first converted to numbers, which loses trailing zeros.

    Try
        Dim MyReader As New StreamReader(FileName)
        Dim NewFileName As String = FileName.Replace(".CSV", ".TXT")
        Dim MyWriter As New StreamWriter(NewFileName, False)
        Dim strLine As String

        Do While Not MyReader.EndOfStream
            strLine = MyReader.ReadLine
            MyWriter.WriteLine(strLine)
        Loop

        MyReader.Close()
        MyReader.Dispose()
        MyWriter.Close()
        MyWriter.Dispose()

        Return NewFileName
    Catch ex As Exception
        MsgBox(ex.Message)
        Return ""
    End Try

End Function

عند فتح ملف CSV، تحصل على معالج استيراد النص.في الخطوة الأخيرة من المعالج، يجب أن تكون قادرًا على استيراد العمود المحدد كنص، وبالتالي الاحتفاظ بالبادئة "00".وبعد ذلك يمكنك تنسيق الخلية بالطريقة التي تريدها.

لقد حاولت باستخدام Excel 2007 ويبدو أنه يعمل.

حسنًا، لا ينبثق Excel مطلقًا معالج ملفات CSV.إذا قمت بإعادة تسميته إلى ‎.txt، فسترى المعالج عندما تقوم بإجراء ملف>فتح في Excel في المرة التالية.

ضع اقتباسًا واحدًا قبل الحقل.وسيعامله Excel كنص، حتى لو كان يبدو كرقم.

...,`005,...

يحرر: هذا خطأ.تعمل خدعة الفاصلة العليا فقط عند إدخال البيانات مباشرة في برنامج Excel.عند استخدامه في ملف CSV، تظهر الفاصلة العليا في الحقل، وهو ما لا تريده.

http://support.microsoft.com/kb/214233

ما عليك سوى إضافة "قبل الرقم الموجود في مستند CSV.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top