← العودة إلى المدونة

تحويل JSON إلى Excel: دليل شامل

تعلم كيفية تحويل بيانات JSON إلى ملفات Excel. أدوات، تقنيات، وأمثلة عملية.

Big JSON Team13 دقيقة للقراءةtools
B

Big JSON Team

Technical Writer

Expert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.

13 دقيقة قراءة

# تحويل JSON إلى Excel: دليل شامل

تحويل JSON إلى Excel يسهل مشاركة وتحليل البيانات مع غير المبرمجين.

لماذا تحويل JSON إلى Excel؟

الفوائد

  • سهولة المشاركة - الجميع يعرف Excel
  • التحليل - استخدام الصيغ والمخططات
  • التقارير - إنشاء تقارير احترافية
  • التحرير - تحرير البيانات بسهولة
  • التصور - رؤية بصرية للبيانات

طرق التحويل

1. أدوات عبر الإنترنت

JSON to Excel Converter

الميزات:
  • تحويل فوري
  • بدون تثبيت
  • مجاني
  • دعم JSON الكبير

الاستخدام:
  • الصق JSON الخاص بك
  • اضغط على "Convert"
  • قم بتنزيل ملف Excel
  • ConvertCSV

    الميزات:
    • تحويل إلى Excel/CSV
    • خيارات متقدمة
    • معاينة النتائج
    • حفظ الإعدادات

    2. Excel نفسه

    باستخدام Power Query

    1. افتح Excel
    
  • Data > Get Data > From File > From JSON
  • اختر ملف JSON
  • Power Query سيحلل البيانات تلقائياً
  • اضغط على Load
  • 3. البرمجة

    التحويل باستخدام JavaScript

    باستخدام SheetJS (xlsx)

    import  as XLSX from 'xlsx';
    
    

    // بيانات JSON

    const data = [

    { الاسم: 'أحمد', العمر: 30, المدينة: 'الرياض' },

    { الاسم: 'فاطمة', العمر: 25, المدينة: 'جدة' },

    { الاسم: 'محمد', العمر: 35, المدينة: 'الدمام' }

    ];

    // إنشاء workbook

    const wb = XLSX.utils.book_new();

    // تحويل JSON إلى worksheet

    const ws = XLSX.utils.json_to_sheet(data);

    // إضافة worksheet إلى workbook

    XLSX.utils.book_append_sheet(wb, ws, 'المستخدمون');

    // حفظ الملف

    XLSX.writeFile(wb, 'users.xlsx');

    مع خيارات متقدمة

    import  as XLSX from 'xlsx';
    
    

    const data = [

    { الاسم: 'أحمد', العمر: 30, الراتب: 10000 },

    { الاسم: 'فاطمة', العمر: 25, الراتب: 8500 }

    ];

    // تخصيص الأعمدة

    const ws = XLSX.utils.json_to_sheet(data, {

    header: ['الاسم', 'العمر', 'الراتب']

    });

    // تنسيق العرض

    ws['!cols'] = [

    { width: 20 }, // عرض عمود الاسم

    { width: 10 }, // عرض عمود العمر

    { width: 15 } // عرض عمود الراتب

    ];

    const wb = XLSX.utils.book_new();

    XLSX.utils.book_append_sheet(wb, ws, 'البيانات');

    XLSX.writeFile(wb, 'data.xlsx');

    في المتصفح

    import  as XLSX from 'xlsx';
    
    

    function downloadExcel(data, filename) {

    const wb = XLSX.utils.book_new();

    const ws = XLSX.utils.json_to_sheet(data);

    XLSX.utils.book_append_sheet(wb, ws, 'البيانات');

    // تحويل إلى binary

    const wbout = XLSX.write(wb, {

    bookType: 'xlsx',

    type: 'binary'

    });

    // إنشاء Blob

    function s2ab(s) {

    const buf = new ArrayBuffer(s.length);

    const view = new Uint8Array(buf);

    for (let i = 0; i < s.length; i++) {

    view[i] = s.charCodeAt(i) & 0xFF;

    }

    return buf;

    }

    const blob = new Blob([s2ab(wbout)], {

    type: 'application/octet-stream'

    });

    // تنزيل الملف

    const url = URL.createObjectURL(blob);

    const a = document.createElement('a');

    a.href = url;

    a.download = filename;

    a.click();

    URL.revokeObjectURL(url);

    }

    // الاستخدام

    const users = [

    { الاسم: 'أحمد', العمر: 30 },

    { الاسم: 'فاطمة', العمر: 25 }

    ];

    downloadExcel(users, 'users.xlsx');

    التحويل باستخدام Python

    باستخدام pandas

    import json
    

    import pandas as pd

    # قراءة JSON

    with open('data.json', 'r', encoding='utf-8') as f:

    data = json.load(f)

    # تحويل إلى DataFrame

    df = pd.DataFrame(data)

    # حفظ كـ Excel

    df.to_excel('output.xlsx', index=False, engine='openpyxl')

    مع تنسيق

    import pandas as pd
    

    from openpyxl import load_workbook

    from openpyxl.styles import Font, Alignment, PatternFill

    # البيانات

    data = [

    {'الاسم': 'أحمد', 'العمر': 30, 'الراتب': 10000},

    {'الاسم': 'فاطمة', 'العمر': 25, 'الراتب': 8500}

    ]

    df = pd.DataFrame(data)

    # حفظ كـ Excel

    filename = 'output.xlsx'

    df.to_excel(filename, index=False, sheet_name='المستخدمون')

    # تطبيق التنسيق

    wb = load_workbook(filename)

    ws = wb['المستخدمون']

    # تنسيق الرأس

    header_fill = PatternFill(

    start_color='4472C4',

    end_color='4472C4',

    fill_type='solid'

    )

    header_font = Font(color='FFFFFF', bold=True)

    for cell in ws[1]:

    cell.fill = header_fill

    cell.font = header_font

    cell.alignment = Alignment(horizontal='center')

    # ضبط عرض الأعمدة

    for column in ws.columns:

    max_length = 0

    column_letter = column[0].column_letter

    for cell in column:

    if cell.value:

    max_length = max(max_length, len(str(cell.value)))

    adjusted_width = max_length + 2

    ws.column_dimensions[column_letter].width = adjusted_width

    wb.save(filename)

    JSON متداخل

    import pandas as pd
    

    import json

    # JSON متداخل

    json_data = '''

    {

    "المستخدمون": [

    {

    "الاسم": "أحمد",

    "العمر": 30,

    "العنوان": {

    "المدينة": "الرياض",

    "الرمز": "12345"

    }

    }

    ]

    }

    '''

    data = json.loads(json_data)

    # تسطيح البنية

    from pandas import json_normalize

    df = json_normalize(

    data['المستخدمون'],

    sep='_'

    )

    # حفظ

    df.to_excel('output.xlsx', index=False)

    التحويل باستخدام Node.js

    باستخدام exceljs

    const ExcelJS = require('exceljs');
    
    

    async function jsonToExcel(data, filename) {

    const workbook = new ExcelJS.Workbook();

    const worksheet = workbook.addWorksheet('البيانات');

    // إضافة الأعمدة

    if (data.length > 0) {

    const columns = Object.keys(data[0]).map(key => ({

    header: key,

    key: key,

    width: 20

    }));

    worksheet.columns = columns;

    // إضافة الصفوف

    data.forEach(row => {

    worksheet.addRow(row);

    });

    // تنسيق الرأس

    worksheet.getRow(1).font = { bold: true };

    worksheet.getRow(1).fill = {

    type: 'pattern',

    pattern: 'solid',

    fgColor: { argb: 'FF4472C4' }

    };

    }

    // حفظ الملف

    await workbook.xlsx.writeFile(filename);

    }

    // الاستخدام

    const users = [

    { الاسم: 'أحمد', العمر: 30, المدينة: 'الرياض' },

    { الاسم: 'فاطمة', العمر: 25, المدينة: 'جدة' }

    ];

    jsonToExcel(users, 'users.xlsx');

    أوراق متعددة

    const ExcelJS = require('exceljs');
    
    

    async function createMultiSheetExcel() {

    const workbook = new ExcelJS.Workbook();

    // ورقة المستخدمين

    const usersSheet = workbook.addWorksheet('المستخدمون');

    usersSheet.columns = [

    { header: 'الاسم', key: 'الاسم', width: 20 },

    { header: 'العمر', key: 'العمر', width: 10 }

    ];

    usersSheet.addRows([

    { الاسم: 'أحمد', العمر: 30 },

    { الاسم: 'فاطمة', العمر: 25 }

    ]);

    // ورقة الطلبات

    const ordersSheet = workbook.addWorksheet('الطلبات');

    ordersSheet.columns = [

    { header: 'رقم الطلب', key: 'id', width: 15 },

    { header: 'المبلغ', key: 'amount', width: 15 }

    ];

    ordersSheet.addRows([

    { id: 1, amount: 100 },

    { id: 2, amount: 200 }

    ]);

    await workbook.xlsx.writeFile('multi-sheet.xlsx');

    }

    معالجة JSON المعقد

    JSON متداخل

    // JSON متداخل
    

    const complexData = {

    المستخدم: {

    الاسم: 'أحمد',

    العمر: 30,

    العنوان: {

    المدينة: 'الرياض',

    الشارع: 'شارع الملك فهد'

    },

    المهارات: ['JavaScript', 'Python']

    }

    };

    // تسطيح البنية

    function flatten(obj, prefix = '') {

    const result = {};

    for (const key in obj) {

    const value = obj[key];

    const newKey = prefix ? ${prefix}_${key} : key;

    if (typeof value === 'object' && !Array.isArray(value) && value !== null) {

    Object.assign(result, flatten(value, newKey));

    } else if (Array.isArray(value)) {

    result[newKey] = value.join(', ');

    } else {

    result[newKey] = value;

    }

    }

    return result;

    }

    const flattened = flatten(complexData.المستخدم);

    // {

    // الاسم: 'أحمد',

    // العمر: 30,

    // العنوان_المدينة: 'الرياض',

    // العنوان_الشارع: 'شارع الملك فهد',

    // المهارات: 'JavaScript, Python'

    // }

    مصفوفة من الكائنات

    const users = [
    

    {

    id: 1,

    الاسم: 'أحمد',

    الطلبات: [

    { id: 101, amount: 100 },

    { id: 102, amount: 200 }

    ]

    },

    {

    id: 2,

    الاسم: 'فاطمة',

    الطلبات: [

    { id: 201, amount: 150 }

    ]

    }

    ];

    // تحويل إلى صفوف مسطحة

    const flatRows = [];

    users.forEach(user => {

    user.الطلبات.forEach(order => {

    flatRows.push({

    user_id: user.id,

    user_name: user.الاسم,

    order_id: order.id,

    order_amount: order.amount

    });

    });

    });

    // الآن يمكن تحويل flatRows إلى Excel

    ميزات متقدمة

    إضافة صيغ

    const ExcelJS = require('exceljs');
    
    

    const workbook = new ExcelJS.Workbook();

    const worksheet = workbook.addWorksheet('المبيعات');

    worksheet.columns = [

    { header: 'المنتج', key: 'product', width: 20 },

    { header: 'السعر', key: 'price', width: 15 },

    { header: 'الكمية', key: 'quantity', width: 15 },

    { header: 'المجموع', key: 'total', width: 15 }

    ];

    // إضافة البيانات

    worksheet.addRow({ product: 'منتج 1', price: 100, quantity: 5 });

    worksheet.addRow({ product: 'منتج 2', price: 200, quantity: 3 });

    // إضافة صيغ

    worksheet.getCell('D2').value = { formula: 'B2C2' };

    worksheet.getCell('D3').value = { formula: 'B3*C3' };

    // المجموع الكلي

    worksheet.addRow({});

    worksheet.addRow({ product: 'المجموع', total: { formula: 'SUM(D2:D3)' } });

    تنسيق الخلايا

    const ExcelJS = require('exceljs');
    
    

    const workbook = new ExcelJS.Workbook();

    const worksheet = workbook.addWorksheet('البيانات');

    // إضافة بيانات

    worksheet.addRow(['الاسم', 'الراتب', 'الحالة']);

    worksheet.addRow(['أحمد', 10000, 'نشط']);

    // تنسيق الرأس

    const headerRow = worksheet.getRow(1);

    headerRow.font = { bold: true, color: { argb: 'FFFFFFFF' } };

    headerRow.fill = {

    type: 'pattern',

    pattern: 'solid',

    fgColor: { argb: 'FF4472C4' }

    };

    // تنسيق الأرقام

    worksheet.getColumn(2).numFmt = '#,##0';

    // محاذاة

    worksheet.getColumn(1).alignment = { horizontal: 'right' };

    إضافة مخططات

    const ExcelJS = require('exceljs');
    
    

    const workbook = new ExcelJS.Workbook();

    const worksheet = workbook.addWorksheet('المبيعات');

    // إضافة البيانات

    worksheet.addRow(['الشهر', 'المبيعات']);

    worksheet.addRow(['يناير', 1000]);

    worksheet.addRow(['فبراير', 1500]);

    worksheet.addRow(['مارس', 1200]);

    // ملاحظة: ExcelJS لا يدعم المخططات مباشرة

    // استخدم exceljs مع officegen أو مكتبة أخرى

    أفضل الممارسات

    1. معالجة الأخطاء

    async function safeJsonToExcel(data, filename) {
    

    try {

    if (!Array.isArray(data) || data.length === 0) {

    throw new Error('البيانات يجب أن تكون مصفوفة غير فارغة');

    }

    const workbook = new ExcelJS.Workbook();

    const worksheet = workbook.addWorksheet('البيانات');

    const columns = Object.keys(data[0]).map(key => ({

    header: key,

    key: key,

    width: 20

    }));

    worksheet.columns = columns;

    data.forEach(row => worksheet.addRow(row));

    await workbook.xlsx.writeFile(filename);

    console.log('تم الحفظ بنجاح');

    } catch (error) {

    console.error('خطأ في التحويل:', error.message);

    }

    }

    2. التحقق من البيانات

    function validateData(data) {
    

    if (!Array.isArray(data)) {

    return { valid: false, error: 'البيانات يجب أن تكون مصفوفة' };

    }

    if (data.length === 0) {

    return { valid: false, error: 'المصفوفة فارغة' };

    }

    const firstKeys = Object.keys(data[0]);

    for (let i = 1; i < data.length; i++) {

    const keys = Object.keys(data[i]);

    if (JSON.stringify(keys) !== JSON.stringify(firstKeys)) {

    return { valid: false, error: تناقض في المفاتيح في السطر ${i} };

    }

    }

    return { valid: true };

    }

    3. تحسين الأداء

    // للبيانات الكبيرة، استخدم دفعات
    

    async function largJsonToExcel(data, filename, batchSize = 1000) {

    const workbook = new ExcelJS.Workbook();

    const worksheet = workbook.addWorksheet('البيانات');

    // الأعمدة

    const columns = Object.keys(data[0]).map(key => ({

    header: key,

    key: key

    }));

    worksheet.columns = columns;

    // إضافة البيانات بالدفعات

    for (let i = 0; i < data.length; i += batchSize) {

    const batch = data.slice(i, i + batchSize);

    batch.forEach(row => worksheet.addRow(row));

    }

    await workbook.xlsx.writeFile(filename);

    }

    الملخص

    تحويل JSON إلى Excel:

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

    اختر الطريقة المناسبة لاحتياجاتك!

    Share:

    مقالات ذات صلة

    Read in English