> For the complete documentation index, see [llms.txt](https://learn.vispeahen.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://learn.vispeahen.com/raporlama/sablon-tasarimi/5-alternatif-sablon-formati-jxls.md).

# 5) Alternatif Şablon Formatı: JXLS

`JXLS`, `Excel` şablonlarından rapor üretmek için kullanılan Java tabanlı bir kütüphanedir. `Jinja`'ya alternatif olarak desteklenmektedir. Temel farklılıklar şöyledir:

> #### <mark style="color:$primary;">**1) Değişken sözdizimi:**</mark>
>
> `JXLS`'de hücreye değer yazmak için `${değişken}` kullanılır; `Jinja`'nın `{{ değişken }}` biçiminin `JXLS` karşılığıdır.
>
> ```
> Jinja:  {{ city }}              →  JXLS:  ${city} 
> Jinja:  {{ sale|sum(...) }}      →  JXLS:  ${sale.![sum(order_amount)]}
> ```

> #### <mark style="color:$primary;">**2)**</mark> <mark style="color:$primary;"></mark><mark style="color:$primary;">Döngü sözdizimi</mark><mark style="color:$primary;">**:**</mark>
>
> `JXLS`’de döngüler `jx:each` direktifi ile hücre comment’ine yazılır. Bunun yanı sıra şablonun A1 hücresine `jx:area(lastCell=“...”)` direktifi eklenerek işlenecek alan tanımlanmalıdır. Bu iki direktif olmadan şablon `JXLS` motoru tarafından işlenmez. Parametre değişkenleri (`${yil}, ${ay}`) doğrudan adlarıyla, satır değişkenleri ise `${row.alan_adi}` biçimiyle yazılır.
>
> ```
> A1  comment : jx:area(lastCell="H11")
> A10 comment : jx:each(items="sale" var="row" lastCell="H10")
> A10 değeri : ${row.city}  |  B10: ${yil}  |  C10: ${row.product_category}  |  D10: ${ay}
> E10–H10   : ${row.order_amount}  ${row.total_price}  ${row.total_cost}  ${row.net_price}
> E11–H11   : =SUM(E10)  =SUM(F10)  =SUM(G10)  =SUM(H10)  [JXLS satır ekleyince formül genişler]
> ```

> #### <mark style="color:$primary;">**3)**</mark> <mark style="color:$primary;"></mark><mark style="color:$primary;">Dosya ve yapı</mark><mark style="color:$primary;">**:**</mark>
>
> `JXLS` şablonu da `.xlsx` uzantılıdır; `Jinja` şablonuyla aynı biçimde Rapor Şablonu panelinden yüklenir. Şablon formatı `Jinja`'dan bağımsız olarak değiştirilebilir; aynı `SQL` sorgusu ve parametreler her iki formatta da çalışır.

<h3 align="center"><mark style="color:orange;">JXLS Şablon Versiyonları — v0, v1, v2</mark></h3>

#### <mark style="color:yellow;">JXLS v0 — Düz liste (Şehir × Kategori):</mark>

Her satır bir şehir–kategori kombinasyonunu temsil eder. Ay bilgisi `${ay}` ile parametre değeri olarak gösterilir (seçilen tüm ayların birleşik metni). `Jinja` v0’ın `JXLS` karşılığıdır.&#x20;

Örnek Şablon:

{% file src="/files/teEOfo2VWrV4HKqCy5We" %}

```
A1  comment : jx:area(lastCell="H11")
A10 comment : jx:each(items="sale" var="row" lastCell="H10")
A10: ${row.city}  B10: ${yil}  C10: ${row.product_category}  D10: ${ay}
E10: ${row.order_amount}  F10: ${row.total_price}  G10: ${row.total_cost}  H10: ${row.net_price}
A11: GENEL TOPLAM  E11: =SUM(E10)  F11: =SUM(F10)  G11: =SUM(G10)  H11: =SUM(H10)
```

Örnek Çıktı:

{% file src="/files/AVELdjPpV6fUGQRqYMqq" %}

#### <mark style="color:yellow;">JXLS v1 — Ay bazında kırılım:</mark>

v0’dan tek farkı D10 hücresinin `${ay}` yerine `${row.month}` içermesidir; her satır bir şehir–kategori–ay kombinasyonunu temsil eder. `SQL` sorgusunda month kolonu hem `SELECT` hem `GROUP BY` içinde bulunmalıdır.

Örnek Şablon:

{% file src="/files/dGqgLHukKdf9AHZ8UFcv" %}

```
A1  comment : jx:area(lastCell="H11")
A10 comment : jx:each(items="sale" var="row" lastCell="H10")
A10: ${row.city}  B10: ${yil}  C10: ${row.product_category}  D10: ${row.month}  [v0'dan fark]
E10: ${row.order_amount}  F10: ${row.total_price}  G10: ${row.total_cost}  H10: ${row.net_price}
A11: GENEL TOPLAM  E11: =SUM(E10)  F11: =SUM(F10)  G11: =SUM(G10)  H11: =SUM(H10)
```

Örnek Çıktı:

{% file src="/files/2zHVb86qla3D07cRZPdG" %}

{% hint style="warning" %} <mark style="color:$warning;">**`JXLS`**</mark><mark style="color:$warning;">**&#x20;**</mark><mark style="color:$warning;">**v2 — Sınırlılık:**</mark> `Jinja` v2’nin kategori bazında mini tablo oluşturan yapısı `JXLS` ile doğrudan gerçekleştirilemez. `JXLS` tek düzeyli `jx:each` döngülerini destekler; iç içe gruplama için sunucu taraflı ön gruplama gerekir. Bu nedenle `JXLS` ile hazırlanmış v2 şablonu, yapısal olarak v0’dan farklı değildir (düz liste). Kategori bazında gruplu sunum için `Jinja` v2 şablonu kullanılmalıdır.
{% endhint %}

{% hint style="info" %} <mark style="color:$primary;">**Hangi format seçilmeli?:**</mark> `Jinja` şablonları `Python` ekosistemiyle uyumlu, yazması ve okunması daha sezgisel bir söz dizimine sahiptir. `JXLS`, `Java` tabanlı sistemlerde ya da `JXLS` kütüphanesiyle deneyimli ekiplerde tercih edilebilir. İki format aynı şablon dosyasında birleştirilemez; hangi format kullanılacaksa şablon baştan o formatta hazırlanmalıdır.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://learn.vispeahen.com/raporlama/sablon-tasarimi/5-alternatif-sablon-formati-jxls.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
