Avemey / zexmlss

ZEXMLSS Lazarus/Delphi component for read/write ods, excel xml, xlsx
http://avemey.com/zexmlss/index.php
Other
71 stars 52 forks source link

Не правильно работают границы на объединенных ячейках #29

Open Konctantin opened 5 years ago

Konctantin commented 5 years ago

И так, если для объединенной ячейки поставить к примеру толстую рамку вокруг (без пересечения), то при считывании файла а потом его сохранения получаем такой баг. Гриница остается слева и вверху, а низ и правая сторона остаются без границы. image

Это все происходит из-за того, то для объединенной области всем ячейкам присваивается стиль верхней левой ячейки. Но так как у этой верхней левой ячейки стиль не содержит границ снизу и справа, получаем такой эффект.

вся проблема кроется вот в этом куске кода:

        _in_merge_not_top := false;
        k := _sheet.MergeCells.InMergeRange(j, i);
        if (k >= 0) then
          _in_merge_not_top := _sheet.MergeCells.InLeftTopCorner(j, i) < 0;

        if (_in_merge_not_top) then
        begin
          k1 := _sheet.MergeCells.Items[k].Left;
          k2 := _sheet.MergeCells.Items[k].top;
        end
        else
        begin
          k1 := j;
          k2 := i;
        end;

        if (_sheet.Cell[k1, k2].CellStyle >= -1) and (_sheet.Cell[k1, k2].CellStyle < XMLSS.Styles.Count) then
          s := IntToStr(_sheet.Cell[k1, k2].CellStyle + 1)
        else
          s := '0';
        _xml.Attributes.Add('s', s, false);

если его заменить на этот, все заработает:

        if (_sheet.Cell[j, i].CellStyle >= -1) and (_sheet.Cell[j, i].CellStyle < XMLSS.Styles.Count) then
          s := IntToStr(_sheet.Cell[j, i].CellStyle + 1)
        else
          s := '0';
        _xml.Attributes.Add('s', s, false);

Суть в том, что у ячеек должны оставаться свои же стили, ничего подменять не надо, так делает и сам офис.