Coder Social home page Coder Social logo

Comments (2)

tritueviet avatar tritueviet commented on June 23, 2024

any update?

from libxlsxwriter.

jmcnamara avatar jmcnamara commented on June 23, 2024

I don't plan to implement this feature. Constant memory mode writes data row by row for efficiency and merge_range() needs to write data on (usually) several rows so they aren't compatible.

I'll explain why in case anyone want to try fix it in their own version but I won't upstream it.

Consider a simple worksheet with a merged area like this:

screenshot

This is stored in an Excel xlsx file with the following xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet 
    xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"
    xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships">
  <dimension ref="B2:D4"/>
  <sheetViews>
    <sheetView tabSelected="1" workbookViewId="0"/>
  </sheetViews>
  <sheetFormatPr defaultRowHeight="15"/>
  <sheetData>
    <row r="2" spans="2:4">
      <c r="B2" s="1">
        <v>123456</v>
      </c>
      <c r="C2" s="1"/>
      <c r="D2" s="1"/>
    </row>
    <row r="3" spans="2:4">
      <c r="B3" s="1"/>
      <c r="C3" s="1"/>
      <c r="D3" s="1"/>
    </row>
    <row r="4" spans="2:4">
      <c r="B4" s="1"/>
      <c r="C4" s="1"/>
      <c r="D4" s="1"/>
    </row>
  </sheetData>
  <mergeCells count="1">
    <mergeCell ref="B2:D4"/>
  </mergeCells>
  <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>

The main thing to understand from this is that the merged range is stored in 2 places/ways:

  1. In the <mergeCells> element.
  2. As a collection of cell<c> elements which are mainly blank and which have the same cell style property s="1" as the first cell in the merged range which contains the string/number for the merged cells.

When writing a file in constant_memory mode it is possible to write the elements in the first but the elements in the second require the row number/cursor to advance which means that data cannot be written in the previous rows.

So that breaks merged ranges or else breaks writing any other data in a section of the worksheet with a merged range.

It would be possible to workaround this by tracking the merged ranges and then as the row/cursor advances to write out the formatted cells. However, I don't intend to add this to the library since it is reasonable amount of work to implement in a non error prone way. Also, and this is as important as the technical/effort reason, the constant memory mode is mainly intended for cases where the user wants to dump a large amount of data in a memory efficient way and in that mode they need to compromise on features such as merged ranges and tables.

So I am going to close this as won't fix.

from libxlsxwriter.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.