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

2023-12-12

我正在尝试在 EPPlus 4.0.4 中创建可靠的数据栏,但遇到了两个问题。

  • 首先,我一直无法弄清楚如何创建纯色填充颜色。
  • 其次,至少对于较小的值,条形图没有按照我期望的方式显示。

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

enter image description here

这是我当前使用的代码:

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,无济于事。如果实现了这一点,那么我找不到合适的财产就很简单了。

我很难理解第二个问题。如果我进入 Excel 中的“管理规则”,则高值和低值已正确设置,但我发现没有可以将它们更改为使其外观与手动创建的条形相匹配的值。


这是一个扩展列表问题。当涉及更复杂的导出时,这种情况经常出现。条件格式可能是更难的格式之一,因为有很多细微差别,而且多年来它已经发生了很大的变化。

扩展列表(extLstxml 中的标签)是一种包罗万象的桶,OpenOfficeXml标准可用于添加新功能和格式。在您的情况下,Excel 会填充扩展列表部分以允许扩展的最小/最大限制。 Epplus 不支持这一点,这就是您看到差异的原因。

最简单的选择就是通过 xml/字符串操作自己注入它,虽然不太漂亮,但它可以完成工作:

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""这会将颜色条设置为实心而不是渐变以及最小/最大设置以获得您正在寻找的传播。

更“正确”的方法是逐个节点和逐个属性地重新创建 xml 对象,这将需要一段时间,但只需执行一次。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体数据栏和数据栏最小值的手动版本和编码版本之间的外观不一致 的相关文章

随机推荐

  • nVIDIA 驱动程序如何将设备索引分配给 GPU?

    假设在单个节点上 有多个具有不同计算能力的设备 nvidia如何对它们进行排名 我的排名是指cudaSetDevice分配的数字 有关于此的一般准则吗 谢谢 我相信对应的设备顺序cuda获取设备 and cudaSetDevice 即 CU
  • 在 QML TableView 中单击时编辑数据(如 Excel)

    我有一些代码 import QtQuick 2 2 import QtQuick Window 2 1 import QtQuick Controls 1 2 Window visible true width 538 height 360
  • 无法在 AppService 中使用 Active Directory 集成身份验证连接到 Azure SQL Server

    我们在 Azure 应用服务上部署了 Web 应用程序 我们的数据库也在 Azure 上 配置为使用 AAD 身份验证 我们已分配 AAD 管理员 我们在 Web 应用程序中使用下面的连接字符串来使用下面的连接字符串连接到该服务器和数据库
  • 在 Spring Boot 中将 Angular 环境变量传递给已编译的静态 Angular 文件

    我现在使用 Angular 和 Spring Boot 来构建网站项目 当我们部署时 我们将ng build output path spring boot project src main resources static Angular
  • 如何通过 sudo 运行命令并通过 ssh 输入密码 C#

    我想在具有 Linux 操作系统的远程计算机上运行命令并获取结果 我正在使用 ssh net 库通过 C 代码进行连接 我可以连接并运行一些不需要使用的命令 sudo 前 但我不知道如何运行需要 sudo 运行的命令 因为运行后 例如 su
  • 同时运行不同的表单

    我试图同时显示 2 个不同的表单 我尝试了以下代码 但它不起作用 Form1 t1 new Form1 Form2 t2 new Form2 t2 Show t1 Show Application Run 我还尝试从program cs运行
  • 如何验证文本字段,使其只能包含四位数

    我已经设法验证我的字段 因此它始终是四位数字 但我需要验证它始终是一个数字 我尝试添加这段代码 但它无法正常工作 if document ExamEntry cand value match numbers msg Only use num
  • 人类生成的数字和软件生成的数字哪个更随机?

    Does it 抛硬币获得随机位 Or 掷骰子获得 1 到 6 之间的随机整数 Or 从洗好的牌堆中取出一张牌获取 1 到 52 之间的数字 或者它能像我们一样思考或拥有像我们一样的智慧吗 显然 上面的例子不能成为生成随机数据的方法 那么软
  • 并排放置直方图

    我想在 gnuplot 中对类似于此图像的直方图 rowstacked 进行分组 我有这两个文件 其中直方图的数据来自 Round robin Input West Virginia ChicagoI ChicagoII Californi
  • 如何限制对Docker容器中路径的访问?

    Here我编写了一个 Dockerfile 用于测试用户访问 另一个文件 run sh 在此link 到目前为止 我已经这样做了 从 Ubuntu 12 04 05 开始 使用 sudo 和 ssh 服务器创建一个新容器 将默认 root
  • JUnit/HSQLDB:使用 HSQLDB 测试时如何解决 Oracle 语法错误(无特权和/或无 DUAL 对象)

    我有 DAO 代码 其中包含一些具有 Oracle 特定语法的 JDBC 例如 select count cnt from DUAL where exists select null from TABLE NAME where LOCATI
  • 什么时候应该在 C++ 中使用 new 关键字?

    我使用 C 有一段时间了 我一直想知道new关键词 简单地说 我应该使用它还是不使用它 随着new关键词 MyClass myClass new MyClass myClass gt MyField Hello world 如果没有new关
  • Javascript - 离开页面时确认

    我正在尝试实现一个基本的弹出窗口 询问用户是否真的想要离开页面 类似于如果我尝试在编写此消息的过程中关闭窗口 则会在该网站上发生的情况 我意识到这通常会引起人们的不满 但我有充分的理由想要这样做 我通过使用以下代码使其工作 function
  • 子路径上有多个 Django 项目 + Nginx

    我正在尝试运行多个用 Django 编写的仪表板以在我的服务器上运行 但无法启动并运行它 已关注这个数字海洋教程并根据其进行修改这个答案 现在一切都已启动并正在运行 但是当我指向我的 URL 时 它显示 Nginx 欢迎页面http ipa
  • ?? Swift 中的运算符

    在 Swift 编程语言 一书中 第 599 页 中 我遇到了这段令我困惑的代码片段 事情是这样的 func buyFavoriteSnack person String throws let snackName favoriteSnack
  • IE 8 对每页样式表的数量有限制吗?

    In 关于 CSS 的回答 一位用户说道 据说 Internet Explorer has 有 4096 CSS 的限制rules每个文件 参考 此外 它对可以嵌入到单个文档中的样式表数量也有限制 我认为是20 虽然参考MSDN似乎证实了这
  • 列表中的平均分

    第一次发帖 如果写得不好请见谅 我在一个文件中有一份列表 其中包含学生的姓名 ID 分数等 见下文 我想计算另一个文件中的平均分数 但我不知道如何只取分数并将平均值写入另一个文件中 Thanks name surname student i
  • 我们可以在 Chrome 扩展程序中检索机器序列号吗?

    我们可以在 Chrome 扩展程序中检索机器序列号吗 例如 我可以通过在 shell 中执行以下命令来获取 Windows 中的序列号 wmic BIOS 获取序列号 如何在 Chrome 扩展程序中获取此序列号 不会 Chrome 扩展程
  • 使用 HTML 和 JavaScript 返回 PartialView

    我正在进行 AJAX 调用 使用 jQuery 来检索PartialView 除了 HTML 之外 我还想发回视图正在显示的对象的 JSON 表示形式 我一直使用的蹩脚方法是将属性作为隐藏输入嵌入到 HTML 中 这很快就会变得笨拙并且紧密
  • 实体数据栏和数据栏最小值的手动版本和编码版本之间的外观不一致

    我正在尝试在 EPPlus 4 0 4 中创建可靠的数据栏 但遇到了两个问题 首先 我一直无法弄清楚如何创建纯色填充颜色 其次 至少对于较小的值 条形图没有按照我期望的方式显示 下面的屏幕截图说明了这两个问题 在这两种情况下 所需的结果都是