Epplus excel条件格式化数据条最大值

时间:2018-05-01 16:09:07

标签: c# excel conditional-formatting epplus epplus-4

我正在使用epplus创建一个excel文件,我正在尝试使用以下代码添加数据库:

var bar = pck.Workbook.Worksheets[1].ConditionalFormatting.AddDatabar(new ExcelAddress("I4:I56"), System.Drawing.Color.Blue);
            bar.HighValue.Type = eExcelConditionalFormattingValueObjectType.Num;
            bar.LowValue.Type = eExcelConditionalFormattingValueObjectType.Num;
            bar.HighValue.Value = 600;
            bar.LowValue.Value = 0;

但是,值为600的单元格未完全填充。它们看起来像这样:

enter image description here

当我希望它看起来像这样时,如果你在excel中将它设置为600,它就会出现: enter image description here

我已尝试按照此答案中的建议手动添加xml: https://stackoverflow.com/a/33568285/1308743并且同样的问题仍然存在。

1 个答案:

答案 0 :(得分:1)

您提供的链接中的answer对我有用,您可能只需更新xm:sqref中的单元格引用,以指向您的I4:I56地址,我相信这就是为什么它不适合你。

为解释视觉问题,EPPlus在xml中生成的dataBar缺少minLengthmaxLength属性。这些属性定义数据栏填充的固定宽度百分比。到default,最小长度为10%,最大长度为90%。

如果您不关心删除渐变,则可以直接添加minLengthmaxLength,而无需像链接答案中那样创建扩展名列表,如果您想要更简单的解决方案:< / p>

// 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 Productivity Tools来查看/比较Excel文档中的xml。