تحويل JSON إلى Excel: دليل شامل
تعلم كيفية تحويل بيانات JSON إلى ملفات Excel. أدوات، تقنيات، وأمثلة عملية.
Big JSON Team
• Technical WriterExpert in JSON data manipulation, API development, and web technologies. Passionate about creating tools that make developers' lives easier.
# تحويل JSON إلى Excel: دليل شامل
تحويل JSON إلى Excel يسهل مشاركة وتحليل البيانات مع غير المبرمجين.
لماذا تحويل JSON إلى Excel؟
الفوائد
- سهولة المشاركة - الجميع يعرف Excel
- التحليل - استخدام الصيغ والمخططات
- التقارير - إنشاء تقارير احترافية
- التحرير - تحرير البيانات بسهولة
- التصور - رؤية بصرية للبيانات
طرق التحويل
1. أدوات عبر الإنترنت
JSON to Excel Converter
الميزات:- تحويل فوري
- بدون تثبيت
- مجاني
- دعم JSON الكبير
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:
- سهل مع الأدوات المناسبة
- عدة خيارات متاحة
- يمكن أتمتته
- مفيد للتقارير والتحليل
اختر الطريقة المناسبة لاحتياجاتك!
مقالات ذات صلة
أفضل أدوات JSON عبر الإنترنت
اكتشف أفضل أدوات JSON المجانية عبر الإنترنت للتنسيق، التحقق، التحويل، والمقارنة.
Python و JSON: دليل شامل
تعلم كيفية العمل مع JSON في Python. القراءة، الكتابة، التحليل، والتحويل مع أمثلة عملية.
التعامل مع ملفات JSON الكبيرة
تقنيات وأفضل الممارسات للتعامل مع ملفات JSON الكبيرة بكفاءة. أمثلة عملية للقراءة والمعالجة.