固体数据条和数据条最小值的手动和编码版本之间的外观不一致

我试图在EPPlus 4.0.4中创build可靠的数据库,并且遇到了两个问题。

  • 首先,我还没有弄清楚如何创build一个实心的填充颜色。
  • 其次,至less对于小的价值来说,酒吧并不是我期望的那样。

下面的截图说明了这两个问题。 在这两种情况下,所需的结果都是我在Excel中手动添加的数据条的结果:

在这里输入图像说明

这是我目前使用的代码:

var bars = doc.ConditionalFormatting.AddDatabar(range, Color.FromArgb(99,195,132)); bars.HighValue.Type = eExcelConditionalFormattingValueObjectType.Num; bars.LowValue.Type = eExcelConditionalFormattingValueObjectType.Num; bars.HighValue.Value = numResponses; //82 bars.LowValue.Value = 0; 

对于纯色,我一直在尝试bars.Style.Fill的不同属性值的变化,无济于事。 如果这是实施,这是一个简单的事情,我没有find合适的财产。

我很难理解第二个问题。 如果我进入Excel中的“pipe理规则”,正确设置高和低值,我发现没有价值,我可以改变他们,这将使他们的外观匹配手动创build的酒吧。

这是一个扩展列表问题。 当进入更复杂的出口时,这很容易出现。 有条件的格式可能是其中一个比较棘手的格式,因为有太多的细微差别,而且这些年来已经发生了很大的变化。

扩展列表(xml中的extLst标记)是OpenOfficeXml标准可以用来添加新function和格式的一种方式。 在你的情况下,Excel填充扩展列表部分,以允许扩展的最小/最大限制。 Epplus不支持这个,这就是你看到差异的原因。

你最简单的select只是通过xml /string操作自己注入它不是很漂亮,但它完成了工作:

 var bars = doc.ConditionalFormatting.AddDatabar(range, Color.FromArgb(99, 195, 132)); bars.HighValue.Type = eExcelConditionalFormattingValueObjectType.Num; bars.LowValue.Type = eExcelConditionalFormattingValueObjectType.Num; bars.HighValue.Value = numResponses; //82 bars.LowValue.Value = 0; //Get reference to the worksheet xml for proper namespace var xdoc = doc.WorksheetXml; var nsm = new XmlNamespaceManager(xdoc.NameTable); nsm.AddNamespace("default", xdoc.DocumentElement.NamespaceURI); //Create the conditional format extension list entry var extLstCf = xdoc.CreateNode(XmlNodeType.Element, "extLst", xdoc.DocumentElement.NamespaceURI); extLstCf.InnerXml = @"<ext uri=""{B025F937-C7B1-47D3-B67F-A62EFF666E3E}"" xmlns:x14=""http://schemas.microsoft.com/office/spreadsheetml/2009/9/main""><x14:id>{3F3F0E19-800E-4C9F-9CAF-1E3CE014ED86}</x14:id></ext>"; var cfNode = xdoc.SelectSingleNode("/default:worksheet/default:conditionalFormatting/default:cfRule", nsm); cfNode.AppendChild(extLstCf); //Create the extension list content for the worksheet var extLstWs = xdoc.CreateNode(XmlNodeType.Element, "extLst", xdoc.DocumentElement.NamespaceURI); extLstWs.InnerXml = @"<ext uri=""{78C0D931-6437-407d-A8EE-F0AAD7539E65}"" xmlns:x14=""http://schemas.microsoft.com/office/spreadsheetml/2009/9/main""><x14:conditionalFormattings><x14:conditionalFormatting xmlns:xm=""http://schemas.microsoft.com/office/excel/2006/main""><x14:cfRule type=""dataBar"" id=""{3F3F0E19-800E-4C9F-9CAF-1E3CE014ED86}""><x14:dataBar minLength=""0"" maxLength=""100"" gradient=""0""><x14:cfvo type=""num""><xm:f>0</xm:f></x14:cfvo><x14:cfvo type=""num""><xm:f>82</xm:f></x14:cfvo><x14:negativeFillColor rgb=""FFFF0000""/><x14:axisColor rgb=""FF000000""/></x14:dataBar></x14:cfRule><xm:sqref>B2:B11</xm:sqref></x14:conditionalFormatting></x14:conditionalFormattings></ext>"; var wsNode = xdoc.SelectSingleNode("/default:worksheet", nsm); wsNode.AppendChild(extLstWs); pck.Save(); 

请注意gradient=""0"" ,它会将颜色条设置为实体而不是渐变,以及最小/最大设置以获得您要查找的点差。

更“合适”的方法是将重新创buildxml对象节点和属性的属性,这将需要一段时间,但只需要做一次。