Ответ в предоставленной вами ссылке действительно работает для меня, вам может понадобиться просто обновить ссылку на ячейку в xm:sqref
, чтобы она указала на ваш адрес I4: I56, поэтому я считаю, что именно поэтому у тебя не работает.
Чтобы объяснить визуальную проблему, в dataBar
, который генерирует EPPlus в xml, отсутствуют атрибуты minLength
и maxLength
. Эти атрибуты определяют фиксированный процент ширины, который заполняет панель данных. По по умолчанию минимальная длина составляет 10%, а максимальная длина составляет 90%.
Если вас не волнует удаление градиента, вы можете напрямую добавить minLength
и maxLength
, не создавая список расширений, как в связанном ответе, если вы хотите более простое решение:
// All the code below goes after your code that creates the data bar
var ws = pck.Workbook.Worksheets[1];
// Create namespace manager using default uri to be able to select nodes.
var ns = new XmlNamespaceManager(ws.WorksheetXml.NameTable);
ns.AddNamespace("d", ws.WorksheetXml.DocumentElement.NamespaceURI);
// Get all the dataBar elements and set the missing min and max length attributes.
var dataBarElements = ws.WorksheetXml.SelectNodes("//d:dataBar", ns);
foreach (XmlElement dataBarElement in dataBarElements)
{
dataBarElement.SetAttribute("minLength", "0");
dataBarElement.SetAttribute("maxLength", "100");
}
Вышеизложенное относится ко всем панелям данных. Если вы хотите применить его только к одной панели данных, как для I4: I56, измените выбор на:
var dataBarElement = (XmlElement)ws.WorksheetXml.SelectSingleNode("//d:conditionalFormatting[@sqref='I4:I56']//d:dataBar", ns);
dataBarElement.SetAttribute("minLength", "0");
dataBarElement.SetAttribute("maxLength", "100");
Если вам нужно отключить градиент, вам нужно будет использовать ответ в своей ссылке, поскольку атрибут gradient
не поддерживается на элементах dataBar
, отсутствующих в списке расширений.
Я также предлагаю использовать Инструменты повышения производительности Open XML SDK для просмотра / сравнения XML в документах Excel.