ما الذي تخزّنه الخلية فعلًا
تحمل خلية جدول البيانات شيئين منفصلين: قيمة وتنسيق رقمي. فالقيمة 0.15 يمكن أن تظهر بصورة 15% أو 0.15 أو £0.15 أو 15.00%، ولا يغيّر أيٌّ من ذلك القيمة قيد شعرة. هذه أنفع حقيقة على الإطلاق عن جداول البيانات، ولهذا تطلب منك أداة «تحويل Excel إلى CSV» أن تختار بين «كما تظهر في Excel» و«أرقام خام، وتواريخ ISO» بدلًا من أن تخمّن. الخيار الأول يكتب النص الظاهر على الشاشة حرفيًا — 15/03/2024 و1,234.50 و12% — وهو ما يفعله أمر «حفظ باسم» في Excel نفسه، وما يتوقعه شخص يقرأ ملف CSV. والخيار الثاني يكتب أرقامًا مجردة وتواريخ بصيغة ISO، وهو ما تتوقعه قاعدة بيانات أو سكربت. اختر الخطأ وسيفشل الاستيراد بطريقة توحي بأن البيانات تالفة.
التواريخ أرقام تتنكّر في هيئة تواريخ. تحمل خلية التاريخ عددًا تسلسليًا للأيام، ونقطة البداية التي يُعدّ منها تعتمد على الملف: المصنفات التي كتبها Excel على Windows تعدّ من عام 1900، والمصنفات القادمة من Excel القديم على Mac تعدّ من عام 1904، والفرق بينهما 1,462 يومًا. ونظام 1900 أغرب من ذلك — فهو يعتقد أن 29 فبراير 1900 كان موجودًا، وهي علّة موروثة من Lotus 1-2-3 أُبقي عليها منذ ذلك الحين من أجل التوافق. تقرأ الأدوات هنا مؤشر نقطة البداية الخاص بكل مصنف، وتعيد إنتاج يوم السنة الكبيسة الوهمي في موضعه الصحيح تمامًا، ولهذا يطابق التاريخ المحوَّل هنا ما يعرضه Excel بدلًا من أن ينزلق أربع سنوات ويومًا.
الصيغة ونتيجتها مخزّنتان جنبًا إلى جنب. يحتفظ المصنف بنص الصيغة وبآخر قيمة حسبتها. التحويلات من مصنف إلى مصنف — «تحويل ODS إلى XLSX» و«تحويل XLS إلى XLSX» و«تحويل XLSX إلى ODS» — تنقل الصيغ نفسها، مترجمةً بين مفرداتَي الدوال في البرنامجين، فتظل الورقة تعيد الحساب عندما تعدّلها؛ أما الدوال القليلة الموجودة في جانب واحد فقط فتظهر بصورة #NAME? حتى تستبدلها. وكل ما يغادر عالم جداول البيانات — CSV وJSON وXML — لا يحمل إلا النتيجة المحسوبة، لأنه لا مكان لمفهوم الصيغة في أي من هذه الصيغ.
لا يستطيع CSV تمثيل معظم محتوى المصنف، والتظاهر بغير ذلك هو حيث تضيع البيانات. فهو لا يعرف الأوراق، لذا تصبح كل ورقة ملفًا مستقلًا (وملف ZIP إن أردتها كلها). ولا يعرف أنواع الخلايا، فكل حقل نصٌّ إلى أن يخمّن شيءٌ ما نوعه. ولا تنسيقات ولا صيغ ولا مخططات ولا صور ولا ألوان ولا عروض أعمدة. ويجب حسم الخلايا المدمجة بطريقة أو بأخرى — القيمة في الخلية الأولى، أو مكررةً على امتداد الدمج. كما أنه لا يسجّل فاصله ولا فاصله العشري ولا ترميزه، ولهذا يصل ملف أوروبي مفصول بفواصل منقوطة وبفواصل للأعداد العشرية في عمود واحد في Excel الأمريكي، ولهذا تتحول الحروف المشكَّلة إلى رموز مشوّهة ما لم يبدأ الملف بعلامة ترتيب البايت (BOM).
النص الذي يبدو رقمًا هو حيث يقع الضرر الحقيقي. يخمّن Excel خلية خلية عندما تفتح ملف CSV: يفقد الرمز البريدي 01234 صفره، ويصبح رقم طلب من 16 خانة 1.23457E+15 ولا يمكن استرجاعه، ويتحول اسم الجين SEPT2 إلى تاريخ — وهي مشكلة بلغت من الخطورة أن أعاد مجتمع علم الوراثة تسمية جيناته. أما «تحويل CSV إلى Excel» فتقرر مرة واحدة لكل عمود، بناءً على كل قيمة فيه، ولا تحوّل إلا حين يتفق العمود كله؛ وكل ما يبدأ بأصفار، وكل عدد صحيح أطول من أن يحمله رقم JavaScript بدقة، يبقى نصًا. وتطبّق «تحويل JSON إلى CSV» العناية نفسها في الاتجاه المعاكس، فتنسخ المعرّفات ذات 64 بت خانةً خانة حيث تقرّبها معظم أدوات التحويل.
لكل من JSON وXML ما يُسقطه. لا يعرف JSON نوعًا للتاريخ إطلاقًا، فتنتقل التواريخ نصوصًا وعلى الكود المستقبِل أن يعرف ما الذي ينظر إليه. أما XML الخاص بالبيانات فيحمل القيم فقط، دون تنسيق أو مخططات أو صور — وهذا بالضبط ما تريده تغذية استيراد، لا ما تريده أنت إن كان الهدف الحفاظ على المصنف كما هو.
حيث يكون المتصفح الأداة الخطأ حقًا
سبع من هذه الأدوات لا ترسل ملفك إلى أي مكان: «تحويل Excel إلى CSV» و«تحويل CSV إلى Excel» و«تحويل CSV إلى JSON» و«تحويل JSON إلى CSV» و«تحويل XML إلى Excel» و«تحويل Excel إلى XML» و«تحويل PDF إلى Excel». لا يُخزَّن أي شيء، وهذا مهم حين يكون الملف كشف رواتب أو قائمة عملاء. أربع منها مختلفة — «تحويل Excel إلى PDF» و«تحويل ODS إلى XLSX» و«تحويل XLS إلى XLSX» و«تحويل XLSX إلى ODS» تسلّم الملف إلى خادمنا، لأن تخطيط صفحة مطبوعة، أو نقل الخطوط والألوان والتنسيق الشرطي والمخططات بين الصيغ، ليس أمرًا تستطيع صفحة ويب محاكاته. تنتقل هذه الملفات عبر اتصال مشفّر، وتُحوَّل، وتُحذف لحظة جاهزية التنزيل. وإذا تعذّر الوصول إلى الخادم، تلجأ كل منها إلى محوّلها الخاص، الذي يحافظ على القيم والصيغ والتنسيقات الرقمية والخلايا المدمجة وعروض الأعمدة، لا على الخطوط والألوان والمخططات، ويخبرك بأنه فعل ذلك.
الحجم. تحتفظ الأدوات العاملة في المتصفح بالجدول كاملًا في الذاكرة، فالحدّ الأقصى هو ميزانية الذاكرة في علامة التبويب — مريح حتى عشرات الميغابايتات، ومتعثر بعد المئة، وميؤوس منه مع ملف مستخرج بعدة غيغابايتات. تتوقف محوّلات المصنفات عند 50 MB للملف، و«تحويل Excel إلى PDF» عند 40 MB، وكلاهما يخبرك بذلك قبل التحويل لا بعده. أما ورقة Excel نفسها فتتوقف عند 1,048,576 صفًا، وهذا حدّ الصيغة لا حدّنا؛ وتكمل «تحويل CSV إلى Excel» في أوراق إضافية مع تكرار صف العناوين بدلًا من اقتطاع بياناتك بصمت.
العمل الحقيقي على البيانات. أداة التحويل ليست قاعدة بيانات. ضمّ جدولين، وإزالة التكرار، والتجميع، وتصفية عشرة ملايين صف، أو فحص ملف مُصدَّر فوضوي، كلها مهام لأدوات صُنعت لها، والمجانية منها ممتازة: csvkit لجراحة سريعة على CSV من سطر الأوامر، وMiller للأمر نفسه على JSON وCSV معًا، وqsv للسرعة مع الملفات الضخمة، وDuckDB لتشغيل استعلامات SQL حقيقية مباشرة على ملف CSV أو Parquet، وpandas إن كنت تعمل بـ Python أصلًا.
وحدات الماكرو، وكل ما يُشغَّل. لا يمكن نقل VBA إلى .xlsx، فهي ببساطة لا مكان فيها له، ولا يُنقل إلى .ods أيضًا لأن LibreOffice لا يشغّل إلا جزءًا من VBA، وستظهر الفروق أرقامًا خاطئة لا رسائل خطأ. إذا كان المصنف يعتمد على وحدات الماكرو، فاحتفظ بالأصل إلى جانب النسخة المحوَّلة. أما الملفات المحمية بكلمة مرور فيجب إزالة كلمة المرور منها أولًا، في البرنامج الذي وضعها.
الأتمتة. تعمل هذه الأدوات حين ينقر شخص. أما تحويل تغذية ليلية فمهمة لسطر الأوامر: LibreOffice في وضع التشغيل دون واجهة (headless) يتعامل مع كل صيغة في هذه الصفحة.
الاختيار بين الأدوات المتشابهة الأسماء
تحويل Excel إلى CSV مقابل تحويل Excel إلى XML. كلتاهما تقرأ مصنفًا وتكتب ملف بيانات مسطّحًا، والوجهة هي التي تحسم. يذهب CSV إلى جداول البيانات وقواعد البيانات وأي شيء يقول «ارفع ملف CSV». ويذهب XML إلى عمليات الاستيراد والتكامل التي تحدد أسماء العناصر — تضبط أنت اسم الجذر واسم الصف، وتصبح العناوين أسماء عناصر، وتخرج القيم أرقامًا مجردة وتواريخ ISO. ويمكن لأداة «تحويل Excel إلى XML» أيضًا كتابة XML Spreadsheet 2003، وهو شيء مختلف تمامًا: صيغة يعيد Excel فتحها مصنفًا، لحالات يطلب فيها نظامٌ «Excel XML» لا XML بياناتك الخاص.
تحويل CSV إلى Excel مقابل تحويل CSV إلى JSON. المحلّل نفسه، والكشف نفسه عن النوع لكل عمود، ومخرجات مختلفة. تنتج «تحويل CSV إلى Excel» ملف .xlsx بتواريخ وأرقام حقيقية يمكنك جمعها وفرزها، وصف عناوين مثبّت قابل للتصفية — للبشر. وتنتج «تحويل CSV إلى JSON» مصفوفة كائنات، أو مصفوفة مصفوفات، أو كائنًا بمفاتيح، أو JSON Lines — للكود. وإن كان الجواب «كلاهما»، فحوّل إلى Excel للبشر وإلى JSON لمسار المعالجة؛ وسيتطابقان، لأن أنواع الأعمدة حُسمت بالطريقة نفسها.
تحويل XML إلى Excel مقابل تحويل Excel إلى XML. ليستا مجرد اتجاهين متعاكسين. على «تحويل XML إلى Excel» أن تعثر على الجدول أولًا: تبحث عن العناصر المتكررة تحت الأب نفسه — كل <book> في فهرس، وكل <item> في موجز RSS — وتمنح كل مجموعة درجة، وتعرض البقية على بُعد نقرة واحدة، ثم تسطّح السمات والعناصر المتداخلة في أعمدة تحمل أسماء مساراتها. أما «تحويل Excel إلى XML» فلا شيء لديها لتبحث عنه، لأن صفوفك هي السجلات أصلًا.
تحويل XLS إلى XLSX مقابل تحويل CSV إلى Excel. كلتاهما تنتهي بمصنف حديث. ترقّي «تحويل XLS إلى XLSX» ملفًا ثنائيًا حقيقيًا من Excel 97–2003 وتحافظ على كل ما فيه — الأوراق والصيغ والتنسيق والمخططات. وتبني «تحويل CSV إلى Excel» مصنفًا من نص عادي لم يحمل شيئًا من ذلك قط. والتداخل هو الحالة الوسطى المزعجة: كثير من تطبيقات الويب تصدّر جدول HTML أو ملف XML وتسمّيه .xls. تتعرّف «تحويل XLS إلى XLSX» على هذه الملفات على حقيقتها وتحفظ مصنفًا أصيلًا.
تحويل PDF إلى Excel مقابل تحويل Excel إلى PDF. اتجاهان متعاكسان، وواحد منهما فقط موثوق. «تحويل Excel إلى PDF» مهمة تخطيط: المصنف يعرف مسبقًا منطقة طباعته وفواصل صفحاته وتنسيقه، والمحوّل يرسمها. أما «تحويل PDF إلى Excel» فهو الاتجاه الصعب، لأن PDF يسجّل موضع رسم كل حرف ولا شيء عن الخلية التي ينتمي إليها — فتُستنتج الأعمدة من المواضع. تعمل جيدًا على الجداول النظيفة ذات الخطوط، وتحتاج إلى ترتيب حيث تكون الخلايا مدمجة أو يلتف نصها على عدة أسطر، وتعيد إنشاء القيم لا التنسيق أو الصيغ، وتمنح كل صفحة من PDF ورقتها الخاصة. إن كان المصنف الأصلي لا يزال موجودًا، فاطلبه.
«تحويل ODS إلى XLSX» مقابل «تحويل Excel إلى CSV» لملف .ods. تفتح «تحويل Excel إلى CSV» ملف .ods دون مشكلة وتعطيك القيم. أما «تحويل ODS إلى XLSX» فتُبقي المصنف مصنفًا، بصيغه وتنسيقه ومخططاته. استخدم أداة التحويل حين يحتاج أحدهم إلى العمل على الملف، وطريق CSV حين يحتاج نظامٌ إلى استخراج الأرقام منه.