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

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

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

ابدأ الدورة

العمل مع Excel في Kotlin: نظرة عامة على المكتبات وأمثلة عملية



Kotlin، كلغة حديثة تعمل على JVM، تتمتع بتوافق ممتاز مع نظام Java البيئي. للعمل مع ملفات Excel (.xls و .xlsx)، الحل الأكثر قوة وانتشارًا هو مكتبة Apache POI. فهي تسمح بإنشاء وقراءة وتعديل مستندات Microsoft Office. في هذه المقالة، سننظر في كيفية استخدام Apache POI في Kotlin، وسنتعرف أيضًا على الـ wrappers المتخصصة لـ Kotlin التي تبسط الكود.



1. ربط Apache POI بمشروع Kotlin



أضف التبعيات إلى ملف build.gradle.kts (لـ Gradle Kotlin DSL):



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


بالنسبة لـ Maven، استخدم القطع الأثرية المقابلة poi و poi-ooxml.



هام: poi-ooxml مطلوب للعمل مع تنسيق .xlsx (Office Open XML)، بينما poi مطلوب للتنسيق القديم .xls (HSSF).


2. إنشاء وكتابة ملف Excel (XLSX) في Kotlin



لنقم بإنشاء دفتر عمل بسيط بورقة واحدة وكتابة البيانات.



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

fun createExcel() { val workbook = XSSFWorkbook() val sheet = workbook.createSheet("الموظفون")

// العناوين val headerRow = sheet.createRow(0) val headers = listOf("المعرف", "الاسم", "المنصب", "الراتب") headers.forEachIndexed { index, header -> headerRow.createCell(index).setCellValue(header) }

// البيانات val data = listOf( listOf(1, "إيفان بيتروف", "مطور", 120000.0), listOf(2, "ماريا سميرنوفا", "محلل", 95000.0), listOf(3, "أليكسي كوزنتسوف", "مختبر", 85000.0) )

data.forEachIndexed { rowIndex, rowData -> val row = sheet.createRow(rowIndex + 1) rowData.forEachIndexed { colIndex, value -> when (value) { is Int -> row.createCell(colIndex).setCellValue(value.toDouble()) is Double -> row.createCell(colIndex).setCellValue(value) is String -> row.createCell(colIndex).setCellValue(value) } } }

// ضبط عرض الأعمدة تلقائيًا for (i in headers.indices) { sheet.autoSizeColumn(i) }

// الحفظ FileOutputStream("employees.xlsx").use { stream -> workbook.write(stream) } println("تم إنشاء الملف: employees.xlsx")}


النقاط الرئيسية:

  • XSSFWorkbook — فئة للعمل مع .xlsx (XSSF). لـ .xls استخدم HSSFWorkbook.
  • يتم فهرسة الصفوف والخلايا بدءًا من 0.
  • autoSizeColumn يضبط عرض الأعمدة تلقائيًا وفقًا للمحتوى.
  • في Kotlin، من المناسب استخدام use لإغلاق التدفق تلقائيًا.


3. قراءة ملف Excel في Kotlin



لنقرأ الملف الذي تم إنشاؤه سابقًا ونعرض البيانات في وحدة التحكم.



import org.apache.poi.ss.usermodel.*import org.apache.poi.xssf.usermodel.XSSFWorkbookimport java.io.FileInputStream

fun readExcel() { FileInputStream("employees.xlsx").use { stream -> val workbook = XSSFWorkbook(stream) val sheet = workbook.getSheetAt(0)

for (row in sheet) { for (cell in row) { when (cell.cellType) { CellType.STRING -> print("${cell.stringCellValue}\\t") CellType.NUMERIC -> print("${cell.numericCellValue}\\t") CellType.BOOLEAN -> print("${cell.booleanCellValue}\\t") else -> print("?\\t") } } println() } }}


لاحظ أن

توصيات