العمل مع 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() } }}لاحظ أن