Bir flutter uygulamasında excel sayfalarını okumak, güncellemek veya oluşturmak istiyorsanız bunun için birkaç kütüphane var. Bu yazı içeriğinde flutter excel işlemleri için kullandığım kütüphanenin kullanışını anlatacağım.

Flutter Excel Oluşturma

Excel süreçleri için ilk akla gelen kütüphane flutter excel kütüphanesi. Projenin detayına göre bu kütüphaneyi sık sık kullanıyorum. Özellikle bir şablonu kopyalayarak onun üzerinde güncelleme yapmak istiyorsanız bu kütüphane işinizi görecektir. Ancak bu kütüphane de bir hücreye resim eklemek şu an ki versiyonlarında mümkün değil. Excel de hücreye “=IMAGE(url)” fonksiyonunu yazarak url üzerinden resim ekleyebilirsiniz ancak bu da tam bir çözüm değil. Çünkü excel türkçe ise “IMAGE” yerine “RESİM” kullanılıyor ve bu sefer fonksiyon hata veriyor. Ayrıca excel dışarıdan url ile bilgi çektiği için diğer kullanıcılarda sürekli bir güvenlik uyarısı veriliyor. İşte bu sebeple çözüm farklı bir kütüphane.

Syncfusion Flutter Xlsio

Syncfusion kütüphanesinin son sürümünü uygulamaya ekleyiniz. Aşağıda bazı örnek kodları paylaştım.

// Excel dosyasını oluştur.
final Workbook workbook = Workbook();
// İlk sayfayı eriş.
final Worksheet sheet = workbook.worksheets[0];

A1 ve C5 arasındaki alanı birleştirmek için aşağıdaki kodu kullanabilirsiniz. Parantez içerisinde 2. ve 4. basamak sütun sıralarını temsil ediyor.

sheet.getRangeByIndex(1, 1, 5, 3).merge();

A1 hücresine resim eklemek için aşağıdaki kodu kullanıyoruz.

final ByteData imageData = await rootBundle.load('assets/images/logo.png');
final Uint8List imageBytes = imageData.buffer.asUint8List();

final Picture picture = sheet.pictures.addStream(1, 1, imageBytes1); //A1
picture.width = 173; //px

Elimizde url bilgisi olan bir resmi excel sayfasına eklemek için ise aşağıdaki kodu kullanabilirsiniz. Ben C69 hücresine ilgili resmi yüklüyorum.

      final response = await http.get(Uri.parse(url));
      if (response.statusCode == 200) {
        final Uint8List imageBytes = response.bodyBytes;
        final Picture picture = sheet.pictures.addStream(69, 3, imageBytes);
        picture.height = 50;
      }

Bir hücrenin stili ile istediğiniz gibi oynayabilirsiniz.

final Range mergedRange = sheet.getRangeByName('B1');
mergedRange.setText("Mr.\nYED");
mergedRange.cellStyle.bold = true; //kalınlık
mergedRange.cellStyle.hAlign = HAlignType.center; //ortala
mergedRange.cellStyle.vAlign = VAlignType.center; //ortala

Hücrenin arka plan rengi, en, boy yüksekliği gibi tüm detayları aynı şekilde ayarlayabilirsiniz.

Sayfanın kenar boşluklarını aşağıdaki gibi ayarlayabilirsiniz. Ölçüler cm cinsindendir.

sheet.pageSetup.topMargin = 1.5;
sheet.pageSetup.bottomMargin = 1.5;
sheet.pageSetup.leftMargin = 0.7;
sheet.pageSetup.rightMargin = 0.7;

Sayfa genişliğini de kod üzerinden ayarlayabilirsiniz. Örneğin benim şablonumun tek bir sayfa olmasını ve kullanıcının hiç düzenleme yapmadan çıktı almasını istiyorum. Bu sebeple tüm alanı bir sayfaya sığdırabiliyorum.

sheet.pageSetup.fitToPagesWide = 1; // Sayfayı genişliğine sığdır
sheet.pageSetup.fitToPagesTall = 0; // Yükseklik ayarını devre dışı bırak
sheet.pageSetup.printArea = 'A1:P75'; //A1 ile P75 aralığını yazdırma alanı olarak belirliyorum

Kenarlık verme işlemini de yine kod üzerinden belirleyebiliyorum. Örnek kodda A1 ile P71 aralığına tamamen kenarlık verilecek.

Range range = sheet.getRangeByName('A1:P71');
range.cellStyle.borders.all.lineStyle = LineStyle.thin;

Son aşamada excel dosyamı kayıt ederek bu dokümana ulaşabileceğim url bilgisini almak istiyorum.

// Dosyayı kaydet.
final List<int> bytes = workbook.saveAsStream();
workbook.dispose();

// Firebase Storage'a yükle
final Uint8List excelData = Uint8List.fromList(bytes);
final Reference ref = storage.ref("myDoc.xlsx");
final UploadTask uploadTask = ref.putData(excelData);

// Yükleme tamamlandığında URL'yi al
final TaskSnapshot snapshot = await uploadTask.whenComplete(() {});
final String newExcelURL = await snapshot.ref.getDownloadURL();

Ben dokümanı firebase storage’e yükledim ve bu dokümana ulaşacağım bilgiyi newExcelURL değişkenine attım. Bu değişkeni istediğiniz gibi kullanabilirsiniz.

Not: Flutter excel işlemi dendiğinde ilk akla yazının başında paylaştığım kütüphane geliyor. Ancak kullanımını anlattığım kütüphanede çok kullanışlı ve hızlı. Özellikle resim konusunda çözümü çok basit. Tek dezavantaj olarak bir excel şablonunu kullanamadığını gördüm. Elinizde bir excel şablonu var ve onu kopyalayarak üzerinde düzenleme yapmak istiyorsanız şu anki sürümde bu mümkün değil. Size boş bir excel oluşturuyor ve sizin bunu baştan aşağıya tasarlamanız gerekiyor.

Kurumsal uygulamalarda raporlama ile ilgili çalışıyorsanız bahsetmiş olduğum kütüphaneler işinize yarayacaktır. Bir sonraki yazı içeriğinde görüşmek üzere…