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

Epplus excel conditional formatting databar max value

我正在使用 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 的单元格未完全填充。它们看起来像这样:

当我希望它看起来像这样时,如果你在 excel 内将它设置为 600,它就是这样的:

我已尝试按照此答案中的建议手动添加 xml: 同样的问题仍然存在。

您提供的 link 中的 对我有用,您可能只需要更新 xm:sqref 中的单元格引用以指向您的 I4:I56 地址相反,我认为这就是它对您不起作用的原因。

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

如果您不关心删除渐变,您可以直接添加 minLengthmaxLength,而无需像 linked 答案中那样创建扩展列表。更简单的解决方案:

// 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");

如果您需要关闭渐变,您将需要使用 link 中的答案,因为 dataBar 元素似乎不支持 gradient 属性不在扩展列表中。

我还建议在 Excel 文档中使用 Open XML SDK Productivity Tools 到 view/compare xml。