منع Excel من تحويل قيم نصية معينة إلى تواريخ تلقائيًا

StackOverflow https://stackoverflow.com/questions/165042

  •  03-07-2019
  •  | 
  •  

سؤال

هل يعرف أي شخص ما إذا كان هناك رمز مميز يمكنني إضافته إلى ملف CSV الخاص بي لحقل معين حتى لا يحاول Excel تحويله إلى تاريخ؟

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

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

المحلول

ولقد وجدت أن وضع '=' قبل علامة التنصيص سوف تنجز ما تريد. فإنه يفرض على البيانات أن يكون النص.

وعلى سبيل المثال. = "2008-10-03"، = "أكثر من نص"

تعديل (وفقا إلى وظائف أخرى) : لأنه من اكسل 2007 علة لاحظ Jeffiekins ينبغي للمرء أن استخدام الحل التي اقترحها أندرو : "=""2008-10-03"""

نصائح أخرى

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

المشكلة ليست مع فقط بلح في حقول النص، ولكن أي شيء رقمي يتم أيضًا تحويله من نص إلى أرقام.بعض الأمثلة حيث يكون هذا مشكلة:

  • الرمز البريدي/الرموز البريدية
  • أرقام الهاتف
  • أرقام الهوية الحكومية

والتي في بعض الأحيان يستطيع ابدأ بصفر واحد أو أكثر (0)، والتي يتم التخلص منها عند تحويلها إلى أرقام رقمية.أو تحتوي القيمة على أحرف يمكن الخلط بينها وبين العوامل الرياضية (كما في التواريخ:/، -).

هناك حالتان يمكنني التفكير فيهما في أن الحل "prepending ="، كما ذكرنا سابقًا، قد لا تكون مثالية يكون

  • حيث قد يتم استيراد الملف إلى برنامج آخر غير MS Excel (تتبادر إلى الذهن وظيفة دمج المراسلات في MS Word)،
  • حيث قد تكون سهولة القراءة البشرية مهمة.

الاختراق الخاص بي للتغلب على هذا

إذا قام أحد الأشخاص بإلحاق حرف غير رقمي و/أو غير تاريخي في القيمة، فسيتم التعرف على القيمة كنص ولن يتم تحويلها.سيكون الحرف غير القابل للطباعة أمرًا جيدًا لأنه لن يغير القيمة المعروضة.ومع ذلك، فإن حرف المسافة القديم العادي (\s، ASCII 32) لا يعمل مع هذا لأنه يتم قطعه بواسطة Excel ومن ثم يتم تحويل القيمة. لكن هناك العديد من الأحرف الفضائية المطبوعة وغير المطبوعة التي ستعمل بشكل جيد. الأسهل ومع ذلك إلحاق (إضافة بعد) حرف علامة التبويب البسيط ( ، ASCII 9).

فوائد هذا النهج:

  • متاح من لوحة المفاتيح أو برمز ASCII سهل التذكر (9)،
  • ولا مانع من الاستيراد
  • عادة لا يزعج نتائج دمج المراسلات (اعتمادًا على تخطيط القالب - ولكنه عادةً ما يضيف مساحة واسعة في نهاية السطر).(إذا كانت هذه مشكلة، فانظر إلى الشخصيات الأخرى، على سبيل المثال:المساحة ذات العرض الصفري (ZWSP، Unicode U+200B)
  • لا يشكل عائقًا كبيرًا عند عرض ملف CSV في برنامج "المفكرة" (إلخ)،
  • ويمكن إزالتها عن طريق البحث/الاستبدال في Excel (أو المفكرة وما إلى ذلك).
  • لا تحتاج إلى ذلك يستورد ملف CSV، ولكن يمكنك ببساطة النقر نقرًا مزدوجًا عليه يفتح CSV في Excel.

إذا كان هناك سبب لعدم رغبتك في استخدام علامة التبويب، فابحث في جدول Unicode عن شيء آخر مناسب.

خيار اخر

قد يكون إنشاء ملفات XML، والتي يتم قبول تنسيق معين لها أيضًا للاستيراد بواسطة إصدارات MS Excel الأحدث، والذي يسمح بالكثير من الخيارات المشابهة لتنسيق .XLS، لكن ليس لدي خبرة في هذا.

لذلك هناك خيارات مختلفة.اعتمادًا على متطلباتك/تطبيقك، قد يكون أحدهما أفضل من الآخر.


إضافة

يجب أن يقال أن الإصدارات الأحدث (2013+) من MS Excel لم تعد تفتح ملف CSV بتنسيق جدول البيانات - هناك عثرة سريعة أخرى في سير العمل مما يجعل Excel أقل فائدة ...على الأقل، توجد تعليمات للالتفاف حوله.انظر على سبيل المثال.هذا Stackoverflow: كيفية عرض ملفات .csv بشكل صحيح داخل Excel 2013؟.

العمل الخروج من حل [جرود] [والقضية التي أثارتها Jeffiekins، هل يمكن تعديل

"May 16, 2011"

إلى

"=""May 16, 2011"""

وكان لي مشكلة مماثلة، وهذا هو الحل الذي ساعدني دون الحاجة إلى تعديل محتويات ملف CSV:

إذا كان لديك المرونة لتسمية شيء آخر غير ملف "بتنسيق csv"، يمكنك تسميته بملحق ". TXT"، مثل "على Myfile.txt" أو "Myfile.csv.txt". ثم عند فتحه في Excel (وليس عن طريق السحب والإسقاط، ولكن باستخدام ملف> فتح أو قائمة الملفات المستخدمة مؤخرا)، Excel سيتم تزويدكم "معالج استيراد النص".

في الصفحة الأولى من المعالج، اختر "محدد" لنوع الملف.

في الصفحة الثانية من المعالج اختيار "،" كمحدد وأيضا اختيار مؤهل النص إذا كنت قد تحيط القيم الخاصة بك عن طريق ونقلت

في الصفحة الثالثة، حدد كل عمود على حدة وتعيين كل نوع "نص" بدلا من "عامة" لوقف Excel من العبث مع البيانات الخاصة بك.

وآمل أن يساعد هذا أنت أو أي شخص يعاني من مشكلة مماثلة!

تحذير: اكسل '07 (على الأقل) لديه (نوثر) علة: إذا كان هناك فاصلة في محتويات حقل، فإنه لا تحليل = "المجال، محتويات" بشكل صحيح، وإنما يضع كل شيء بعد فاصلة في الحقل التالي، بغض النظر عن علامات الاقتباس.

والحل الوحيد لقد وجدت أن يعمل هو القضاء على = عندما تشمل محتويات الحقل فاصلة.

وهذا قد يعني أن هناك بعض المجالات التي من المستحيل لتمثيل بالضبط "الحق" في Excel، ولكن الآن وأنا على ثقة لا أحد بالدهشة أيضا.

وأثناء إنشاء سلسلة المراد كتابتها إلى ملف CSV بلدي في C # اضطررت الى تنسيق عليه بهذه الطريقة:

"=\"" + myVariable + "\""

في إكسل 2010 فتح صفحة جديدة. على الشريط البيانات فوق "إحضار بيانات خارجية من نص". حدد ملف CSV ثم انقر فوق "فتح". انقر فوق {التالي". قم بإلغاء تحديد "الجدولة"، ضع علامة اختيار بجوار "فاصلة"، ثم انقر فوق "التالي". انقر في أي مكان على العمود الأول. في حين عقد التحول الرئيسية اسحب المنزلق عبر حتى يمكنك النقر في العمود الأخير، ثم حرر مفتاح التحول. انقر فوق "نص" زر الراديو ثم انقر فوق "إنهاء"

وسيتم استيراد جميع الأعمدة كنص، تماما كما كانت عليه في ملف CSV.

لا تزال مشكلة في إصدار Microsoft Office 2016، مزعجة إلى حد ما بالنسبة لأولئك منا الذين يعملون مع أسماء الجينات مثل MARC1، MARCH1، SEPT1 وما إلى ذلك.الحل الذي وجدته هو الأكثر عملية بعد إنشاء ملف ".csv" في لغة R، والذي سيتم بعد ذلك فتحه/مشاركته مع مستخدمي Excel:

  1. افتح ملف CSV كنص (المفكرة)
  2. انسخه (ctrl+a، ctrl+c).
  3. الصقها في ورقة Excel جديدة - سيتم لصقها كلها في عمود واحد كسلاسل نصية طويلة.
  4. اختر/حدد هذا العمود.
  5. انتقل إلى البيانات- "النص إلى الأعمدة..."، في النافذة المفتوحة اختر "محدد" (التالي).تأكد من وضع علامة "الفاصلة" (سيؤدي وضع علامة عليها إلى إظهار فصل البيانات إلى الأعمدة أدناه) (التالي)، في هذه النافذة، يمكنك اختيار العمود الذي تريده ووضع علامة عليه كنص (بدلاً من عام) (إنهاء).

هث

وهنا هو طريقة بسيطة نستخدمها في العمل هنا عند إنشاء ملف CSV في المقام الأول، فإنه لا تغيير القيم قليلا حتى أنها ليست مناسبة في جميع التطبيقات:

وأرفقت الفضاء لكافة القيم في CSV

وسوف تحصل على تجريد هذه المساحة من قبل التفوق من أرقام مثل "1"، "2.3" و "-2.9e4" ولكن ستبقى في تواريخ مثل "1993/01/10" والقيم المنطقية مثل "الحقيقية"، ووقف لهم يتم تحويلها إلى أنواع البيانات الداخلية في Excel.

وويتوقف أيضا التنصيص يجري انطلق على قراءة في، لذلك وسيلة مضمونة لجعل النص في ملف CSV لم تتغير عن طريق التفوق حتى لو كان بعض النصوص مثل "3.1415" هي أن تحاصر مع التنصيص وإلحاقها السلسلة بأكملها مع مساحة، أي (باستخدام علامات الاقتباس المفردة لاظهار ما ستكتب) "3.1415". ثم في التفوق دائما يكون لديك السلسلة الأصلية، إلا أنها محاطة علامات الاقتباس المزدوجة وإرفاق مسبقا بمسافة لذلك تحتاج إلى حساب لتلك الموجودة في أية صيغ الخ.

و(على افتراض إكسل 2003 ...)

عند استخدام أعمدة النص إلى معالج لديها، في خطوة 3 يمكنك تملي نوع البيانات لكل من الأعمدة. انقر على عمود في المعاينة وتغيير العمود الفاسقة من "عامة" إلى "نص".

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

وتغيير ملحق ملف .csv إلى .txt. هذا سيتوقف Excel من السيارات تحويل الملف عند فتحه. وإليك كيف تفعل ذلك: فتح Excel إلى ورقة عمل فارغة، إغلاق صفحة فارغة، ثم ملف => فتح واختر الملف الخاص بك مع الملحق .txt. هذا يفرض Excel لفتح "معالج استيراد النص" حيث انها سوف أسألك أسئلة حول كيف تريد لتفسير الملف. أولا عليك اختيار محدد الخاص بك (فاصلة، التبويب، الخ ...)، ثم (وهنا يكمن جزء مهم) اخترت مجموعة الأعمدة الأعمدة واختر التنسيق. إذا كنت تريد بالضبط ما هو في ملف ثم اختر "النص" و Excel سيتم عرض فقط ما بين المحددات.

2018

الحل المناسب الوحيد الذي نجح بالنسبة لي (وأيضًا دون تعديل ملف CSV).

اكسل 2010:

  1. إنشاء مصنف جديد
  2. البيانات > من النص > حدد ملف CSV الخاص بك
  3. في النافذة المنبثقة، اختر زر الاختيار "محدد"، ثم انقر على "التالي >"
  4. مربعات اختيار المحددات:حدد "فاصلة" فقط وقم بإلغاء تحديد الخيارات الأخرى، ثم انقر فوق "التالي >"
  5. في "معاينة البيانات"، قم بالتمرير إلى أقصى اليمين، ثم استمر في الضغط على مفتاح Shift وانقر على العمود الأخير (سيؤدي هذا إلى تحديد جميع الأعمدة).الآن في "تنسيق بيانات العمود"، حدد زر الاختيار "نص"، ثم انقر فوق "إنهاء".

إكسل أوفيس 365: (نسخة العميل)

  1. إنشاء مصنف جديد
  2. البيانات > من النص/CSV > حدد ملف CSV الخاص بك
  3. اكتشاف نوع البيانات > لا تكتشف

ملحوظة: Excel Office365 (إصدار الويب)، وأنا أكتب هذا، لن تتمكن من القيام بذلك.

(إكسل 2007 والإصدارات الأحدث)

كيفية إجبار Excel على عدم "اكتشاف" تنسيقات التاريخ دون تحرير الملف المصدر

أيضاً:

  • إعادة تسمية الملف باسم .txt
  • إذا لم تتمكن من القيام بذلك، فبدلاً من فتح ملف CSV مباشرةً في برنامج Excel، قم بإنشاء مصنف جديد ثم انتقل إلى
    Data > Get external data > From Text
    وحدد ملف CSV الخاص بك.

في كلتا الحالتين، ستظهر لك خيارات الاستيراد، ما عليك سوى تحديد كل عمود يحتوي على تواريخ وإخبار Excel بأن يقوم بتنسيقه كـ "نص" وليس "عام".

وأي من الحلول المقدمة هنا هو حل جيد. فإنه قد عمل لحالات فردية، ولكن فقط إذا كنت في السيطرة على العرض النهائي. خذ بلدي على سبيل المثال: قائمة المنتجات التي تبيعها لتجارة التجزئة تنتج عملي. هذا هو في شكل CSV واحتواء جزء رموز، وبعضها تبدأ من الصفر، وتحدد من قبل الشركات المصنعة (وليس تحت سيطرتنا). يسلب أصفار الرائدة والتي قد تتطابق مع الواقع منتج آخر. عملاء التجزئة يريدون القائمة في شكل CSV بسبب برامج معالجة في نهاية العام، والتي هي أيضا خارج عن سيطرتنا ومختلفة لكل عميل، لذلك لا يمكننا تغيير شكل ملفات CSV. لا مسبوقة '='، ولا تضاف علامات التبويب. البيانات في ملفات CSV الخام هو الصحيح. انها عندما يقوم العملاء فتح تلك الملفات في Excel تبدأ المشاكل. والعديد من الزبائن ليسوا حقا الدهاء الكمبيوتر. وسعهم على وشك فتح وحفظ مرفق البريد الإلكتروني. نحن نفكر في توفير البيانات في شكلين مختلفين قليلا: واحد كما اكسل ودية (باستخدام الخيارات المقترحة أعلاه بإضافة TAB، والآخر باسم 'سيد' ولكن هذا قد يكون التمني كما أن بعض الزبائن لا يفهمون لماذا نحن بحاجة للقيام بذلك. وفي الوقت نفسه نحن الاستمرار في الحفاظ على شرح السبب في أنها ترى في بعض الأحيان البيانات "خاطئة" في جداول البيانات الخاصة بهم. حتى يجعل مايكروسوفت التغيير السليم لا أرى أي حل مناسب لهذه، طالما واحدة لا تملك السيطرة على كيفية استخدام المستخدمين النهائيين الملفات.

وماذا فعلت لنفس هذه المشكلة كانت أن أضيف ما يلي قبل كل قيمة CSV: "=" "" واقتباس مزدوجة واحدة بعد كل قيمة CSV، قبل فتح الملف في Excel. تأخذ القيم التالية على سبيل المثال:

012345,00198475

ويجب أن تتغير هذه قبل الافتتاح في Excel ل:

"="""012345","="""00198475"

وبعد القيام بذلك، تظهر كل قيمة خلية كصيغة في Excel وذلك لن يتم تنسيق كرقم والتاريخ وغيرها على سبيل المثال، تظهر قيمة 012345 على النحو التالي:

="012345"

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

مثال 1:=("012345678905") يظهر كـ 012345678905

مثال 2:=("12-1954-12") يظهر كـ 1954-12-12, ، لا 12/12/1954.

وه لا إكسل. لا نوافذ الاعتراف الصيغة، فإن البيانات كتاريخ وautocorrects. لديك لتغيير إعدادات ويندوز.

و"لوحة تحكم" (-> "تبديل إلى طريقة العرض الكلاسيكية") -> "الإقليمية واللغة خيارات "-> علامة التبويب" خيارات إقليمية "->" تخصيص ... "-> علامة التبويب" الأرقام "-> و ثم تغيير حرف وفقا لما تريد.

HTTP: // شبكة الاتصالات العالمية. pcreview.co.uk/forums/enable-disable-auto-convert-number-date-t3791902.html

وانها ستعمل على جهاز الكمبيوتر الخاص بك، إذا لم يتم تغيير هذه الإعدادات على سبيل المثال على جهاز الكمبيوتر عملائك سيرون مواعيد بدلا من البيانات.

مرحبا لدي نفس المشكلة ،

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

لذا، يمكنك إنشاء ملف ‎.vbs باستخدام الكود أدناه (على سبيل المثال Modify_CSV.vbs)، ثم حفظه وإغلاقه. السحب والإسقاط الملف الأصلي الخاص بك إلى ملف vbscript الخاص بك.سيتم إنشاء ملف جديد بـ "SPACE_ADDED" لاسم الملف في نفس الموقع.

Set objArgs = WScript.Arguments

Set objFso = createobject("scripting.filesystemobject")

dim objTextFile
dim arrStr ' an array to hold the text content
dim sLine  ' holding text to write to new file

'Looping through all dropped file
For t = 0 to objArgs.Count - 1
    ' Input Path
    inPath = objFso.GetFile(wscript.arguments.item(t))

    ' OutPut Path
    outPath = replace(inPath, objFso.GetFileName(inPath), left(objFso.GetFileName(inPath), InStrRev(objFso.GetFileName(inPath),".") - 1) & "_SPACE_ADDED.csv")

    ' Read the file
    set objTextFile = objFso.OpenTextFile(inPath)


    'Now Creating the file can overwrite exiting file
    set aNewFile = objFso.CreateTextFile(outPath, True) 
    aNewFile.Close  

    'Open the file to appending data
    set aNewFile = objFso.OpenTextFile(outPath, 8) '2=Open for writing 8 for appending

    ' Reading data and writing it to new file
    Do while NOT objTextFile.AtEndOfStream
        arrStr = split(objTextFile.ReadLine,",")

        sLine = ""  'Clear previous data

        For i=lbound(arrStr) to ubound(arrStr)
            sLine = sLine + " " + arrStr(i) + ","
        Next

        'Writing data to new file
        aNewFile.WriteLine left(sLine, len(sLine)-1) 'Get rid of that extra comma from the loop


    Loop

    'Closing new file
    aNewFile.Close  

Next ' This is for next file

set aNewFile=nothing
set objFso = nothing
set objArgs = nothing

بدون تعديل ملف CSV الخاص بك، يمكنك:

  1. قم بتغيير خيار تنسيق خلايا Excel إلى "نص"
  2. ثم استخدم "معالج استيراد النص" لتحديد خلايا CSV.
  3. بمجرد استيرادها، قم بحذف تلك البيانات
  4. ثم قم بلصقه كنص عادي

سيقوم برنامج Excel بتنسيق خلايا CSV وفصلها بشكل صحيح كنص منسق متجاهلاً تنسيقات التاريخ التلقائية.

نوع من العمل السخيف، لكنه يتفوق على تعديل بيانات ملف CSV قبل الاستيراد.لقد تملص آندي بيرد وريتشارد من استخدام هذه الطريقة، لكنهما أضاعا بعض الخطوات المهمة.

وأنا أعلم أن هذا هو موضوع قديم. لتلك مثلي، الذين لا تزال لديها هذه المشكلة باستخدام مكتب 2013 عبر كائن بوويرشيل كوم يمكن استخدامها في طريقة opentext . والمشكلة هي أن هذا الأسلوب له العديد من الحجج، التي هي المتبادلة أحيانا حصرية. لحل هذه المشكلة يمكنك استخدام أسلوب استدعاء و-namedparameter أدخلت في هذا المنصب . على سبيل المثال سيكون

$ex = New-Object -com "Excel.Application"
$ex.visible = $true
$csv = "path\to\your\csv.csv"
Invoke-NamedParameter ($ex.workbooks) "opentext" @{"filename"=$csv; "Semicolon"= $true}

للأسف لقد اكتشفت للتو أن هذه الطريقة تكسر بطريقة ما إعراب CSV عندما تحتوي خلايا بفواصل. ويؤيد ذلك CSV لكن يبدو أن تنفيذ مايكروسوفت أن تنصتت. كما أنه لم بطريقة أو بأخرى لم يكشف حرف معينة الألمانية. يعطيها الثقافة الصحيحة لم يتغير هذا behaveiour. يتم حفظ كافة الملفات (CSV والكتابة) مع ترميز UTF8. أولا كتبت التعليمة البرمجية التالية لإدراج خلية CSV من الخلية.

$ex = New-Object -com "Excel.Application"
$ex.visible = $true;
$csv = "path\to\your\csv.csv";
$ex.workbooks.add();
$ex.activeWorkbook.activeSheet.Cells.NumberFormat = "@";
$data = import-csv $csv -encoding utf8 -delimiter ";"; 
$row = 1; 
$data | %{ $obj = $_; $col = 1; $_.psobject.properties.Name |%{if($row -eq1){$ex.ActiveWorkbook.activeSheet.Cells.item($row,$col).Value2= $_ };$ex.ActiveWorkbook.activeSheet.Cells.item($row+1,$col).Value2 =$obj.$_; $col++ }; $row++;}

ولكن هذا هو بطيء متردده، الذي هو السبب في أنني بحثت عن بديل. Appearently اكسل يسمح لك لتعيين قيم نطاق من الخلايا مع مصفوفة. لذلك أنا تستخدم خوارزمية في <لأ href = "https://powertoe.wordpress.com/2010/11/05/how-to-get-data-into-an-excel-spreadsheet-very-quickly-with-powershell -contd / "يختلط =" نوفولو noreferrer "> هذا بلوق لتحويل CSV في multiarray.

function csvToExcel($csv,$delimiter){
     $a = New-Object -com "Excel.Application"
     $a.visible = $true

    $a.workbooks.add()
     $a.activeWorkbook.activeSheet.Cells.NumberFormat = "@"
     $data = import-csv -delimiter $delimiter $csv; 
     $array = ($data |ConvertTo-MultiArray).Value
     $starta = [int][char]'a' - 1
     if ($array.GetLength(1) -gt 26) {
         $col = [char]([int][math]::Floor($array.GetLength(1)/26) + $starta) + [char](($array.GetLength(1)%26) + $Starta)
     } else {
         $col = [char]($array.GetLength(1) + $starta)
     }
     $range = $a.activeWorkbook.activeSheet.Range("a1:"+$col+""+$array.GetLength(0))
     $range.value2 = $array;
     $range.Columns.AutoFit();
     $range.Rows.AutoFit();
     $range.Cells.HorizontalAlignment = -4131
     $range.Cells.VerticalAlignment = -4160
}

 function ConvertTo-MultiArray {
     param(
         [Parameter(Mandatory=$true, Position=1, ValueFromPipeline=$true)]
         [PSObject[]]$InputObject
     )
     BEGIN {
         $objects = @()
         [ref]$array = [ref]$null
     }
     Process {
         $objects += $InputObject
     }
     END {
         $properties = $objects[0].psobject.properties |%{$_.name}
         $array.Value = New-Object 'object[,]' ($objects.Count+1),$properties.count
         # i = row and j = column
         $j = 0
         $properties |%{
             $array.Value[0,$j] = $_.tostring()
             $j++
         }
         $i = 1
         $objects |% {
             $item = $_
             $j = 0
             $properties | % {
                 if ($item.($_) -eq $null) {
                     $array.value[$i,$j] = ""
                 }
                 else {
                     $array.value[$i,$j] = $item.($_).tostring()
                 }
                 $j++
             }
             $i++
         }
         $array
     } 
} 
csvToExcel "storage_stats.csv" ";"

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

في حالتي، "Sept8" في ملف CSV تم إنشاؤها باستخدام R تم تحويله إلى "8 سبتمبر" قبل Excel 2013. تم حلها المشكلة باستخدام write.xlsx2 () وظيفة في حزمة XLSX لتوليد ملف الإخراج في شكل XLSX، والتي يمكن تحميلها من قبل Excel بدون تحويل غير المرغوب فيها. لذا، إذا يتم إعطاء ملف CSV، يمكنك محاولة تحميله في R وتحويلها إلى XLSX باستخدام وظيفة write.xlsx2 ().

الحل البديل باستخدام Google Drive (أو Numbers إذا كنت تستخدم جهاز Mac):

  1. افتح البيانات في Excel
  2. قم بتعيين تنسيق العمود الذي يحتوي على بيانات غير صحيحة إلى نص (تنسيق > خلايا > رقم > نص)
  3. قم بتحميل ملف .csv في Google Drive، وافتحه باستخدام جداول بيانات Google
  4. انسخ العمود المخالف
  5. لصق العمود في Excel كنص (تحرير > لصق خاص > نص)

وبدلاً من ذلك، إذا كنت تستخدم جهاز Mac للخطوة 3، فيمكنك فتح البيانات في Numbers.

(EXCEL 2016 والإصدارات الأحدث، في الواقع لم أجربه في الإصدارات الأقدم)

  1. فتح صفحة فارغة جديدة
  2. انتقل إلى علامة التبويب "البيانات"
  3. انقر فوق "من نص/CSV" واختر ملف CSV الخاص بك
  4. تحقق في المعاينة ما إذا كانت بياناتك صحيحة.
  5. في حالة تحويل بعض الأعمدة إلى تاريخ، انقر فوق "تحرير" ثم حدد نوع النص بالنقر فوق التقويم الموجود في رأس العمود
  6. انقر فوق "إغلاق وتحميل"

وحسنا وجدت طريقة بسيطة للقيام بذلك في Excel 2003 من خلال 2007. فتح المصنف XLS فارغة. ثم انتقل إلى القائمة بيانات، استيراد بيانات خارجية. حدد ملف CSV. تذهب من خلال المعالج ومن ثم في "تنسيق البيانات عمود" اختيار أي العمود الذي يحتاج إلى أن اضطر إلى "النص". هذا وسوف استيراد هذا العمود بأكمله كما شكل النص منع Excel من محاولة علاج أي خلايا معينة كتاريخ.

وهذه القضية لا تزال موجودة في ماك مكتب 2011 و 2013 مكتب، وأنا لا يمكن منع حدوث ذلك. يبدو مثل هذا الشيء الأساسي.

في حالتي كان لي القيم مثل "12" و "7-12" المغلقة داخل CSV بشكل صحيح بين فاصلتين مقلوب، وهذا يحول تلقائيا إلى تاريخ في التفوق، وإذا حاولت بعد ذلك تحويله إلى نص عادي فقط كنت الحصول على تمثيل عدد من التاريخ مثل 43768. بالإضافة إلى ذلك تنسيقه أعداد كبيرة وجدت في الباركود وأرقام EAN إلى 123E + الأرقام مرة أخرى والتي لا يمكن تحويلها مرة أخرى.

ولقد وجدت أن صفائح جوجل في Google Drive هو لا تحويل الأرقام إلى التواريخ. الباركود لا يكون لها الفواصل فيها كل 3 أحرف ولكن هذه هي إزالتها بسهولة. كان يعالج ملفات CSV بشكل جيد وخاصة عند التعامل مع MAC / ويندوز ملفات CSV.

وقد إنقاذ شخص في وقت ما.

أسهل حل أنني اكتشفت هذا اليوم.

  • فتح في كلمة
  • استبدل جميع الواصلات بشرطات قصيرة
  • حفظ وإغلاق
  • فتح في إكسل

بمجرد الانتهاء من التحرير، يمكنك دائمًا فتحه احتياطيًا في Word مرة أخرى لاستبدال الشرطات بالواصلات مرة أخرى.

ولصق الجدول في كلمة واحدة. القيام بعملية بحث / استبدال وتغيير كل شيء - (شرطات) إلى - (شرطة مزدوجة). نسخ ولصق إلى Excel. يمكن أن تفعل الشيء نفسه بالنسبة لغيرها من الرموز (/)، وما إذا كان في حاجة للرجوع إلى اندفاعة مرة واحدة في Excel، مجرد تنسيق العمود إلى نص، ثم جعل التغيير. ويساعد هذا الأمل.

وأفعل ذلك أرقام بطاقات الائتمان التي تبقي تحويل إلى العلمي: أنا في نهاية المطاف استيراد بلدي .csv إلى صفائح جوجل. خيارات الاستيراد يسمح الآن لتعطيل التنسيق التلقائي من قيم رقمية. أنا وضعت أية أعمدة الحساسة إلى نص عادي وتحميل كما XLSX.

وانها سير العمل الرهيب، ولكن على الأقل تترك قيمي الطريقة التي ينبغي أن يكون.

وأنا جعلت هذا ماكرو VBA الذي صيغ في الأساس مجموعة الانتاج كنص قبل لصق الأرقام. يعمل مثاليا بالنسبة لي عندما كنت تريد لصق القيم مثل 11/8، 23/6، 03/01 وما إلى ذلك دون اكسل تفسيرها كما التواريخ.

Sub PasteAsText()
' Created by Lars-Erik Sørbotten, 2017-09-17
Call CreateSheetBackup

Columns(ActiveCell.Column).NumberFormat = "@"

Dim DataObj As MSForms.DataObject
Set DataObj = New MSForms.DataObject
DataObj.GetFromClipboard

ActiveCell.PasteSpecial

End Sub

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

إذا وضع فاصلة معكوسة في بداية هذا المجال، وسوف يتم تفسيرها على أنها نص.

وعلى سبيل المثال: يصبح 25/12/2008 '25/12/2008

وأنت أيضا قادرا على تحديد نوع الحقل عند استيراد.

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