.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 ...
随机推荐
- 《C# to IL》第二章 IL基础
如果你真的想要理解C#代码,那么最好的方法就是通过理解由C#编译器生成的代码.本章和下面两章将关注于此. 我们将用一个短小的C#程序来揭开IL的神秘面纱,并解释由编译器生成的IL代码.这样,我们就可以 ...
- 解决Visual Studio 2015创建工程时的“DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' failed to install.”错误
前段时间发布了Visual Studio2015,在后,发现创建Asp.Net工程和时,出现了"DNX SDK version 'dnx-clr-win-x86.1.0.0-beta5' f ...
- 【转】2012年7月9 – 知名网页游戏公司 PHP高级工程师 最新面试题
开头先唠叨两句,今天下午,上海的天热的让人窒息啊.Google下地图,好远!要做公交,想想就是人挤人.咬了下牙,打的,尼玛百来块啊,有木有!麻麻的,更让我萌生买车的决心了. 到了公司,环境不错.前台拿 ...
- 源码分析:动态分析 Linux 内核函数调用关系
源码分析:动态分析 Linux 内核函数调用关系 时间 2015-04-22 23:56:07 泰晓科技 原文 http://www.tinylab.org/source-code-analysi ...
- 三分钟教你学Git (四)之紧急救助
假设你不小心git reset --hard HEAD^ 然后这个commit又没有在别的git仓库中,怎么办?是不是这次改动就丢了呢? 当然不是,git为我们每次都历史都保留了reference l ...
- LINUX开启允许对外访问的网络端口命令
LINUX通过下面的命令可以开启允许对外访问的网络端口: /sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT #开启8000端口 /etc/rc ...
- Informatica 常用组件Source Qualifier之二 默认查询
2 默认查询 对于关系源,PowerCenter Server 将在运行会话时为每个源限定符转换生成查询.对于每个在映射中使用的源列,默认查询均为 SELECT 语句.也就是说,PowerCenter ...
- SpringMVC使用ModelAndView进行重定向
1.Servlet重定向forward与redirect: 使用servlet重定向有两种方式,一种是forward,另一种就是redirect.forward是服务器内部重定向,客户端并不知道服务器 ...
- http://blog.csdn.net/steveguoshao/article/details/38414145
http://blog.csdn.net/steveguoshao/article/details/38414145
- 给出a的定义 -- 指针 和 数组