博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
.Net Excel 导出图表Demo(柱状图,多标签页) .net工具类 分享一个简单的随机分红包的实现方式...
阅读量:6902 次
发布时间:2019-06-27

本文共 7804 字,大约阅读时间需要 26 分钟。

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                 #endregion103 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                 #endregion115                 package.Save();116             }117         }118     }119 }

 

5 效果展示:

 

6 Demo源码GitHub下载地址:

 

 

 

废话不多说,直接上代码

///     /// 分红包    ///     public class RandomMoney    {        public RandomMoney(double totalMoney, int totalCount)        {            RemainMoney = totalMoney;            RemainCount = totalCount;        }        ///         /// 剩下的金额        ///         private double RemainMoney { get; set; }        ///         /// 剩下的次数        ///         private double RemainCount { get; set; }        private Random r = new Random();        ///         /// 获取当次红包的金额        ///         /// 
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份,打印结果如下

这种分红包的方式有一个缺陷,就是  红包的金额 <= 剩下的金额 / 剩下的次数

大家有没有更好的分红包方式呢

 

 

转载地址:http://jcpdl.baihongyu.com/

你可能感兴趣的文章
.net断点续传的原理
查看>>
仿微博php生成短网址
查看>>
前端开发必备站点汇总
查看>>
SQL语句熟悉
查看>>
Android:多语言对应实现
查看>>
计蒜客 宝藏 (状压DP)
查看>>
开个小灶——turtle 海龟图形
查看>>
C++11 auto and decltype
查看>>
微信小程序 页面跳转navigator与传递参数
查看>>
常用正则表达式速查表
查看>>
Lua模式匹配
查看>>
poj 1251
查看>>
spring_3最小化Spring XML配置
查看>>
Struts 基础开发---day02
查看>>
Codeforces 456C - Boredom(简单DP)
查看>>
IE9 打不开界面也不报错,只有打开控制台才会显示 - console
查看>>
String,int,Integer,char 类型转换
查看>>
[LeetCode] Permutations II 解题报告
查看>>
20921进程的描述与控制
查看>>
int 和 Integer 有什么区别
查看>>