<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>XLSB vs XLSX on File Format Blog</title>
    <link>https://blog.fileformat.com/fr/tag/xlsb-vs-xlsx/</link>
    <description>Recent content in XLSB vs XLSX on File Format Blog</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>fr</language>
    <lastBuildDate>Wed, 30 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.fileformat.com/fr/tag/xlsb-vs-xlsx/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>XLSB vs XLSX pour les grands ensembles de données : Guide de performance pour les développeurs</title>
      <link>https://blog.fileformat.com/fr/spreadsheet/xlsb-vs-xlsx-for-large-data-sets-a-developers-performance-guide/</link>
      <pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate>
      
      <guid>https://blog.fileformat.com/fr/spreadsheet/xlsb-vs-xlsx-for-large-data-sets-a-developers-performance-guide/</guid>
      <description>Découvrez pourquoi XLSB surpasse XLSX pour les grands ensembles de données. Explorez les mécanismes de compression, l&amp;#39;utilisation de la mémoire, les benchmarks Python/C#, et quand choisir le binaire plutôt que le XML.</description>
      <content:encoded><![CDATA[<p><strong>Dernière mise à jour</strong> : 30 sept. 2026</p>
<figure class="align-center ">
    <img loading="lazy" src="images/xlsb-vs-xlsx-for-large-data-sets-a-developers-performance-guide.png#center"
         alt="XLSB vs XLSX for Large Data Sets: A Developer’s Performance Guide"/> 
</figure>

<h2 id="xlsb-vs-xlsx-pour-les-grands-ensembles-de-données--guide-de-performance-pour-les-développeurs">XLSB vs XLSX pour les grands ensembles de données : Guide de performance pour les développeurs</h2>
<p>Si vous créez des pipelines de données, des moteurs de reporting back‑end ou des outils d&rsquo;analyse qui s&rsquo;interfacent avec Microsoft Excel, vous avez probablement heurté &ldquo;le mur&rdquo;.</p>
<p>Un utilisateur téléverse un classeur de 450 000 lignes. Votre serveur lance des threads de travail, la consommation de mémoire grimpe à plusieurs gigaoctets, le ramasse‑miettes fige le runtime, et votre exécution dépasse le délai imparti. Vous inspectez la charge utile : il s&rsquo;agit d&rsquo;un fichier <code>.xlsx</code> standard.</p>
<p>Pour résoudre ce problème, les développeurs passent souvent des jours à implémenter du découpage, des analyseurs en flux ou à déléguer les fichiers à des workers en arrière‑plan. Pourtant, l&rsquo;une des optimisations les plus efficaces ne nécessite aucune refonte architecturale : changer l&rsquo;extension du fichier de <code>.xlsx</code> en <code>.xlsb</code>.</p>
<p>Dans ce guide, nous plongeons sous le capot des deux formats, examinons pourquoi leurs architectures internes produisent des caractéristiques de performance radicalement différentes, comparons des benchmarks concrets sous Python et .NET, et définissons des règles claires pour savoir quand déployer des classeurs binaires en production.</p>
<h2 id="1-sous-le-capot--openxml-vs-biff12">1. Sous le capot : OpenXML vs. BIFF12</h2>
<p>Pour comprendre pourquoi les performances divergent autant sur de grands ensembles de données, nous devons examiner comment chaque format stocke les enregistrements sur le disque.</p>
<pre tabindex="0"><code>       ┌────────────────────────┐         ┌────────────────────────┐
       │     sample.xlsx        │         │      sample.xlsb       │
       │ (ZIP Archive Wrapper)  │         │ (ZIP Archive Wrapper)  │
       └───────────┬────────────┘         └───────────┬────────────┘
                   │                                  │
       ┌───────────▼────────────┐         ┌───────────▼────────────┐
       │   sheet1.xml (UTF-8)   │         │    sheet1.bin (BIFF12) │
       │  Verbose ASCII Tags    │         │ Structured Byte Stream │
       │  &lt;c r=&#34;A1&#34;&gt;&lt;v&gt;42&lt;/v&gt;   │         │ [Opcode][Len][Payload] │
       └────────────────────────┘         └────────────────────────┘
</code></pre><p>Les fichiers <code>.xlsx</code> et <code>.xlsb</code> sont des conteneurs ZIP compressés conformes aux Open Packaging Conventions (OPC). Si vous renommez l&rsquo;un de ces fichiers en <code>.zip</code> et l&rsquo;extrayez, vous verrez une structure de répertoires familière : <code>_rels</code>, <code>docProps</code> et <code>xl/worksheets/</code>.</p>
<p>La différence cruciale se trouve dans le dossier <code>xl/worksheets/</code> :</p>
<ul>
<li><strong>XLSX stocke les feuilles sous forme de texte XML brut (<code>sheet1.xml</code>).</strong></li>
<li><strong>XLSB stocke les feuilles sous forme de flux binaires propriétaires (<code>sheet1.bin</code>), encodés avec le BIFF12 de Microsoft (Binary Interchange File Format 12).</strong></li>
</ul>
<h3 id="comment-xlsx1-encode-les-données-surcharge-du-dom-xml">Comment <a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> encode les données (surcharge du DOM XML)</h3>
<p>Dans une feuille de calcul XLSX, chaque cellule est déclarée avec des balises XML explicites :</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-xml" data-lang="xml"><span style="display:flex;"><span><span style="color:#f92672">&lt;row</span> <span style="color:#a6e22e">r=</span><span style="color:#e6db74">&#34;1&#34;</span> <span style="color:#a6e22e">spans=</span><span style="color:#e6db74">&#34;1:2&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;c</span> <span style="color:#a6e22e">r=</span><span style="color:#e6db74">&#34;A1&#34;</span> <span style="color:#a6e22e">t=</span><span style="color:#e6db74">&#34;s&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;v&gt;</span>142<span style="color:#f92672">&lt;/v&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/c&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;c</span> <span style="color:#a6e22e">r=</span><span style="color:#e6db74">&#34;B1&#34;</span><span style="color:#f92672">&gt;</span>
</span></span><span style="display:flex;"><span>        <span style="color:#f92672">&lt;v&gt;</span>98234.55<span style="color:#f92672">&lt;/v&gt;</span>
</span></span><span style="display:flex;"><span>    <span style="color:#f92672">&lt;/c&gt;</span>
</span></span><span style="display:flex;"><span><span style="color:#f92672">&lt;/row&gt;</span>
</span></span></code></pre></div><p>Lors de la lecture de cette ligne, votre environnement d&rsquo;exécution doit :</p>
<ol>
<li>Décompresser le flux deflate brut en texte.</li>
<li>Tokeniser et analyser les caractères de chaîne en un DOM XML ou un flux d&rsquo;événements SAX.</li>
<li>Valider les balises d&rsquo;ouverture et de fermeture (<code>&lt;c&gt;</code>, <code>&lt;/c&gt;</code>, <code>&lt;v&gt;</code>, <code>&lt;/v&gt;</code>).</li>
<li>Résoudre les recherches de chaînes à partir d&rsquo;une table <code>sharedStrings.xml</code> séparée.</li>
<li>Analyser le texte ASCII <code>\&quot;98234.55\&quot;</code> en un nombre à virgule flottante IEEE 754 de 64 bits.</li>
</ol>
<p>Chaque cellule entraîne une surcharge CPU pour l&rsquo;analyse de chaînes, l&rsquo;allocation de chaînes et l&rsquo;analyse lexicale. Multipliez cela sur 500,000 lignes et 30 colonnes (15 millions de cellules), et le CPU consomme beaucoup plus de cycles à analyser la syntaxe qu&rsquo;à traiter les valeurs du domaine.</p>
<h3 id="comment-xlsb3-encode-les-données-flux-binaire-biff12">Comment <a href="https://docs.fileformat.com/spreadsheet/xlsb/">XLSB</a> encode les données (flux binaire BIFF12)</h3>
<p>BIFF12 supprime complètement la sérialisation du texte. Au lieu d&rsquo;un balisage de chaînes, les données sont organisées comme une séquence séquentielle d&rsquo;enregistrements binaires de longueur variable :</p>
<pre tabindex="0"><code>[Record Type: 2 bytes] [Record Length: 4 bytes] [Payload: N bytes]
</code></pre><p>Une cellule à virgule flottante dans BIFF12 n&rsquo;utilise pas de représentations de chaîne comme <code>\&quot;98234.55\&quot;</code>. Elle est représentée directement :</p>
<ul>
<li>2 octets pour l&rsquo;ID d&rsquo;enregistrement (p. ex., <code>BrtCellRk</code> ou <code>BrtCellReal</code>)</li>
<li>4 octets pour les indices de colonne/ligne</li>
<li>8 octets contenant la structure brute d&rsquo;octets en double précision IEEE 754</li>
</ul>
<p>Lorsque votre analyseur lit un fichier XLSB, il contourne complètement l&rsquo;analyse lexicale. Il lit l&rsquo;en-tête d&rsquo;enregistrement, récupère les 8 octets bruts du tampon, les copie directement en mémoire et avance le pointeur. Il n&rsquo;y a aucun tag à valider, aucune conversion de type chaîne‑vers‑nombre, et aucun coût de décodage UTF‑8 pour les données numériques.</p>
<h2 id="2-benchmarks-quantitatifs-disque-mémoire-et-débit">2. Benchmarks quantitatifs : disque, mémoire et débit</h2>
<p>Pour illustrer l&rsquo;impact réel, considérez un jeu de données simulé contenant <strong>750 000 lignes et 25 colonnes</strong> (un mélange d&rsquo;horodatages, de nombres à virgule flottante, d&rsquo;entiers et de codes de catégorie).</p>
<p>Les tests ci‑dessous évaluent des données tabulaires identiques enregistrées à la fois au format XLSX et XLSB.</p>
<h3 id="environnement-de-test">Environnement de test</h3>
<ul>
<li><strong>CPU:</strong> AMD Ryzen 9 5900X (12 cœurs, 24 threads)</li>
<li><strong>RAM:</strong> 64 Go DDR4-3600</li>
<li><strong>Stockage:</strong> PCIe 4.0 NVMe SSD</li>
<li><strong>Temps d&rsquo;exécution:</strong> Python 3.11 (<code>openpyxl</code>, <code>pyxlsb</code>, <code>calamine</code>) &amp; .NET 8 (<code>ExcelDataReader</code>, <code>ClosedXML</code>)</li>
</ul>
<h3 id="métriques-de-performance-clés">Métriques de performance clés</h3>
<table>
<thead>
<tr>
<th style="text-align:left">Métrique</th>
<th style="text-align:left"><a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> (OpenXML)</th>
<th style="text-align:left"><a href="https://docs.fileformat.com/spreadsheet/xlsb/">XLSB</a> (BIFF12)</th>
<th style="text-align:left">Delta / Amélioration</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>Taille du fichier sur le disque</strong></td>
<td style="text-align:left">128.4 MB</td>
<td style="text-align:left">68.2 MB</td>
<td style="text-align:left"><strong>~47% plus petit</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Enregistrement / Temps de sérialisation</strong></td>
<td style="text-align:left">42.6 s</td>
<td style="text-align:left">14.1 s</td>
<td style="text-align:left"><strong>3.0x plus rapide</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Temps de lecture (analyseur DOM Python)</strong></td>
<td style="text-align:left">38.2 s</td>
<td style="text-align:left">8.9 s</td>
<td style="text-align:left"><strong>4.3x plus rapide</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Temps de lecture (Moteur Rust/C)</strong></td>
<td style="text-align:left">6.4 s</td>
<td style="text-align:left">1.9 s</td>
<td style="text-align:left"><strong>3,3 x plus rapide</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Allocation maximale du tas pendant la lecture</strong></td>
<td style="text-align:left">~1.85 GB</td>
<td style="text-align:left">~510 MB</td>
<td style="text-align:left"><strong>~72 % de réduction</strong></td>
</tr>
</tbody>
</table>
<h3 id="pourquoi-les-fichiers-xlsb-sont-plus-petits">Pourquoi les fichiers XLSB sont plus petits</h3>
<p>Alors que les deux formats utilisent la compression ZIP standard, les flux binaires compressent beaucoup plus efficacement que le texte XML gonflé :</p>
<ol>
<li><strong>La syntaxe redondante est éliminée :</strong> XML contient des balises répétitives (<code>&lt;c r=&quot;AA1&quot; s=&quot;1&quot;&gt;</code>) sur chaque enregistrement. Bien que la compression ZIP atténue les chaînes répétées, le flux de données non compressé est massif.</li>
<li><strong>Densité numérique :</strong> En XML, le nombre <code>12345678.9012</code> nécessite 14 octets de texte ASCII. Dans BIFF12, il est stocké comme un double de 8 octets (ou empaqueté dans un enregistrement <code>RK</code> de 4 octets s&rsquo;il respecte des règles de précision spécifiques).</li>
</ol>
<h2 id="3-empreinte-mémoire-et-pression-du-ramasse-miettes">3. Empreinte mémoire et pression du ramasse-miettes</h2>
<p>Pour les services web et les microservices gérant des requêtes concurrentes, la vitesse du CPU n&rsquo;est que la moitié du combat ; <strong>l&rsquo;empreinte mémoire</strong> est l&rsquo;endroit où les applications échouent réellement.</p>
<pre tabindex="0"><code>XLSX Parsing Heap Profile:
[ String Buffer ] -&gt; [ Tokenizer ] -&gt; [ XML DOM Nodes ] -&gt; [ Object Boxing ]
▲ Massive Gen 0/1 heap allocation -&gt; Triggers aggressive Garbage Collection

XLSB Parsing Heap Profile:
[ Byte Buffer ] -&gt; [ Fixed Struct Copy ] -&gt; [ Destination Array ]
▲ Minimal allocations -&gt; Low GC overhead
</code></pre><p>Lorsqu&rsquo;un analyseur XML traite un fichier XLSX de 100 Mo, il doit créer des milliers de jetons de chaîne éphémères, des tampons de tranches de chaîne et des recherches dans le dictionnaire. Dans les langages à collecte de déchets (Java, C#, Go, Node.js, Python), cela crée une fragmentation extrême du tas et pousse le runtime à des pauses fréquentes de collecte des ordures (GC).</p>
<p>Parce que l&rsquo;analyse XLSB fonctionne directement sur des tranches d&rsquo;octets à largeur fixe, les analyseurs peuvent lire les données dans des structures allouées sur la pile ou des tampons d&rsquo;octets réutilisables. Le résultat est une empreinte mémoire considérablement réduite et aucune surcharge de l&rsquo;allocateur d&rsquo;exécution.</p>
<h2 id="4-exemples-dimplémentation-pour-les-développeurs">4. Exemples d&rsquo;implémentation pour les développeurs</h2>
<p>Examinons comment exploiter XLSB dans les chaînes d&rsquo;outils courantes des développeurs.</p>
<h3 id="python-migration-dopenpyxl-vers-calamine--pyxlsb">Python : migration d&rsquo;OpenPyXL vers Calamine / PyXLSB</h3>
<p>Par défaut, <code>pandas.read_excel('data.xlsx')</code> utilise <code>openpyxl</code>, qui construit un arbre en mémoire lourd.</p>
<p>Pour traiter de gros fichiers XLSB à la vitesse maximale, utilisez le moteur <code>calamine</code> propulsé par Rust (disponible via <code>python-calamine</code> et intégré dans les versions modernes de Pandas) :</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">import</span> pandas <span style="color:#66d9ef">as</span> pd
</span></span><span style="display:flex;"><span><span style="color:#f92672">import</span> time
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>filename_xlsx <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;large_dataset.xlsx&#34;</span>
</span></span><span style="display:flex;"><span>filename_xlsb <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;large_dataset.xlsb&#34;</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Reading standard XLSX (uses openpyxl by default)</span>
</span></span><span style="display:flex;"><span>t0 <span style="color:#f92672">=</span> time<span style="color:#f92672">.</span>perf_counter()
</span></span><span style="display:flex;"><span>df_xlsx <span style="color:#f92672">=</span> pd<span style="color:#f92672">.</span>read_excel(filename_xlsx, engine<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;openpyxl&#34;</span>)
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;XLSX loaded in </span><span style="color:#e6db74">{</span>time<span style="color:#f92672">.</span>perf_counter() <span style="color:#f92672">-</span> t0<span style="color:#e6db74">:</span><span style="color:#e6db74">.2f</span><span style="color:#e6db74">}</span><span style="color:#e6db74">s&#34;</span>)
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#75715e"># Reading XLSB with Calamine (Rust engine)</span>
</span></span><span style="display:flex;"><span>t0 <span style="color:#f92672">=</span> time<span style="color:#f92672">.</span>perf_counter()
</span></span><span style="display:flex;"><span>df_xlsb <span style="color:#f92672">=</span> pd<span style="color:#f92672">.</span>read_excel(filename_xlsb, engine<span style="color:#f92672">=</span><span style="color:#e6db74">&#34;calamine&#34;</span>)
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;XLSB loaded in </span><span style="color:#e6db74">{</span>time<span style="color:#f92672">.</span>perf_counter() <span style="color:#f92672">-</span> t0<span style="color:#e6db74">:</span><span style="color:#e6db74">.2f</span><span style="color:#e6db74">}</span><span style="color:#e6db74">s&#34;</span>)
</span></span></code></pre></div><p>Si vous parcourez d&rsquo;énormes ensembles de données ligne par ligne sans charger la matrice complète dans un DataFrame, <code>pyxlsb</code> fournit un itérateur de diffusion léger :</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-python" data-lang="python"><span style="display:flex;"><span><span style="color:#f92672">from</span> pyxlsb <span style="color:#f92672">import</span> open_workbook
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>total_sum <span style="color:#f92672">=</span> <span style="color:#ae81ff">0.0</span>
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">with</span> open_workbook(<span style="color:#e6db74">&#34;massive_export.xlsb&#34;</span>) <span style="color:#66d9ef">as</span> wb:
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">with</span> wb<span style="color:#f92672">.</span>get_sheet(<span style="color:#ae81ff">1</span>) <span style="color:#66d9ef">as</span> sheet:
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">for</span> row <span style="color:#f92672">in</span> sheet:
</span></span><span style="display:flex;"><span>            <span style="color:#75715e"># Cell 0 contains an RK integer or Double float</span>
</span></span><span style="display:flex;"><span>            val <span style="color:#f92672">=</span> row[<span style="color:#ae81ff">0</span>]<span style="color:#f92672">.</span>v
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> val <span style="color:#f92672">is</span> <span style="color:#f92672">not</span> <span style="color:#66d9ef">None</span>:
</span></span><span style="display:flex;"><span>                total_sum <span style="color:#f92672">+=</span> val
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>print(<span style="color:#e6db74">f</span><span style="color:#e6db74">&#34;Aggregated Total: </span><span style="color:#e6db74">{</span>total_sum<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>)
</span></span></code></pre></div><h3 id="c--net-ingestion-de-flux-haute-performance">C# / .NET : ingestion de flux haute performance</h3>
<p>Dans .NET, des bibliothèques comme <code>ClosedXML</code> ou <code>EPPlus</code> sont excellentes pour la génération standard, mais pour ingérer de gros fichiers sans épuisement de mémoire, <code>ExcelDataReader</code> avec prise en charge XLSB est exceptionnellement rapide :</p>
<div class="highlight"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"><code class="language-csharp" data-lang="csharp"><span style="display:flex;"><span><span style="color:#66d9ef">using</span> System;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> System.IO;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">using</span> ExcelDataReader;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">public</span> <span style="color:#66d9ef">class</span> <span style="color:#a6e22e">XlsbProcessor</span>
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>    <span style="color:#66d9ef">public</span> <span style="color:#66d9ef">static</span> <span style="color:#66d9ef">void</span> ProcessBinarySheet(<span style="color:#66d9ef">string</span> filePath)
</span></span><span style="display:flex;"><span>    {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e">// ExcelDataReader automatically identifies BIFF12 from file headers</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">using</span> var stream = File.Open(filePath, FileMode.Open, FileAccess.Read, FileShare.Read);
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">using</span> var reader = ExcelReaderFactory.CreateReader(stream);
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">long</span> rowCount = <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">double</span> aggregateValue = <span style="color:#ae81ff">0</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">while</span> (reader.Read())
</span></span><span style="display:flex;"><span>        {
</span></span><span style="display:flex;"><span>            rowCount++;
</span></span><span style="display:flex;"><span>            
</span></span><span style="display:flex;"><span>            <span style="color:#75715e">// Read column directly without boxing overhead where possible</span>
</span></span><span style="display:flex;"><span>            <span style="color:#66d9ef">if</span> (!reader.IsDBNull(<span style="color:#ae81ff">0</span>))
</span></span><span style="display:flex;"><span>            {
</span></span><span style="display:flex;"><span>                aggregateValue += reader.GetDouble(<span style="color:#ae81ff">0</span>);
</span></span><span style="display:flex;"><span>            }
</span></span><span style="display:flex;"><span>        }
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        Console.WriteLine(<span style="color:#e6db74">$&#34;Processed {rowCount:N0} rows. Sum: {aggregateValue:F2}&#34;</span>);
</span></span><span style="display:flex;"><span>    }
</span></span><span style="display:flex;"><span>}
</span></span></code></pre></div><h2 id="5-compromis-architecturaux-quand-ne-pas-utiliser-xlsb">5. Compromis architecturaux : quand NE PAS utiliser XLSB</h2>
<p>En dépit de ses avantages de performance écrasants, XLSB n&rsquo;est pas une solution miracle. Vous devez peser plusieurs compromis opérationnels avant de l&rsquo;imposer à l&rsquo;ensemble de votre pile :</p>
<pre tabindex="0"><code>                      DECISION MATRIX
                      
               Is file size &gt; 50MB OR 
               rows &gt; 100,000?
                    │
         ┌──────────┴──────────┐
        YES                    NO
         │                     │
   Do third-party        Use standard XLSX
   tools strictly        (Maximum compatibility)
   require OpenXML?
         │
    ┌────┴────┐
   YES        NO
    │         │
Use XLSX   Use XLSB
(Stream)   (Max speed &amp; efficiency)
</code></pre><h3 id="1-écosystème-et-prise-en-charge-des-bibliothèques">1. Écosystème et prise en charge des bibliothèques</h3>
<ul>
<li><strong>XLSX:</strong> Universel. Pratiquement chaque langage, bibliothèque, outil SaaS (Google Sheets, Airtable, Tableau) et analyseur web prennent en charge OpenXML nativement.</li>
<li><strong>XLSB:</strong> Moins répandu. Bien qu&rsquo;Excel, LibreOffice et des bibliothèques de développeurs matures (<code>ExcelDataReader</code>, <code>pyxlsb</code>, <code>calamine</code>, <code>Aspose</code>) le prennent en charge, de nombreux paquets légers ou analyseurs JavaScript purement web (comme les versions plus anciennes de <code>SheetJS</code>) offrent un support limité ou en lecture seule.</li>
</ul>
<h3 id="2-différences-git-et-contrôle-de-version">2. Différences Git et contrôle de version</h3>
<ul>
<li><strong>XLSX:</strong> Parce qu&rsquo;il contient du texte XML à l&rsquo;intérieur d&rsquo;un conteneur ZIP, les utilitaires en ligne de commande et les hooks Git peuvent décompresser et formater le XML pour générer des diff structurels lisibles entre les commits.</li>
<li><strong>XLSB:</strong> Données purement binaires. Les systèmes de contrôle de version le traitent strictement comme un blob binaire opaque, éliminant toute possibilité de diff granulaire ou de fusion au niveau des lignes.</li>
</ul>
<h3 id="3-rendu-côté-client-web">3. Rendu côté client Web</h3>
<p>Si votre architecture repose sur le rendu de feuilles de calcul directement dans le navigateur via WebAssembly ou JavaScript côté client, les analyseurs XLSX sont nettement plus matures et moins sujets aux bugs de rendu dans les cas limites que les analyseurs binaires côté client.</p>
<h3 id="4-pipelines-dingestion-tiers">4. Pipelines d&rsquo;ingestion tiers</h3>
<p>Si vous exportez des fichiers pour des clients d&rsquo;entreprise externes, de nombreuses politiques de sécurité d&rsquo;entreprise strictes signalent les fichiers <code>.xlsb</code>. Comme les fichiers BIFF12 peuvent stocker les macros VBA de la même manière que les fichiers <code>.xlsm</code> (sans nécessiter d&rsquo;extension distincte), certains filtres de messagerie et scanners de pare-feu mettent en quarantaine les téléchargements <code>.xlsb</code> en tant que menaces potentielles contenant des macros.</p>
<h2 id="6-comparaison-récapitulative-quel-format-lemporte">6. Comparaison récapitulative : quel format l&rsquo;emporte ?</h2>
<table>
<thead>
<tr>
<th style="text-align:left">Fonctionnalité</th>
<th style="text-align:left">XLSX</th>
<th style="text-align:left">XLSB</th>
<th style="text-align:left">Gagnant</th>
</tr>
</thead>
<tbody>
<tr>
<td style="text-align:left"><strong>Vitesse de lecture / d&rsquo;analyse</strong></td>
<td style="text-align:left">Modéré à médiocre</td>
<td style="text-align:left">Ultra-rapide</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Vitesse d&rsquo;écriture / de génération</strong></td>
<td style="text-align:left">Intensif en CPU</td>
<td style="text-align:left">Rapide</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Compression de fichier</strong></td>
<td style="text-align:left">Bon</td>
<td style="text-align:left">Excellent (~40-50% plus petit)</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Allocation de mémoire</strong></td>
<td style="text-align:left">Élevé (pression GC importante)</td>
<td style="text-align:left">Faible (lecture directe d&rsquo;octets)</td>
<td style="text-align:left"><strong>XLSB</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Interopérabilité des outils</strong></td>
<td style="text-align:left">Universel</td>
<td style="text-align:left">Élevée, mais sélective</td>
<td style="text-align:left"><strong>XLSX</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Friction de l&rsquo;analyse de sécurité</strong></td>
<td style="text-align:left">Minime</td>
<td style="text-align:left">Faux positifs occasionnels</td>
<td style="text-align:left"><strong>XLSX</strong></td>
</tr>
<tr>
<td style="text-align:left"><strong>Capacité de macro</strong></td>
<td style="text-align:left">Non (<code>.xlsm</code> requis)</td>
<td style="text-align:left">Oui (Prend en charge les macros nativement)</td>
<td style="text-align:left"><strong>Égalité</strong></td>
</tr>
</tbody>
</table>
<h2 id="7-le-verdict-du-développeur">7. Le verdict du développeur</h2>
<p>Utilisez <strong>XLSX</strong> lorsque :</p>
<ul>
<li>Les fichiers sont de petite à moyenne taille (&lt; 50 000 lignes).</li>
<li>Vos fichiers doivent être ingérés par des plateformes SaaS tierces ou des applications grand public (p. ex., Google Sheets).</li>
<li>Vous ne pouvez pas contrôler l&rsquo;environnement du client final qui lit le fichier.</li>
</ul>
<p>Passez à <strong>XLSB</strong> lorsque :</p>
<ul>
<li>Vous créez des pipelines internes, des jobs batch, des systèmes ETL ou des tâches de travail qui traitent d&rsquo;énormes extractions de données (&gt; 100 000 lignes).</li>
<li>Vos serveurs rencontrent des erreurs de dépassement de mémoire (OOM) lors de la sérialisation ou de la désérialisation de feuilles de calcul.</li>
<li>Vous devez réduire l&rsquo;empreinte de stockage S3/blob et le temps de transit réseau pour les grands modèles financiers récurrents ou les exportations de données.</li>
</ul>
<p>Passer à XLSB est souvent aussi simple que de modifier une chaîne de configuration dans votre service d&rsquo;exportation, mais cela offre des gains de débit de 3 à 5 fois, qui nécessitent normalement des semaines d&rsquo;optimisation du code.</p>
<h2 id="foire-aux-questions-faq">Foire aux questions (FAQ)</h2>
<p>**Q1: Un fichier <a href="https://docs.fileformat.com/spreadsheet/xlsb/">XLSB</a> prend‑il en charge exactement les mêmes limites de lignes et de colonnes qu’un fichier <a href="https://docs.fileformat.com/spreadsheet/xlsx/">XLSX</a> ?
Oui ; les deux formats XLSB et XLSX partagent exactement le même plafond de grille de 1 048 576 lignes par 16 384 colonnes par feuille de calcul.</p>
<p>**Q2: Un fichier XLSB peut‑il stocker en toute sécurité des macros VBA sans changer son extension de fichier ?
Oui, contrairement à XLSX (qui nécessite d’être enregistré en XLSM pour exécuter du code), XLSB prend en charge le stockage binaire des macros VBA nativement dans le même format de fichier <code>.xlsb</code>.</p>
<p>**Q3: Pourquoi l’enregistrement d’un fichier au format XLSB réduit‑il sa taille alors que les deux formats sont déjà compressés en ZIP ?
XLSB élimine les balises de balisage texte verbeuses et encode les positions des cellules, les enregistrements et les valeurs numériques brutes dans des flux d&rsquo;octets binaires compacts qui se compressent beaucoup plus densément que les chaînes XML simples.</p>
<p>**Q4: Google Sheets peut-il importer et modifier les fichiers XLSB directement ?
Non ; Google Sheets ne peut pas ouvrir ou convertir nativement les fichiers <code>.xlsb</code> directement, vous obligeant à les convertir en <code>.xlsx</code> ou CSV avant l&rsquo;importation.</p>
<p>**Q5: Les fichiers XLSB sont-ils plus susceptibles de subir une corruption de données que les fichiers XLSX ?
Bien que les fichiers XML puissent parfois être inspectés ou réparés manuellement avec un éditeur de texte lorsqu&rsquo;ils sont partiellement corrompus, les flux binaires BIFF12 nécessitent des décalages d&rsquo;octets stricts et sont difficiles à récupérer manuellement si les secteurs structurels sont endommagés.</p>
<h2 id="voir-aussi">Voir aussi</h2>
<ul>
<li><a href="https://blog.fileformat.com/en/spreadsheet/csv-vs-xlsx-vs-ods-in-2026-best-spreadsheet-format-for-developers/">CSV vs XLSX vs ODS en 2026 : le meilleur format de feuille de calcul pour les développeurs</a></li>
<li><a href="https://blog.fileformat.com/en/spreadsheet/xls-vs-xlsx-vs-xlsm-vs-xlsb-choosing-the-right-spreadsheet-format/">XLS vs XLSX vs XLSM vs XLSB - Choisir le bon format de feuille de calcul</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/what-is-excel/">Qu&rsquo;est-ce qu&rsquo;Excel ? Informations clés à connaître</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/excel-file-extensions-xlsx-xlsm-xls-xltx-xltm/">Formats de fichiers Excel : XLSX, XLSM, XLS, XLTX, XLTM</a></li>
<li><a href="https://blog.fileformat.com/spreadsheet/xls-vs-xlsx/">Différence entre XLS et XLSX</a></li>
</ul>
<!-- raw HTML omitted -->
]]></content:encoded>
    </item>
    
  </channel>
</rss>
