Как применить границу таблицы контуров к диапазону ячеек с помощью OpenXml?

Я устанавливаю стиль границы для каждой ячейки. Но если вы внимательно посмотрите, то увидите, что синие линии не идут подряд. Поперек вертикальных линий есть несколько белых штрихов. Потому что внутри таблицы я установил верхнюю и нижнюю границы ячеек белыми. Кто-нибудь знает, как этого избежать?

Ячейка таблицы

WorksheetPart v_worksheetPart = a_workbookPart.AddNewPart<WorksheetPart>();
v_worksheetPart.Worksheet = new Worksheet();
SheetData v_sheetData = new SheetData();
Row v_Row = new Row();
Cell v_Cell = new Cell();
...
v_Row.Append(v_Cell);
v_sheetData.Append(v_Row);
v_worksheetPart.Worksheet.AppendChild(v_sheetData);
...

person Joyin    schedule 12.09.2017    source источник


Ответы (4)


Просто позвони

ws.Cells[row, col].Style.Border.BorderAround(ExcelBorderStyle.Thin);
person napi15    schedule 12.09.2017
comment
Привет, не могли бы вы сообщить мне, что такое объект «ws». Похоже, OpenXml.Spreadsheet.WorkSheet не содержит атрибута «Ячейки». - person Joyin; 12.09.2017
comment
@Joyin ws - это ваш чит-код, да, он на самом деле содержит .... какую версию openXML вы используете? не могли бы вы опубликовать немного своего кода? Я мог бы вам очень помочь, если бы увидел структуру того, что вы делаете. - person napi15; 12.09.2017
comment
Я использую версию 2.5. Позвольте мне попытаться опубликовать часть моего кода. - person Joyin; 12.09.2017
comment
@Joyin Спасибо за редактирование, я скоро вернусь к вам, так что если я правильно понимаю, вы хотите удалить странное форматирование? Да ваш код помогает - person napi15; 12.09.2017
comment
Я разместил часть своего кода. Не уверен, что это поможет. Большое спасибо за вашу помощь заранее! - person Joyin; 12.09.2017

Вместо того, чтобы рисовать белые рамки, чтобы скрыть серые линии сетки по умолчанию, вы должны вместо этого просто скрыть линии сетки рабочего листа. Чтобы сделать это с помощью кода, вы должны установить ShowGridLines. значение False в SheetView, например код в этом ответе SO.

Затем удалите свой код, добавляющий белые границы вашему решению, и оставьте код для синих границ. Это удалит белые разрывы в синей рамке.

person Taterhead    schedule 13.09.2017
comment
Привет Taterhead, большое спасибо за ваш ответ! Это тоже хорошее решение. Единственным недостатком является то, что линии сетки всегда применяются ко всему рабочему листу или книге и не могут применяться к определенным ячейкам или диапазонам. - person Joyin; 13.09.2017

Другим решением было бы начать с рабочего листа, где все линии сетки окрашены в белый цвет. В первом пункте показано, как это сделать в Excel. Чтобы сделать это в пустой книге, используйте код ниже:

  sheetView1.DefaultGridColor = false;
  sheetView1.ColorId = 9U; 

Согласно документам, эти свойства указывают Excel не окрашивать линии сетки в цвет по умолчанию и вместо этого использовать индекс цвета 9. 9 соответствует индексу белого цвета в пустой книге Excel. По умолчанию все ячейки будут иметь белый цвет линии сетки.

Затем вы должны удалить любой существующий код, который окрашивает границы ячеек в белый цвет, и оставить код, который окрашивает границы ячеек в синий цвет. Это еще один способ удалить белые метки в исходной задаче.

person Taterhead    schedule 13.09.2017

Решение Татерхеда хорошее. У меня есть еще один здесь. Вместо того, чтобы рисовать белые границы, просто установите белый цвет фона диапазона ячеек.

Спасибо всем за помощь!

person Joyin    schedule 13.09.2017
comment
Не забудьте проголосовать за ответы и отметить тот, который подходит вам больше всего, как решенный - person napi15; 15.09.2017
comment
есть идеи, как установить цвет фона, чтобы он не удалял все границы? - person bobwah; 12.02.2020