.Net Excel 导出图表Demo(柱状图,多标签页) .net工具类 分享一个简单的随机分红包的实现方式
1 使用插件名称Epplus,多个Sheet页数据应用,Demo为柱状图(Epplus支持多种图表)
2 Epplus 的安装和引用
新建一个工程文件或控制台应用程序 打开 Vs2017 Tools 的Nuget 包管理器,使用命令 install-package Epplus

3 开始在创建的工程中编写代码,实现功能

4 具体实现流程代码如下:

  1 using OfficeOpenXml;
  2 using OfficeOpenXml.Drawing;
  3 using OfficeOpenXml.Drawing.Chart;
  4 using OfficeOpenXml.Style;
  5 using System;
  6 using System.Collections.Generic;
  7 using System.Drawing;
  8 using System.IO;
  9 using System.Linq;
 10 using System.Text;
 11 using System.Threading.Tasks;
 12
 13 namespace EpplusTest
 14 {
 15     public class Program
 16     {
 17         static void Main(string[] args)
 18         {
 19             FileInfo newFile = new FileInfo(@"d:\test.xlsx");
 20             if (newFile.Exists)
 21             {
 22                 newFile.Delete();
 23                 newFile = new FileInfo(@"d:\test.xlsx");
 24             }
 25
 26             using (ExcelPackage package = new ExcelPackage(newFile))
 27             {
 28                 #region  创建多个Sheet页
 29                 for (int i = 0; i < 5; i++)
 30                 {
 31                     package.Workbook.Worksheets.Add("Demo" + i);
 32                 }
 33                 ExcelWorksheet worksheet = package.Workbook.Worksheets["Demo0"];
 34                 ExcelWorksheet worksheet1 = package.Workbook.Worksheets["Demo1"];
 35
 36                 #endregion
 37
 38                 #region 1 模拟填充数据
 39                 worksheet1.Cells[1, 1].Value = "名称";
 40                 worksheet1.Cells[1, 2].Value = "价格";
 41                 worksheet1.Cells[1, 3].Value = "销量";
 42
 43                 worksheet1.Cells[2, 1].Value = "苹果";
 44                 worksheet1.Cells[2, 2].Value = 56;
 45                 worksheet1.Cells[2, 3].Value = 100;
 46
 47                 worksheet1.Cells[3, 1].Value = "华为";
 48                 worksheet1.Cells[3, 2].Value = 45;
 49                 worksheet1.Cells[3, 3].Value = 150;
 50
 51                 worksheet1.Cells[4, 1].Value = "小米";
 52                 worksheet1.Cells[4, 2].Value = 38;
 53                 worksheet1.Cells[4, 3].Value = 130;
 54
 55                 worksheet1.Cells[5, 1].Value = "OPPO";
 56                 worksheet1.Cells[5, 2].Value = 22;
 57                 worksheet1.Cells[5, 3].Value = 200;
 58                 #endregion
 59
 60                 #region 2 构造图表
 61                 worksheet.Cells.Style.WrapText = true;
 62                 worksheet.View.ShowGridLines = false;//去掉sheet的网格线
 63                 using (ExcelRange range = worksheet.Cells[1, 1, 5, 3])
 64                 {
 65                     range.Style.HorizontalAlignment = ExcelHorizontalAlignment.Center;
 66                     range.Style.VerticalAlignment = ExcelVerticalAlignment.Center;
 67                 }
 68
 69                 using (ExcelRange range = worksheet.Cells[1, 1, 1, 3])
 70                 {
 71                     range.Style.Font.Bold = true;
 72                     range.Style.Font.Color.SetColor(Color.White);
 73                     range.Style.Font.Name = "微软雅黑";
 74                     range.Style.Font.Size = 12;
 75                     range.Style.Fill.PatternType = ExcelFillStyle.Solid;
 76                     range.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(128, 128, 128));
 77                 }
 78
 79                 worksheet1.Cells[1, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 80                 worksheet1.Cells[1, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 81                 worksheet1.Cells[1, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 82
 83                 worksheet1.Cells[2, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 84                 worksheet1.Cells[2, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 85                 worksheet1.Cells[2, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 86
 87                 worksheet1.Cells[3, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 88                 worksheet1.Cells[3, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 89                 worksheet1.Cells[3, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 90
 91                 worksheet1.Cells[4, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 92                 worksheet1.Cells[4, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 93                 worksheet1.Cells[4, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 94
 95                 worksheet1.Cells[5, 1].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 96                 worksheet1.Cells[5, 2].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 97                 worksheet1.Cells[5, 3].Style.Border.BorderAround(ExcelBorderStyle.Thin, Color.FromArgb(191, 191, 191));
 98
 99                 ExcelChart chart = worksheet.Drawings.AddChart("chart", eChartType.ColumnClustered);
100                 ExcelChartSerie serie = chart.Series.Add(worksheet1.Cells[2, 3, 5, 3], worksheet1.Cells[2, 1, 5, 1]);//引用worksheet1的数据填充图表的X轴和Y轴
101                 serie.HeaderAddress = worksheet1.Cells[1, 3];
102                 #endregion
103
104                 #region 3 设置图表的样式
105                 chart.SetPosition(40, 10);
106                 chart.SetSize(500, 300);
107                 chart.Title.Text = "销量走势";
108                 chart.Title.Font.Color = Color.FromArgb(89, 89, 89);
109                 chart.Title.Font.Size = 15;
110                 chart.Title.Font.Bold = true;
111                 chart.Style = eChartStyle.Style15;
112                 chart.Legend.Border.LineStyle = eLineStyle.SystemDash;
113                 chart.Legend.Border.Fill.Color = Color.FromArgb(217, 217, 217);
114                 #endregion
115                 package.Save();
116             }
117         }
118     }
119 }

5 效果展示:


6 Demo源码GitHub下载地址:https://github.com/HJ520134/.NetDemo.git
.net工具类 分享一个简单的随机分红包的实现方式
废话不多说,直接上代码

    /// <summary>
    /// 分红包
    /// </summary>
    public class RandomMoney
    {
        public RandomMoney(double totalMoney, int totalCount)
        {
            RemainMoney = totalMoney;
            RemainCount = totalCount;
        }
        /// <summary>
        /// 剩下的金额
        /// </summary>
        private double RemainMoney { get; set; }
        /// <summary>
        /// 剩下的次数
        /// </summary>
        private double RemainCount { get; set; }
        private Random r = new Random();
        /// <summary>
        /// 获取当次红包的金额
        /// </summary>
        /// <returns></returns>
        public double GetRandomMoney()
        {
            if (RemainCount < 1)
                throw new Exception("红包已经抢完了");
            if (RemainCount == 1)//最后一次
            {
                RemainCount--;
                return (double)Math.Round(RemainMoney * 100) / 100;
            }
            double min = 0.01;
            double max = RemainMoney / RemainCount * 2;
            double money = r.NextDouble() * max;//随机收取本次金额
            money = money <= min ? 0.01 : money;//判断最小值
            money = Math.Floor(money * 100) / 100;
            RemainCount--;//红包个数递减
            RemainMoney = RemainMoney - money;//计算剩余金额
            return money;//返回本次领取金额
        }
    }

下面写个demo测试一下。

    class Program
    {
        static void Main(string[] args)
        {
            double totalMoney = 200;
            int totalCount = 10;
            RandomMoney random = new RandomMoney(totalMoney, totalCount);
            for (int i = 0; i < totalCount; i++)
            {
                Console.WriteLine($"第{i + 1}个红包:{random.GetRandomMoney()}元");
            }
            Console.ReadKey();
        }
    }

上面的案例是一个200块钱的红包分10份,打印结果如下

这种分红包的方式有一个缺陷,就是 红包的金额 <= 剩下的金额 / 剩下的次数
大家有没有更好的分红包方式呢
.Net Excel 导出图表Demo(柱状图,多标签页) .net工具类 分享一个简单的随机分红包的实现方式的更多相关文章
- .Net Excel 导出图表Demo(柱状图,多标签页)
		
1 使用插件名称Epplus,多个Sheet页数据应用,Demo为柱状图(Epplus支持多种图表) 2 Epplus 的安装和引用 新建一个工程文件或控制台应用程序 打开 Vs2017 Tools ...
 - selenium获取新页面标签页(只弹出一个新页面的切换)
		
selenium获取新页面标签页(只弹出一个新页面的切换) windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver. ...
 - 安卓Html标签,创意工具类
		
之前开发项目中,遇到了在Textview中使用Html标签的情形,由于在代码中使用字符串,Android Studio上一堆的黄色警告,而且对于过时的Html.fromHtml,拿它一点办法也没有. ...
 - 节约内存,请使用标签页管理工具:onetab、better onetab
		
OneTab可以管理chrome和firefox的标签页,把暂时不用的标签页收藏起来,形成一个列表,当然,可以对列表进行分类管理,以方便后续打开查看. 这样就不用打开很多tab,占用大量内存. 由于O ...
 - JavaWeb基础Day17  (JSP  EL表达式  jstl标签库   beanutil工具类)
		
JSP jsp的实质就是指在html界面中嵌入Java代码 jsp脚本 <% Java代码 %> 相当于写在service方法中. <%=java 变量或者表达式 %> ...
 - [转]  C#操作EXCEL,生成图表的全面应用
		
gailzhao 原文 关于C#操作EXCEL,生成图表的全面应用 近来我在开发一个运用C#生成EXCEL文档的程序,其中要根据数据生成相应的图表,该图表对颜色和格式都有严格的要求,在百度和谷歌中搜索 ...
 - 标签页QTabWidget
		
样式: import sys from PyQt5.QtGui import QIcon from PyQt5.QtWidgets import QApplication, QWidget, QTab ...
 - 第13天 JSTL标签、MVC设计模式、BeanUtils工具类
		
第13天 JSTL标签.MVC设计模式.BeanUtils工具类 目录 1. JSTL的核心标签库使用必须会使用 1 1.1. c:if标签 1 1.2. c:choos ...
 - selenium多个标签页的切换(弹出新页面的切换)
		
1_windows = driver.current_window_handle #定位当前页面句柄 all_handles = driver.window_handles #获取全部页面句柄 for ...
 
随机推荐
- ExtJS4.1 ExtJS TabPanel 双击标签关闭该页
			
/*总觉得 TabPanel 生成的那个关闭按钮太小关闭的时候不太顺手 感觉不方便 所以想双击关闭tab方便些于是在网上找到下面的代码 URL:http://atian25.iteye.com/blo ...
 - Scrapy 轻松定制网络爬虫(转)
			
网络爬虫(Web Crawler, Spider)就是一个在网络上乱爬的机器人.当然它通常并不是一个实体的机器人,因为网络本身也是虚拟的东西,所以这个“机器人”其实也就是一段程序,并且它也不是乱爬,而 ...
 - Spring MVC概述
			
Spring MVC框架是一个开源的Java平台,为开发强大的基于Java的Web应用程序提供全面的基础架构支持非常容易和非常快速. Spring框架最初由Rod Johnson撰写,并于2003年6 ...
 - Android之MVC模式
			
MVC (Model-View-Controller):M是指逻辑模型,V是指视图模型,C则是控制器.一个逻辑模型可以对于多种视图模型,比如一批统计数据 你可以分别用柱状图.饼图来表示.一种视图模型也 ...
 - 2017年USNews美国大学研究生专业排名
			
2017年USNEWS美国大学研究生专业排名最佳商学院排名 排名 学校 费用 注册人数 #1 Harvard University Boston, MA $61,225 per year (full- ...
 - 总结学习 Python 的 14 张思维导图汇总
 - linux有用技巧:使用ntfs-3g挂载ntfs设备
			
1.几种文件系统的比較 (1)在linux系统中支持一下文件系统: Ext2 第二扩展文件系统(简称 ext2 或者 ext2) 非常多年前就已经成为 GN ...
 - DedeCms V5.6 plus/advancedsearch.php 任意sql语句执行漏洞
			
漏洞版本: DedeCms V5.6 漏洞描述: DedeCMS内容管理系统软件采用XML名字空间风格核心模板:模板全部使用文件形式保存,对用户设计模板.网站升级转移均提供很大的便利,健壮的模板标签为 ...
 - RSA大会播报 – 2014最佳安全博客提名
			
今年美国RSA大会将在这个月的23-28号举行,每年大会上都会评出过去一年来业内最佳安全博客(Security Bloggers Network Social Security Awards 2014 ...
 - 进程控制块(PCB)结构
			
一.进程控制块(PCB)结构 进程控制块(PCB)是系统为了管理进程设置的一个专门的数据结构.系统用它来记录进程的外部特征,描述进程的运动变化过程.同时,系统可以利用PCB来控制和管理进程,所以说,P ...