作者:秋名
技术:.config,NPOI,Html,MailMessage…
思路:最近发工资条的财务小姐姐老是不准时给我发工资条,导致我每次工资到账都是胆战心惊,担心我上班摸鱼事情东窗事发,然后偷偷对我的3500工资下手。对于一个视钱财如粪土的我,决定用技术征服…财务!
主界面
1、之前吧,用过实体类,来实现EXCEL的导入数据,但是能导入的数据都是写死的,这次我直接用List完成了数据存储,完全不固定。现在爱导入啥导入啥,反正不是我用,哈哈哈。
2、写到这里,我自信满满的去和财务小姐姐说,来来来,我帮你实现了三步解放双手方程式!经过半小时漫长的细心教导,她会用了。但是她还是吐槽我程序发送到企业微信的工资条不够方便,她想着我看工资条的时候,还得看下广告!
——不可能!这绝对不可能!
using CodeMonitor;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using NPOI.XSSF.UserModel;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
using static QQMailKit.Class.MailMessageVoid;
namespace QQMailKit
{
public partial class Form1 : Form
{
public string strImageurl = "";
public string heard_html = "";
public string strSendAddr = "";
public string strSendPwd = "";
public string strTitle = "";
public int IntstrPort = 0;
public string strHost = "";
public string strName = "";
public string strText = "";
public string strContent = "";
public string LOGOimageurls = "";
public Form1()
{
InitializeComponent();
strSendAddr = CommonClass.GetAppSettingValue("strSendAddr");
strSendPwd = CommonClass.GetAppSettingValue("strSendPwd");
strTitle = CommonClass.GetAppSettingValue("strTitle");
strContent = CommonClass.GetAppSettingValue("strContent");
strHost = CommonClass.GetAppSettingValue("strHost");
var Int_strPort = CommonClass.GetAppSettingValue("strPort");
IntstrPort = Convert.ToInt32(Int_strPort);
strText = CommonClass.GetAppSettingValue("strText");
strName = CommonClass.GetAppSettingValue("strName");
}
private void Form1_Load(object sender, EventArgs e)
{
dataGridView1.EnableHeadersVisualStyles = false;
dataGridView1.ColumnHeadersDefaultCellStyle.Font = new Font("宋体", 12, FontStyle.Bold);
dataGridView1.ColumnHeadersDefaultCellStyle.ForeColor = Color.Black;
}
private void button1_Click(object sender, EventArgs e)
{
DialogResult AF = MessageBox.Show("确定发送数据吗?", "提示框", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
if (AF == DialogResult.OK)
{
Thread thread = new Thread(SendMailVeriCodeClass);
thread.IsBackground = true;
thread.Start();
}
}
public void SendMailVeriCodeClass() {
var toAddrLIst = new List<string>();
var ccAddrLIst = new List<string>();
var date = DateTime.Now;
//底部文字
string bootomTxt = "<div style='font-size: 0.9rem; font-weight: 600; margin-bottom :1rem'><span>" + CommonClass.GetAppSettingValue("strText").ToString().Replace("\r\n", "<br>") + "</span></div>";
//LOGO图片
string LOGOimageurl = CommonClass.GetAppSettingValue("LOGOimageurl");
if (LOGOimageurl != "")
{
LOGOimageurls = ImageToBase64(LOGOimageurl);
}
//底部图片
string imageurl = CommonClass.GetAppSettingValue("imageurl");
if (imageurl != "")
{
strImageurl = ImageToBase64(imageurl);
}
string LOGOImg = "<div style='margin-bottom :1rem;text-align: right; '><img style='width: 150px; height: 50px;' src='data:image/png;base64," + LOGOimageurls + "'> </img></div>";
string simages = "<div style='margin-bottom:1rem'><img src='data:image/png;base64," + strImageurl + "'> </img></div>";
//文本内容
string top_html = "<!DOCTYPE html><html><head><meta http-equiv='Content-Type'content='text / html; charset = utf-8'/></head><style type='text / css'>body{margin:6px;padding:0;font-size:12px;font-family:Arial,Verdana;background:#fff}</style><body><div style='width: 100%; height: 1000px;; margin: auto; '><div style='position: absolute; top: 15%; left: 5%; right: 5%; '><div style='font-family:Arial,Verdana; font-size:0.9rem; font-weight:600; margin-bottom:1rem; line-height: 1.5rem; '><span>" + date.Year + "年" + date.Month + "月工资条</span><br><span>各位同事:<br>您好!" + date.Year + "年" + date.Month + "月工资预计于" + date.Year + "年" + date.Month + "月15日左右发放,敬请查收</span></div><div style='margin-bottom :1rem'>";
var th_Htmls = "";
th_Htmls = "<table style='width: 100%; border-collapse:collapse; margin-bottom :1rem; font-size:0.5rem; '><tr>";
var td_Html = "";
heard_html = "";
var bit_true = false;
var showrow = false;
int ListrSum = 0;
List<int> Listr = new List<int>();
List<int> Listrs = new List<int>();
string shou = CommonClass.GetAppSettingValue("shouRow");
if (shou != "")
{
int shouRows = Convert.ToInt32(shou);
ListrSum = shouRows;
Listrs.Add(shouRows);
Listr.Add(shouRows);
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
toAddrLIst.Clear();
for (int j = 0; j <= dataGridView1.Rows[i].Cells.Count; j++)
{
if (showrow == true)
{
//横排显示
if (j < dataGridView1.Rows[i].Cells.Count && dataGridView1.Columns[j].HeaderCell.Value != "" && dataGridView1.Columns[j].HeaderCell.Value != "true")
{
th_Htmls += "<th style='background: #203764;padding: 3px;border: 1px #333 solid;color: #fff;text-align: center'>" + dataGridView1.Columns[j].HeaderCell.Value + "</th>";
}
if (j + 1 == dataGridView1.Rows[i].Cells.Count)
{
th_Htmls += "</tr><tr>";
}
if (j < dataGridView1.Rows[i].Cells.Count && dataGridView1.Rows[i].Cells[j].Value != null && dataGridView1.Rows[i].Cells[j].Value != "true")
{
td_Html += "<td style=' padding: 3px;border: none;border: 1px #333 solid;text-align: center'>" + dataGridView1.Rows[i].Cells[j].Value + "</td>";
if (j + 1 == dataGridView1.Rows[i].Cells.Count)
{
td_Html += "</tr></table>";
}
}
}
if (showrow == false)
{
if (j <= Listr[0])
{
if (j < dataGridView1.Rows[i].Cells.Count && dataGridView1.Columns[j].HeaderCell.Value != "" && dataGridView1.Columns[j].HeaderCell.Value != "选择")
{
th_Htmls += "<th style='background: #203764;padding: 3px;border: 1px #333 solid;color: #fff;text-align: center'>" + dataGridView1.Columns[j].HeaderCell.Value + "</th>";
}
if (j == Listr[0])
{
th_Htmls += "</tr><tr>";
}
if (j < dataGridView1.Rows[i].Cells.Count && dataGridView1.Rows[i].Cells[j].Value != null && dataGridView1.Rows[i].Cells[j].Value != "true")
{
td_Html += "<td style=' padding: 3px;border: none;border: 1px #333 solid;text-align: center'>" + dataGridView1.Rows[i].Cells[j].Value + "</td>";
if (dataGridView1.Rows[i].Cells[j].Value.ToString().Contains("@") && dataGridView1.Rows[i].Cells[j].Value.ToString().Contains("com"))
{
toAddrLIst.Add(dataGridView1.Rows[i].Cells[j].Value.ToString());
}
}
if (j == Listr[0])
{
td_Html += "</tr></table>";
}
}
if (j == Listr[0])
{
if (dataGridView1.Rows[i].Cells.Count != Listr[0] && j != dataGridView1.Rows[i].Cells.Count)
{
j = Listr[0];
string str = th_Htmls + td_Html;
td_Html = "";
Listr[0] = Listr[0] + Listrs[0];
if (Listr[0] > dataGridView1.Rows[i].Cells.Count)
{
Listr[0] = dataGridView1.Rows[i].Cells.Count;
}
th_Htmls = str + "<table style='width: 100%; border-collapse:collapse; margin-bottom :1rem; font-size:0.5rem; '><tr>";
}
}
}
}
heard_html = top_html + th_Htmls + td_Html + "</div>" + bootomTxt + simages + LOGOImg + " </div></div></body></html>";
th_Htmls = "";
th_Htmls = "<table style='width: 100%; border-collapse:collapse; margin-bottom :1rem; font-size:0.5rem; '><tr>";
td_Html = "";
Listr.Clear();
Listr.Add(ListrSum);
Send(strSendAddr, strSendPwd, strTitle, heard_html, toAddrLIst, ccAddrLIst, IntstrPort, strHost, strName);
Thread.Sleep(10);
}
}
MessageBox.Show("发送成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
List<string> excelFirstRow = new List<string>();
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog file = new OpenFileDialog();
DataTable dtable = new DataTable();
file.Filter = "Excel(*.xlsx)|*.xlsx|Excel(*.xlsm)|*.xlsm|Excel(*.*)|*.*";
file.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); //获得桌面路径
file.Multiselect = false; //不允许多重选择dd
if (file.ShowDialog() == DialogResult.Cancel) return;
var path = file.FileName;
string fname = Path.GetFileName(path);
txt_url.Text = "路径:"+path+" 文件名:"+ fname;
dtable = ExcelToTable(path);
//绑定数据
DataGridViewCheckBoxColumn columncb = new DataGridViewCheckBoxColumn();
columncb.HeaderText = "选择";
columncb.Name = "cb_check";
columncb.TrueValue = true;
columncb.FalseValue = false;
columncb.Width = 60;
columncb.DataPropertyName = "IsChecked";
dataGridView1.Columns.Add(columncb);
dataGridView1.Columns[0].Frozen = true;
dataGridView1.DataSource = dtable;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
dataGridView1.Rows[i].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
}
}
private void button3_Click(object sender, EventArgs e)
{
Form2 form = new Form2();
form.Show();
}
private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
{
if (e.RowIndex > -1)
{
if (dataGridView1.Rows[e.RowIndex].Cells[0].Value != "true")
{
this.dataGridView1.Rows[e.RowIndex].Cells[0].Value = "true";
}
else
{
dataGridView1.Rows[e.RowIndex].Cells[0].Value = "false";
}
}
}
DataGridView dataGrid = new DataGridView();
private void button4_Click(object sender, EventArgs e)
{
if (excelFirstRow.Count() <= 0 && this.dataGridView1.Rows.Count <= 0)
{
MessageBox.Show("请导入Excel数据进行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
Form3 form = new Form3(this.dataGridView1);
form.Show();
return;
bool databit = false;
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
var s = dataGridView1.Rows[i];
if ((bool)dataGridView1.Rows[i].Cells[0].EditedFormattedValue == true)
{
databit = true;
}
}
if (databit == false)
{
MessageBox.Show("请勾选一条数据进行操作!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}
}
}
发邮件界面
3、好的!我还在,我还活着,但是我的心已经被资本家的帮凶打倒了!立马回到我的流水线上,再添加了一个窗口,把可以打广告的,都加上!到这里,我已经实现了蝴蝶效应的第一步!累死蹀效应。
——我对钱不敢兴趣,我这辈子没有碰过钱,我最开心的时候…
using CodeMonitor;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using static QQMailKit.Class.MailMessageVoid;
namespace QQMailKit
{
public partial class Form3 : Form
{
public string simage = "";
public string LOGOimageurls = "";
public bool showrow = false;
public Form3()
{
InitializeComponent();
}
DataGridView dataGridView1 = new DataGridView();
public string heard_html = "";
public string strSendAddr = "";
public string strSendPwd = "";
public string strTitle = "";
public int IntstrPort = 0;
public string strHost = "";
public string strName = "";
//public string strText = "";
public string strContent = "";
public string strToAddr = "";
public Form3(DataGridView dataGridView_Row)
{
InitializeComponent();
dataGridView1 = dataGridView_Row;
}
private void Form3_Load(object sender, EventArgs e)
{
if (btn_show.Text == "竖排显示")
{
showrow = false;
}
shouRow.Text = CommonClass.GetAppSettingValue("shouRow");
strText.Text = CommonClass.GetAppSettingValue("strText");
string imageurl = CommonClass.GetAppSettingValue("imageurl");
string strLOGOimageurl = CommonClass.GetAppSettingValue("LOGOimageurl");
strSendAddr = CommonClass.GetAppSettingValue("strSendAddr");
strSendPwd = CommonClass.GetAppSettingValue("strSendPwd");
strTitle = CommonClass.GetAppSettingValue("strTitle");
strContent = CommonClass.GetAppSettingValue("strContent");
strHost = CommonClass.GetAppSettingValue("strHost");
strToAddr = CommonClass.GetAppSettingValue("strToAddr");
var sd = CommonClass.GetAppSettingValue("strPort");
IntstrPort = Convert.ToInt32(sd);
//strText = CommonClass.GetAppSettingValue("strText");
strName = CommonClass.GetAppSettingValue("strName");
//simage = CommonClass.GetAppSettingValue("imageurl");
if (System.IO.File.Exists(imageurl) || System.IO.File.Exists(strLOGOimageurl))
{
if (imageurl != "")
{
pictureBox1.Visible = true;
this.pictureBox1.Image = Image.FromFile(imageurl);
}
if (strLOGOimageurl != "")
{
pictureBox2.Visible = true;
this.pictureBox2.Image = Image.FromFile(strLOGOimageurl);
}
}
else
{
CommonClass.SetAppSettingValue("imageurl", "");
//接下来 可以进行保存文件的操作了
}
webBrowserHtml();
}
private void button1_Click(object sender, EventArgs e)
{
webBrowserHtml();
}
public void webBrowserHtml()
{
var date = DateTime.Now;
//底部文字
string bootomTxt = "<div style='font-size: 0.9rem; font-weight: 600; margin-bottom :1rem'><span>" + CommonClass.GetAppSettingValue("strText").ToString().Replace("\r\n", "<br>") + "</span></div>";
//LOGO图片
string LOGOimageurl = CommonClass.GetAppSettingValue("LOGOimageurl");
if (LOGOimageurl != "")
{
LOGOimageurls = ImageToBase64(LOGOimageurl);
}
//底部图片
string imageurl = CommonClass.GetAppSettingValue("imageurl");
if (imageurl != "")
{
simage = ImageToBase64(imageurl);
}
string LOGOImg = "<div style='margin-bottom :1rem;text-align: right; '><img style='width: 150px; height: 50px;' src='data:image/png;base64," + LOGOimageurls + "'> </img></div>";
string simages = "<div style='margin-bottom:1rem'><img src='data:image/png;base64," + simage + "'> </img></div>";
//文本内容
string top_html = "<!DOCTYPE html><html><head><meta http-equiv='Content-Type'content='text / html; charset = utf-8'/></head><style type='text / css'>body{margin:6px;padding:0;font-size:12px;font-family:Arial,Verdana;background:#fff}</style><body><div style='width: 100%; height: 1000px;; margin: auto; '><div style='position: absolute; top: 15%; left: 5%; right: 5%; '><div style='font-family:Arial,Verdana; font-size:0.9rem; font-weight:600; margin-bottom:1rem; line-height: 1.5rem; '><span>" + date.Year + "年" + date.Month + "月工资条</span><br><span>各位同事:<br>您好!" + date.Year + "年" + date.Month + "月工资预计于" + date.Year + "年" + date.Month + "月15日左右发放,敬请查收</span></div><div style='margin-bottom :1rem'>";
var th_Htmls = "";
th_Htmls = "<table style='width: 100%; border-collapse:collapse; margin-bottom :1rem; font-size:0.5rem; '><tr>";
var td_Html = "";
heard_html = "";
var bit_true = false;
List<int> Listr = new List<int>();
List<int> Listrs = new List<int>();
string shou = shouRow.Text;
if (shou != "")
{
CommonClass.SetAppSettingValue("shouRow", shouRow.Text);
int shouRows = Convert.ToInt32(shou);
Listrs.Add(shouRows);
Listr.Add(shouRows);
for (int i = 0; i < dataGridView1.Rows.Count; i++)
{
for (int j = 0; j <= dataGridView1.Rows[i].Cells.Count; j++)
{
if (showrow == true)
{
if (bit_true == false)
{
//横排显示
if (j < dataGridView1.Rows[i].Cells.Count && dataGridView1.Columns[j].HeaderText.ToString() != "" && dataGridView1.Columns[j].HeaderText.ToString() != "选择")
{
th_Htmls += "<th style='background: #203764;padding: 3px;border: 1px #333 solid;color: #fff;text-align: center'>" + dataGridView1.Columns[j].HeaderText.ToString() + "</th>";
}
if (j + 1 == dataGridView1.Rows[i].Cells.Count)
{
th_Htmls += "</tr><tr>";
}
if (j < dataGridView1.Rows[i].Cells.Count && dataGridView1.Rows[i].Cells[j].Value != null && dataGridView1.Rows[i].Cells[j].Value != "true")
{
td_Html += "<td style=' padding: 3px;border: none;border: 1px #333 solid;text-align: center'>" + dataGridView1.Rows[i].Cells[j].Value + "</td>";
if (j + 1 == dataGridView1.Rows[i].Cells.Count)
{
td_Html += "</tr></table>";
}
}
}
}
if (showrow == false)
{
if (j <= Listr[0])
{
if (bit_true == false)
{
if (j < dataGridView1.Rows[i].Cells.Count && dataGridView1.Columns[j].HeaderText.ToString() != "" && dataGridView1.Columns[j].HeaderText.ToString() != "选择")
{
th_Htmls += "<th style='background: #203764;padding: 3px;border: 1px #333 solid;color: #fff;text-align: center'>" + dataGridView1.Columns[j].HeaderText.ToString() + "</th>";
}
if (j == Listr[0])
{
th_Htmls += "</tr><tr>";
}
if (j < dataGridView1.Rows[i].Cells.Count && dataGridView1.Rows[i].Cells[j].Value != null && dataGridView1.Rows[i].Cells[j].Value != "true")
{
td_Html += "<td style=' padding: 3px;border: none;border: 1px #333 solid;text-align: center'>" + dataGridView1.Rows[i].Cells[j].Value + "</td>";
}
if (j == Listr[0])
{
td_Html += "</tr></table>";
}
}
}
if (j == Listr[0])
{
if (dataGridView1.Rows[i].Cells.Count != Listr[0] && j != dataGridView1.Rows[i].Cells.Count)
{
j = Listr[0];
string str = th_Htmls + td_Html;
td_Html = "";
Listr[0] = Listr[0] + Listrs[0];
if (Listr[0] > dataGridView1.Rows[i].Cells.Count)
{
Listr[0] = dataGridView1.Rows[i].Cells.Count;
}
th_Htmls = str + "<table style='width: 100%; border-collapse:collapse; margin-bottom :1rem; font-size:0.5rem; '><tr>";
}
}
}
}
bit_true = true;
heard_html = top_html + th_Htmls + td_Html + "</div>" + bootomTxt + simages + LOGOImg + " </div></div></body></html>";
}
webBrowser1.DocumentText = heard_html;
}
}
private void button2_Click(object sender, EventArgs e)
{
CommonClass.SetAppSettingValue("strText", strText.Text);
webBrowserHtml();
}
private void button5_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog(); //ofd类
ofd.Title = "获取图片"; //窗口名
ofd.InitialDirectory = @"D:\"; //打开的路径
ofd.Multiselect = true; //是否允许多选
ofd.Filter = "图片文件|*.jpg|所有文件|*.*"; //支持的文件格式
ofd.ShowDialog(); //打开选择窗口
string[] picturePath = ofd.FileNames; //将选择的图片的路径存储到picturePath
if (ofd.FileNames.Length > 0)
{
Bitmap picture = new Bitmap(picturePath[0]); //显示第一张图片
simage = ImageToBase64(picturePath[0]);
Image image = Image.FromFile(picturePath[0]);
CommonClass.SetAppSettingValue("imageurl", picturePath[0].ToString());
pictureBox1.Visible = true;
this.pictureBox1.Image = Image.FromFile(picturePath[0].ToString());
webBrowserHtml();
}
}
private void button6_Clike(object sender, EventArgs e)
{
pictureBox1.Refresh();
CommonClass.SetAppSettingValue("imageurl", "");
pictureBox1.Visible = false;
}
private void button4_Click(object sender, EventArgs e)
{
List<string> toAddrLIst = new List<string>();
toAddrLIst.Add(strToAddr);
List<string> ccAddrLIst = new List<string>();
bool senTrue = Send(strSendAddr, strSendPwd, strTitle, heard_html, toAddrLIst, ccAddrLIst, IntstrPort, strHost, strName);
if (senTrue == true)
{
MessageBox.Show("发送成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
private void button6_Click(object sender, EventArgs e)
{
if (btn_show.Text == "横排显示")
{
btn_show.Text = "竖排显示";
label1.Visible = true;
shouRow.Visible = true;
button1.Visible = true;
showrow = false;
webBrowserHtml();
return;
}
if (btn_show.Text == "竖排显示")
{
btn_show.Text = "横排显示";
label1.Visible = false;
shouRow.Visible = false;
button1.Visible = false;
showrow = true;
webBrowserHtml();
return;
}
}
private void button7_Click(object sender, EventArgs e)
{
OpenFileDialog ofd = new OpenFileDialog(); //ofd类
ofd.Title = "获取图片"; //窗口名
ofd.InitialDirectory = @"D:\"; //打开的路径
ofd.Multiselect = true; //是否允许多选
ofd.Filter = "图片文件|*.jpg|所有文件|*.*"; //支持的文件格式
ofd.ShowDialog(); //打开选择窗口
string[] picturePath = ofd.FileNames; //将选择的图片的路径存储到picturePath
if (ofd.FileNames.Length > 0)
{
Bitmap picture = new Bitmap(picturePath[0]); //显示第一张图片
simage = ImageToBase64(picturePath[0]);
Image image = Image.FromFile(picturePath[0]);
CommonClass.SetAppSettingValue("LOGOimageurl", picturePath[0].ToString());
pictureBox2.Visible = true;
this.pictureBox2.Image = Image.FromFile(picturePath[0].ToString());
webBrowserHtml();
}
}
private void button6_Click_1(object sender, EventArgs e)
{
pictureBox2.Refresh();
CommonClass.SetAppSettingValue("LOGOimageurl", "");
pictureBox2.Visible = false;
}
}
}
手机端观看效果
4、嘿嘿,看见马老板笑起来,是不是带有一丝丝金钱的味道?