.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 ...
随机推荐
- hibernate 开发步骤
1 创建Customer表 CREATE TABLE CUSTOMER ( CID int NOT NULL PRIMARY KEY , USERNAME varchar(20) , PASSWORD ...
- Caused by: java.net.UnknownHostException: localhost.localdomain: localhost.localdomain的问题解决
在hosts文件增加如下配置即可,下面的方法适合上面提示的错误,无论是Tomcat问题还是MongoDB等等的问题都可以完美解决. vi /etc/hosts 127.0.0.1 localhost ...
- Java Http连接中(HttpURLConnection)中使用代理(Proxy)及其验证(Authentication)
使用Java的HttpURLConnection类可以实现HttpClient的功能,而不需要依赖任何其他类库.所有有时候大家就直接使用它来完成一些简单(或复杂)的功能.但是你活在伟大的{print ...
- vCard : a file format standard for electronic business cards
http://zh.wikipedia.org/wiki/VCard vCard是电子名片的文件格式标准.它一般附加在电子邮件之后,但也可以用于其它场合(如在互联网上相互交换). vCard可包含的信 ...
- XmlReader/XmlWriter 类
XmlReader用于读取Xml文件,XmlWriter用于将数据写到Xml文件.其实,在印象当中,XML很多的操作类都支持直接Save.Read也支持接受XmlReader与XmlWriter类的示 ...
- 关于comparator接口和comparable接口以及它们各自的方法compare()和compareTo()
在今天做的LeetCode的题中有两道都出现了利用接口实现对象的排序.两题的相关链接: 1.利用comparable接口对对象排序 2.利用comparator接口实现排序 因为之前都没接触过这两个接 ...
- go语言基础之闭包的特点
所谓闭包就是一个函数“捕获”了和它在同一作用域的其它常量和变量.这就意味着当闭包被调用的时候,不管在程序什么地方调用,闭包能够使用这些常量或者变量.它不关心这些捕获了的变量和常量是否已经超出了作用域, ...
- Android程序的反编译对抗研究
转自: http://www.freebuf.com/tools/76884.html 一.前言 对抗反编译是指让apk文件或者dex文件无法正常通过反编译工具,而且有可能导致工具异常或者崩溃,如ap ...
- 第一个Xamarin的 Android 应用程序!
你好,安卓 Xamarin的工作室 Xamarin的应用程序图标和启动屏幕 脱机使用PDF格式: 介绍与Xamarin的Android开发 示例代码: 开始使用应用程序的探险家 显示说明: Visua ...
- binlog的几种复制形式
binlog的几种复制形式 MySQL 5.5 中对于二进制日志 (binlog) 有 3 种不同的格式可选:Mixed,Statement,Row,默认格式是 Statement.总结一下这三种格式 ...