العمل مع Excel في Kotlin: مكتبات Apache POI و Apache POI لـ Kotlin

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

العمل مع Excel في Kotlin: مكتبات Apache POI والغلاف الخاص بـ Kotlin



Kotlin، باعتبارها لغة برمجة حديثة لـ JVM، توفر إمكانيات ممتازة لأتمتة العمل مع المستندات المكتبية. في هذه المقالة، سنستعرض كيفية العمل بكفاءة مع ملفات Excel (XLS و XLSX) في Kotlin باستخدام المكتبات الشهيرة Apache POI والغلاف الموجه لـ Kotlin الخاص بها Apache POI for Kotlin.



لماذا Kotlin للعمل مع Excel؟

تقدم Kotlin بناء جملة أكثر إيجازًا وأمانًا مقارنة بـ Java، وهو أمر مفيد بشكل خاص عند العمل مع واجهات برمجة التطبيقات الضخمة لـ Excel. باستخدام Kotlin، يمكنك:

  • تقليل كمية الكود النمطي
  • استخدام الأنواع الآمنة و null-safety
  • تطبيق دوال الامتداد (extension functions) لتحسين قابلية القراءة
  • التكامل بسهولة مع مكتبات Java الحالية


المكتبة الأساسية: Apache POI

Apache POI هو المعيار الفعلي للعمل مع مستندات Microsoft Office في نظام JVM البيئي. وهي تدعم:

  • قراءة وكتابة XLS (HSSF) و XLSX (XSSF)
  • العمل مع الصيغ والأنماط والخلايا المدمجة
  • إنشاء الرسوم البيانية والجداول المحورية
  • معالجة الملفات الكبيرة عبر SXSSF (streaming)


للتوصيل في Gradle (Kotlin DSL)، أضف إلى build.gradle.kts:

dependencies {    implementation("org.apache.poi:poi:5.3.0")    implementation("org.apache.poi:poi-ooxml:5.3.0")}


مكتبة الغلاف: Apache POI for Kotlin

توجد عدة أغلفة لـ Kotlin تعمل على تبسيط العمل مع POI. أحدها الشهير هو kotlin-poi (com.github.doyaaaaaken:kotlinpoi). يضيف هذا الغلاف دوال امتداد وأسلوب DSL لإنشاء ملفات Excel.

التوصيل:

repositories {    mavenCentral()}

dependencies { implementation("com.github.doyaaaaaken:kotlinpoi:1.0.0")}


مثال 1: إنشاء ملف XLSX بسيط (POI خالص)

لنقم بإنشاء مصنف بورقة واحدة وتعبئتها بالبيانات:

import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileOutputStream

fun createSimpleExcel() { val workbook = XSSFWorkbook() val sheet = workbook.createSheet("بيانات") // إنشاء الرؤوس val headerRow = sheet.createRow(0) headerRow.createCell(0).setCellValue("الاسم") headerRow.createCell(1).setCellValue("العمر") headerRow.createCell(2).setCellValue("المدينة") // تعبئة البيانات val data = listOf( listOf("آنا", 28, "موسكو"), listOf("إيفان", 35, "سانت بطرسبرغ"), listOf("ماريا", 22, "قازان") ) data.forEachIndexed { index, rowData -> val row = sheet.createRow(index + 1) rowData.forEachIndexed { cellIndex, value -> when (value) { is String -> row.createCell(cellIndex).setCellValue(value) is Int -> row.createCell(cellIndex).setCellValue(value.toDouble()) else -> row.createCell(cellIndex).setCellValue(value.toString()) } } } // ضبط العرض التلقائي للأعمدة for (i in 0..2) { sheet.autoSizeColumn(i) } // حفظ الملف FileOutputStream("output.xlsx").use { fileOut -> workbook.write(fileOut) } workbook.close() println("تم إنشاء الملف: output.xlsx")}


مثال 2: قراءة ملف Excel (POI خالص)

import org.apache.poi.ss.usermodel.WorkbookFactoryimport java.io.FileInputStream

fun readExcel(filePath: String) { val file = FileInputStream(filePath) val workbook = WorkbookFactory.create(file) val sheet = workbook.getSheetAt(0) println("قراءة الورقة: ${sheet.sheetName}") println("إجمالي الصفوف: ${sheet.physicalNumberOfRows}") for (row in sheet) { val r

توصيات