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
缺少 minLength
和 maxLength
属性。这些属性定义数据栏填充的固定宽度百分比。通过default,最小长度为10%,最大长度为90%。
如果您不关心删除渐变,您可以直接添加 minLength
和 maxLength
,而无需像 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。
我正在使用 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
缺少 minLength
和 maxLength
属性。这些属性定义数据栏填充的固定宽度百分比。通过default,最小长度为10%,最大长度为90%。
如果您不关心删除渐变,您可以直接添加 minLength
和 maxLength
,而无需像 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。