تقسيم ملفات Excel إلى ملفات متعددة
المقدمة
توجد العديد من السيناريوهات الواقعية التي يحتاج فيها المطور إلى تقسيم ملف Excel واحد إلى عدة ملفات أصغر. على سبيل المثال، قد يحتوي المصنف على ورقة عمل واحدة لكل قسم، ويحتاج كل رئيس قسم إلى استلام ورقته فقط. في حالات أخرى، قد ترغب في استخراج جدول معين أو كتلة بيانات من ورقة عمل وإرسالها كملف مستقل عبر البريد الإلكتروني، دون الكشف عن بقية المصنف. قد تحتاج المصنفات الكبيرة المدمجة أيضًا إلى تقسيمها إلى أجزاء أصغر لتسهيل التعامل معها، أو تحميلها بشكل أسرع، أو معالجتها لاحقًا بواسطة أنظمة أخرى.
يوفر Aspose.Cells طريقتين مرنتين لهذه المهمة. تتكرر الطريقة الأولى عبر كل ورقة عمل في المصنف المصدر وتنسخ محتواها إلى مثيل Workbook جديد تمامًا، وتحفظ كل منها كملف منفصل. تركز الطريقة الثانية على نطاق خلايا محدد داخل ورقة عمل وتنسخ هذا النطاق فقط إلى مصنف جديد. في كلتا الحالتين، يكون التدفق العام هو نفسه: تحميل المصنف المصدر باستخدام الفئة Workbook، والوصول إلى البيانات ذات الصلة من خلال كائنات Worksheet وCells، ونقل المحتوى إلى Workbook الوجهة، ثم حفظ الوجهة على القرص.
تقسيم ملف Excel عن طريق نسخ كل ورقة عمل إلى مصنف جديد
نظرة عامة على الطريقة
في هذه الطريقة، يتم فتح المصنف المصدر مرة واحدة، ثم لكل Worksheet في مجموعة Worksheets الخاصة به، يتم إنشاء مثيل Workbook وجهة جديدة. يتم بعد ذلك نسخ محتوى ورقة العمل المصدر إلى ورقة العمل الأولى في المصنف الوجهة، ويتم حفظ المصنف الوجهة كملف يتم اشتقاق اسمه من اسم ورقة العمل المصدر. النتيجة هي ملف إخراج واحد لكل ورقة عمل، حيث يحتوي كل ملف إخراج على بيانات ورقة مصدر واحدة.
تعد هذه الطريقة الخيار الصحيح عندما تمثل كل ورقة عمل في المصنف المصدر وحدة معلومات مستقلة منطقيًا (مثل قسم، أو منطقة، أو شهر، أو خط منتجات) وتريد تسليم أو معالجة كل وحدة بمفردها.
الخطوات
تصف الخطوات التالية كيفية تقسيم ملف Excel عن طريق نسخ كل ورقة عمل إلى مصنف جديد:
- افتح ملف Excel المصدر عن طريق إنشاء مثيل لكائن
Workbookوتمرير مسار الملف إلى المنشئ الخاص به. - تكرار خلال مجموعة
Workbook.Worksheetsباستخدام حلقةforأوforeachبحيث تتم معالجة كلWorksheetفي الملف المصدر. - داخل الحلقة، أنشئ مثيل
Workbookوجهة جديدة (مصنف فارغ) لورقة العمل الحالية. - أضف
Worksheetجديدة إلى المصنف الوجهة (أو استخدم ورقة العمل الأولى الافتراضية) وعيّن لها اسمًا ذا معنى، ويفضل أن يكون نفس خاصيةNameلورقة العمل المصدر. - انسخ محتوى ورقة العمل المصدر إلى ورقة العمل الوجهة. يمكن القيام بذلك عن طريق التكرار عبر خلايا مجموعة
Cellsالخاصة بورقة العمل المصدر وكتابة قيمها في الخلايا المقابلة في ورقة العمل الوجهة، أو باستخدام طريقةCells.copyلنقل نطاق كامل مرة واحدة. - أنشئ مسار ملف إخراج يتضمن اسم ورقة العمل المصدر (على سبيل المثال،
dataDir + worksheet.getName() + ".xls") بحيث يكون لكل ملف تم إنشاؤه اسم فريد. - استدعِ طريقة
Workbook.saveالخاصة بالوجهة لكتابة الملف على القرص. - كرر الخطوات من 3 إلى 7 لورقة العمل التالية حتى تتم معالجة جميع أوراق العمل.
مثال على الكود
const AsposeCells = require("aspose.cells");
const path = require("path");
const dataDir = "data/";
const workbook = new AsposeCells.Workbook(dataDir + "book1.xls");
for (let i = 0; i < workbook.getWorksheets().getCount(); i++) {
const sourceSheet = workbook.getWorksheets().get(i);
const sheetName = sourceSheet.getName();
const destWorkbook = new AsposeCells.Workbook();
const destIndex = destWorkbook.getWorksheets().add();
const destSheet = destWorkbook.getWorksheets().get(destIndex);
destSheet.setName(sheetName);
destSheet.copy(sourceSheet);
const destFile = dataDir + sheetName + ".xls";
destWorkbook.save(destFile, AsposeCells.SaveFormat.Excel97To2003);
}
الناتج المتوقع هو مجموعة من الملفات الجديدة في دليل البيانات، ملف واحد لكل ورقة عمل من المصنف المصدر. كل ملف مسمى نسبة إلى الورقة المصدر المقابلة له، ويحتوي الملف على البيانات (والتنسيق اختياريًا) لتلك الورقة الواحدة.
تقسيم ملف Excel عن طريق نسخ نطاق إلى مصنف جديد
نظرة عامة على الطريقة
في بعض الأحيان، لا تتوافق البيانات التي تحتاج إلى تقسيمها مع ورقة عمل بأكملها، بل مع منطقة مستطيلة محددة من ورقة العمل، مثل A1:D10 أو نطاق مسمى يمثل جدولًا معينًا. في هذه الحالات، يكون نسخ أوراق العمل بأكملها مضيعة، وتكون هناك حاجة إلى طريقة أكثر دقة: حدد النطاق المصدر، وانسخ هذا النطاق فقط إلى مصنف جديد، واحفظ الملف الجديد.
تعد هذه الطريقة مثالية عندما تريد استخراج جدول واحد، أو كتلة تقرير، أو منطقة بيانات من ورقة عمل أكبر مع تجاهل كل المحتوى غير ذي الصلة. وهي مفيدة أيضًا لتصدير مناطق محددة من قبل المستخدم من ورقة كملفات مستقلة.
الخطوات
تصف الخطوات التالية كيفية تقسيم ملف Excel عن طريق نسخ نطاق محدد إلى مصنف جديد:
- افتح ملف Excel المصدر عن طريق إنشاء مثيل لكائن
Workbookمع مسار الملف. - استرجع ورقة العمل (
Worksheet) المستهدفة التي تحتوي على النطاق الذي تريد نسخه، إما عن طريق الفهرس (على سبيل المثال، الورقة الأولى) أو بالاسم من مجموعةWorksheets. - حدد النطاق الذي سيتم نسخه. يمكن أن يكون هذا نطاق خلايا ثابتًا مثل
A1:C10، أو نطاقًا مسمى تم الحصول عليه من خلال مجموعةWorksheet.Cells، أو نطاقًا تم إنشاؤه عبرWorksheet.Cells.createRange. - أنشئ مثيل
Workbookوجهة جديدة. - قم بالوصول إلى أول
Worksheetفي المصنف الوجهة (الورقة الافتراضية). - انسخ النطاق المصدر إلى ورقة العمل الوجهة، عادةً بدءًا من الخلية
A1. يمكن استخدام طريقةCells.copyعلى مجموعةCellsالوجهة لنسخ نطاق كامل، أو يمكنك التكرار عبر خلايا النطاق المصدر وكتابة قيمها في خلايا الوجهة باستخدامputValue. يمكن توفيرCopyOptionsاختياريًا للتحكم في ما يتم نقله (القيم فقط، القيم والأنماط، الصيغ، وما إلى ذلك). - احفظ المصنف الوجهة في مسار ملف جديد على القرص باستخدام طريقة
Workbook.save.
مثال على الكود
let sourceWorkbook = new AsposeCells.Workbook(sourcePath);
// الحصول على ورقة العمل الأولى من مصنف المصدر
let sourceWorksheet = sourceWorkbook.getWorksheets().get(0);
// تحديد نطاق الخلايا المصدر A1:C10 (10 صفوف، 3 أعمدة بدءًا من الصف 0، العمود 0)
let sourceRange = sourceWorksheet.getCells().createRange(0, 0, 10, 3);
// إنشاء مصنف وجهة جديد
let destWorkbook = new AsposeCells.Workbook();
// الوصول إلى ورقة العمل الأولى في مصنف الوجهة
let destWorksheet = destWorkbook.getWorksheets().get(0);
// إنشاء نطاق الوجهة عند A1 بنفس أبعاد نطاق المصدر
let destRange = destWorksheet.getCells().createRange(0, 0, 10, 3);
// نسخ نطاق المصدر إلى نطاق الوجهة
destRange.copy(sourceRange);
// حفظ مصنف الوجهة في ملف .xls جديد
destWorkbook.save(outputPath, AsposeCells.SaveFormat.Excel97To2003);
الناتج المتوقع هو ملف جديد واحد في دليل البيانات يحتوي فقط على القيم (والتنسيق اختياريًا) للنطاق المحدد المستخرج من المصنف المصدر. لا توجد علاقة للملف الوجهة بأي بيانات أخرى في الملف المصدر؛ فهو يحتوي فقط على النطاق المستخرج، بدءًا من الخلية A1 في ورقة العمل الأولى الخاصة به.