如何在 Epplus 饼图中显示带小数的百分比?

2024-01-10

在 EPPLUS 饼图中,默认情况下百分比自动四舍五入,如何以编程方式显示 2 位小数(10.75 而不是 11)?

我只提供值(整数),百分比由组件自动计算。


在 EPPlus 中并没有真正看到设置它的选项 - 必须在Serie.DataLabel object.

看起来必须通过 XML 来完成。以下是如何执行此操作的示例(可能需要针对不同的图表类型进行调整):

[TestMethod]
public void PieChartDataLabelPercent()
{
    //http://stackoverflow.com/questions/42393711/how-to-display-percentages-with-decimals-in-an-epplus-pie-chart
    var file = new FileInfo(@"c:\temp\PieChartDataLabelPercent.xlsx");
    if (file.Exists)
        file.Delete();

    var pck = new ExcelPackage(file);
    var workbook = pck.Workbook;
    var worksheet = workbook.Worksheets.Add("newsheet");

    var rand = new Random();
    var data = new List<KeyValuePair<string, int>>();
    for (var i = 0; i < 10; i++)
        data.Add(new KeyValuePair<string, int>($"Group {i}", rand.Next(10, 100)));

    //Fill the table
    var startCell = worksheet.Cells[1, 1];
    startCell.Offset(0, 0).Value = "Group Name";
    startCell.Offset(0, 1).Value = "Group Value";
    startCell.Offset(1, 0).LoadFromCollection(data);

    //Add the chart to the sheet
    var pieChart = worksheet.Drawings.AddChart("Chart1", eChartType.Pie);
    pieChart.SetPosition(data.Count + 1, 0, 0, 0);
    pieChart.SetSize(500, 400);
    pieChart.Title.Text = "Test Chart";

    //Set the data range
    var series = pieChart.Series.Add(worksheet.Cells[2, 2, data.Count + 1, 2], worksheet.Cells[2, 1, data.Count + 1, 1]);
    var pieSeries = (ExcelPieChartSerie)series;
    pieSeries.Explosion = 5;

    //Format the labels
    pieSeries.DataLabel.ShowValue = true;
    pieSeries.DataLabel.ShowPercent = true;
    pieSeries.DataLabel.ShowLeaderLines = true;
    pieSeries.DataLabel.Separator = ";  ";
    pieSeries.DataLabel.Position = eLabelPosition.BestFit;

    var xdoc = pieChart.ChartXml;
    var nsuri = xdoc.DocumentElement.NamespaceURI;
    var nsm = new XmlNamespaceManager(xdoc.NameTable);
    nsm.AddNamespace("c", nsuri);

    //Added the number format node via XML
    var numFmtNode = xdoc.CreateElement("c:numFmt", nsuri);

    var formatCodeAtt = xdoc.CreateAttribute("formatCode", nsuri);
    formatCodeAtt.Value = "0.00%";
    numFmtNode.Attributes.Append(formatCodeAtt);

    var sourceLinkedAtt = xdoc.CreateAttribute("sourceLinked", nsuri);
    sourceLinkedAtt.Value = "0";
    numFmtNode.Attributes.Append(sourceLinkedAtt);

    var dLblsNode = xdoc.SelectSingleNode("c:chartSpace/c:chart/c:plotArea/c:pieChart/c:ser/c:dLbls", nsm);
    dLblsNode.AppendChild(numFmtNode);


    //Format the legend
    pieChart.Legend.Add();
    pieChart.Legend.Position = eLegendPosition.Right;

    pck.Save();

}

这在输出中给出了这个:

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

如何在 Epplus 饼图中显示带小数的百分比? 的相关文章

  • 如何读取扩展文件属性/文件元数据

    因此 我按照教程使用 ASP net core 将文件 上传 到本地路径 这是代码 public IActionResult About IList
  • C++ 中本地类中的静态成员变量?

    我知道我们不能宣布static本地类中的成员变量 但其原因尚不清楚 那么请问有人可以解释一下吗 另外 为什么我们不能访问非static函数内部定义的变量 内部已经定义了局部类 直接在局部类成员函数中 在下面给出的代码中 int main i
  • 为 Visual Studio 2013 编译 Tesseract

    我正在尝试使用tesseract在 Visual Studio 2013 中 我在链接器 gt 输入 不是 libtesseract302 static lib 中使用 libtesseract302 lib 一切都正常 并且已编译并运行
  • 如何在 C# 中从 UNIX 纪元时间转换并考虑夏令时?

    我有一个从 unix 纪元时间转换为 NET DateTime 值的函数 public static DateTime FromUnixEpochTime double unixTime DateTime d new DateTime 19
  • 如何为 C 分配的 numpy 数组注册析构函数?

    我想在 C C 中为 numpy 数组分配数字 并将它们作为 numpy 数组传递给 python 我可以做的PyArray SimpleNewFromData http docs scipy org doc numpy reference
  • 在新的浏览器进程中打开 URL

    我需要在新的浏览器进程中打开 URL 当浏览器进程退出时我需要收到通知 我当前使用的代码如下 Process browser new Process browser EnableRaisingEvents true browser Star
  • 互斥体实现可以互换(独立于线程实现)

    所有互斥体实现最终都会调用相同的基本系统 硬件调用吗 这意味着它们可以互换吗 具体来说 如果我使用 gnu parallel算法 使用openmp 并且我想让他们称之为线程安全的类我可以使用boost mutex用于锁定 或者我必须编写自己
  • 将 System.Windows.Input.KeyEventArgs 键转换为 char

    我需要将事件参数作为char 但是当我尝试转换 Key 枚举时 我得到的字母和符号与传入的字母和符号完全不同 如何正确地将密钥转换为字符 这是我尝试过的 ObserveKeyStroke this new ObervableKeyStrok
  • 生成(非常)大的非重复整数序列而不进行预洗牌

    背景 我编写了一个简单的媒体客户端 服务器 我想生成一个不明显的时间值 随从客户端到服务器的每个命令一起发送 时间戳中将包含相当多的数据 纳秒分辨率 即使它不是真正准确 因为现代操作系统中计时器采样的限制 等 我想做的 在 Linux 上
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • 未经许可更改内存值

    我有一个二维数组 当我第一次打印数组的数据时 日期打印正确 但其他时候 array last i 的数据从 i 0 到 last 1 显然是一个逻辑错误 但我不明白原因 因为我复制并粘贴了 for 语句 那么 C 更改数据吗 I use g
  • 在一个字节中存储 4 个不同的值

    我有一个任务要做 但我不知道从哪里开始 我不期待也绝对不想要代码中的答案 我想要一些关于该怎么做的指导 因为我感到有点失落 将变量打包和解包到一个字节中 您需要在一个字节中存储 4 个不同的值 这些值为 NAME RANGE BITS en
  • 如何将整数转换为 void 指针?

    在 C 中使用线程时 我面临警告 警告 从不同大小的整数转换为指针 代码如下 include
  • PlaySound 可在 Visual Studio 中运行,但不能在独立 exe 中运行

    我正在尝试使用 Visual Studio 在 C 中播放 wav 文件 我将文件 my wav 放入项目目录中并使用代码 PlaySound TEXT my wav NULL SND FILENAME SND SYNC 我按下播放按钮 或
  • .NET中的LinkedList是循环链表吗?

    我需要一个循环链表 所以我想知道是否LinkedList是循环链表吗 每当您想要移动列表中的 下一个 块时 以循环方式使用它的快速解决方案 current current Next current List First 电流在哪里Linke
  • 有没有办法强制显示工具提示?

    我有一个验证字段的方法 如果无法验证 该字段将被清除并标记为红色 我还希望在框上方弹出一个工具提示 并向用户显示该值无效的消息 有没有办法做到这一点 并且可以控制工具提示显示的时间 我怎样才能让它自己弹出而不是鼠标悬停时弹出 If the
  • 线程和 fork()。我该如何处理呢? [复制]

    这个问题在这里已经有答案了 可能的重复 多线程程序中的fork https stackoverflow com questions 1235516 fork in multi threaded program 如果我有一个使用 fork 的
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 如何使用 Word Automation 获取页面范围

    如何使用办公自动化找到 Microsoft Word 中第 n 页的范围 似乎没有 getPageRange n 函数 并且不清楚它们是如何划分的 这就是您从 VBA 执行此操作的方法 转换为 Matlab COM 调用应该相当简单 Pub
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • ruby on Rails 是否有像 ASP.NET MVC 一样的客户端验证 [重复]

    这个问题在这里已经有答案了 在 ASP NET MVC 中 您可以使用数据注释模型设置客户端验证 这类似于 ruby on Rails 中的验证 然而 创建了一些不显眼的 JavaScript 钩子 可以自动连接表单上的客户端验证 Ruby
  • 如何使用 window.caches 保存窗口对象中的页面?

    大多数保存 app shell 的示例都显示了服务工作线程的过程 但是我注意到您还可以从窗口访问缓存对象 所以我的问题是 我可以从页面本身保存页面以供离线使用吗 如果可以 如果可能的话 服务人员的意义何在 这里存在一个先有鸡还是先有蛋的问题
  • 使用 git 进行 VS2010 项目:无法添加文件 *.opensdf

    我正在使用 git 跟踪 VS2010 中的 C 项目 我正在使用 stackoverflow 上找到的忽略模式 它通常不排除 opensdf 文件 不幸的是 当尝试提交文件时 我收到以下错误 error open foo opensdf
  • 赶上现代编程技术的一种方法

    我已经从事非专业编程大约 23 年了 发现我有点陷入困境 我找到了一个我喜欢的工具 并且年复一年地保持这种状态 不幸的是 这意味着我的编程落后于时代 我本身并不直接计划进行专业编程 但是 能够开发客户端 最近希望迁移到云 应用程序以供我的客
  • 如何从子域中删除主域 cookie

    是否可以从子域中删除主域 cookie 我正在使用单点登录 注销时我想删除主域 cookie 据我所知 你不能这样做 但是您不能将注销调用指向主域吗 想必您已经在登录调用中执行此操作 以便首先获取主域 cookie
  • 带有表行的 Javascript Onclick

    我的 JScript 代码有问题 我试图循环遍历表中的所有行并添加一个onclick事件 我可以得到onclick要添加的事件 但有几个问题 第一个问题是所有行最终都设置了错误的参数onclick event 第二个问题是它只能在 IE 中
  • 点与流程图上的 x 轴不对齐

    我有浮点数据 其中 x 轴上的点与线条不对齐 specifically take a look at this photo 这是我正在使用的原始数据 0 1327305600000 1989 1 1327392000000 3222 333
  • 我的文本框以编程方式添加在页面重新加载后丢失值后面的代码中。有什么办法可以解决这个问题吗?

    就像这个主题一样 我在通过按钮上的事件创建文本框时遇到问题 然后在重新加载后丢失了文本框中的值 我的代码 protected void Page Load object sender EventArgs e if IsPostBack Se
  • Android 片段:空构造函数真的需要吗?

    我有一个带有寻呼机和 FragmentStatePagerAdapter 的活动 我需要跨多个页面滑动 众所周知 这个适配器一次创建 3 个片段实例 一个是要显示的 一个是上一个 一个是下一个 我的活动使用只有一个构造函数的片段运行得非常好
  • 华为在手机锁定时关闭后台应用程序

    这是我第一次在这个论坛上提问 p 我制作了一个Android应用程序 它必须在后台运行 即当手机处于待机状态时才能恢复用户的位置 我使用服务和唤醒锁 该应用程序适用于SAMSUNG但我注意到HUAWEI如果应用程序不在受保护的应用程序列表中
  • Primefaces selectOneMenu 转换器已调用但不工作

    我看过其他问题this https stackoverflow com questions 17774367 selectonemenu converter and this https stackoverflow com question
  • 谷歌colab中的Python 3.5

    我正在 google colab 中运行用于深度学习的 python 代码 该代码需要 Python 3 5 如何在 google colab 中安装 Python 3 5 版本 这对我有用 apt get install python3
  • 我如何知道使用 kubectl 进入 kubernetes pod 的入口点或 cmd?

    我现在正在学习kubernetes 我想进入远程集群中的一个pod 但是 我不知道它的入口点 我找不到它使用 kubectl 描述 pod podname 如果你想访问Container POD 中的shell 可以使用以下命令 kubec
  • 在 AJAX 中将图像发布到 PHP

    我想使用 AJAX 将图像发送到 php 文件 这是我的JS code ajax type POST url http website com add image php data img img 那是我的PHP 但它不起作用 我也尝试更换
  • 使用 lodash 按多个字段对数组中的项目进行排序

    如何使用 lodash 按多个字段对一组对象进行排序 所以对于这样的数组 a a b 2 a a b 1 a b b 5 a a b 3 我期望这个结果 a a b 1 a a b 2 a a b 3 a b b 5 这在当前版本的 lod
  • Android 8.1.0 上屏幕关闭时 BLE 扫描不起作用

    我正在使用带有最新 Android 8 1 0 更新的 Pixel 我面临与 BLE 广告扫描相关的问题 每当我关闭屏幕 即按下电源按钮 时 我的扫描就会停止 打开屏幕后会立即重新启动 我已经检查了 BLE 的最新代码 谷歌新推出了这个功能
  • AngularJS 使用 $broadcast 帮助在控制器之间共享数据

    我一直在尝试使用 broadcast 和 on 但我无法让数据在两个控制器之间移动 在我的主网页上 我有一个按钮 每次点击它时都会向 var 添加 4 div div
  • 在laravel中获取不带扩展名的文件名?

    我用过Input file upfile gt getClientOriginalName 检索上传文件的名称 但给出带有扩展名的名称 例如qwe jpg 如何获得没有扩展名的名称 例如qwe在拉拉维尔 Laravel 使用 Symfony
  • PHP CLI 获取用户输入然后转储到变量中可能吗?

    是否可以使用 PHP CLI 从用户获取输入 然后将输入转储到变量中 然后脚本继续运行 就像C 一样cin功能 这可能吗 如果可以 那么如何实现呢 也许不仅是 PHP 还可以使用一些 Linux 命令 要在 php CLI 模式下从标准输入
  • 如何在 Epplus 饼图中显示带小数的百分比?

    在 EPPLUS 饼图中 默认情况下百分比自动四舍五入 如何以编程方式显示 2 位小数 10 75 而不是 11 我只提供值 整数 百分比由组件自动计算 在 EPPlus 中并没有真正看到设置它的选项 必须在Serie DataLabel