C# 读取excel用户列表过滤一个月内未收到外部邮件已离职的员工
1、通过aspose.cells读取excel中的数据并添加到list中
//存储从excel中读取出来的数据
List<UserInfo> lst_userinfo = new List<UserInfo>(); string excel_path = @"G:\zhyue\backup\2018-08-01 读取腾讯邮箱接口-获取一个月内未接收到外部邮件且已离职的邮箱\腾讯邮箱\上海邮箱整理(1).xlsx";
//打开excel文件
Workbook curr_wb = File.Exists(excel_path) ? new Workbook(excel_path) : new Workbook();
//打开第一个sheet
Worksheet sheet_first = curr_wb.Worksheets[];
Cells Cells = sheet_first.Cells;
//一共多少行数据
int rows = sheet_first.Cells.MaxDataRow + ; //循环读取excel
for (int i = ; i < rows; i++)
{//从第二行开始读
if (Cells[i, ].StringValue.Contains("离职"))
{
lst_userinfo.Add(new UserInfo()
{
username = Cells[i, ].StringValue,
email = Cells[i, ].StringValue,
department = Cells[i, ].StringValue,
phone = Cells[i, ].StringValue,
sex = Cells[i, ].StringValue,
position = Cells[i, ].StringValue
});
}
}
class UserInfo
{
/// <summary>
/// 姓名
/// </summary>
public string username { get; set; }
/// <summary>
/// 电子邮件
/// </summary>
public string email { get; set; }
/// <summary>
/// 所属部门
/// </summary>
public string department { get; set; }
/// <summary>
/// 性别
/// </summary>
public string sex { get; set; }
/// <summary>
/// 手机
/// </summary>
public string phone { get; set; }
/// <summary>
/// 职务
/// </summary>
public string position { get; set; }
}
2、创建excel对象并循环上一步得到的list,给腾讯接口发送请求获取日志记录过滤一个月内没有收到外部邮件的已离职员工
string excel_path = @"G:\zhyue\backup\2018-08-01 读取腾讯邮箱接口-获取一个月内未接收到外部邮件且已离职的邮箱\腾讯邮箱\过滤没收到外部邮件的用户.xlsx";
//打开excel文件
Workbook curr_wb = File.Exists(excel_path) ? new Workbook(excel_path) : new Workbook();
//打开第一个sheet
Worksheet sheet_first = curr_wb.Worksheets[];
Cells Cells = sheet_first.Cells; //表头
Cells[, ].PutValue("姓名");
Cells[, ].PutValue("电子邮件");
Cells[, ].PutValue("所属部门");
Cells[, ].PutValue("性别");
Cells[, ].PutValue("手机");
Cells[, ].PutValue("职务"); int curr_row = ;//当前在第几行
//循环判断指定用户是否收到过来自指定邮箱以外的邮件
lst_userinfo.ForEach(userinfo =>
{
bool is_received = CheckIsReceiveEmailEndWithTargetList(userinfo.email);
if (!is_received)
{
Cells[curr_row, ].PutValue(userinfo.username);
Cells[curr_row, ].PutValue(userinfo.email);
Cells[curr_row, ].PutValue(userinfo.department);
Cells[curr_row, ].PutValue(userinfo.sex);
Cells[curr_row, ].PutValue(userinfo.phone);
Cells[curr_row, ].PutValue(userinfo.position);
curr_row++;
}
});
//保存文件
curr_wb.Save(excel_path, SaveFormat.Xlsx);
/// <summary>
/// 检查指定邮箱是否收到除指定邮箱以外的邮件
/// </summary>
private static bool CheckIsReceiveEmailEndWithTargetList(string user_mail_url)
{
//获取ACCESS_TOKEN
ACCESS_TOKEN ACCESS_TOKEN = Get_ACCESS_TOKEN();
//post查看一个月内邮件 https://api.exmail.qq.com/cgi-bin/log/mail?access_token=ACCESS_TOKEN
StringBuilder jsonData = new StringBuilder();
jsonData.Append("{");
jsonData.AppendFormat("\"begin_date\":\"{0}\",", DateTime.Now.AddDays(-).ToString("yyyy-MM-dd"));//开始日期。格式 为2016-10-01
jsonData.AppendFormat("\"end_date\":\"{0}\",", DateTime.Now.ToString("yyyy-MM-dd"));//开始日期。格式为2016-10-07
jsonData.AppendFormat("\"userid\":\"{0}\",", user_mail_url);//筛选条件:指定成员帐号
jsonData.AppendFormat("\"subject\":\"{0}\",", "");//筛选条件:包含指定主题内容
jsonData.AppendFormat("\"mailtype\":{0}", );//邮件类型。0:收信+发信 1:发信 2:收信
jsonData.Append("}");
string post_url = string.Format("https://api.exmail.qq.com/cgi-bin/log/mail?access_token={0}", ACCESS_TOKEN.access_token); string response = WebRequestExt.PostData(jsonData.ToString(), post_url);
MailList MailList = JsonConvert.DeserializeObject<MailList>(response);
//当前邮件是否收到过不是来自except_email的邮件
bool result = false;
if (MailList != null && MailList.errcode == )
{
//挑选出发送人不是来自except_email的Email的所有邮件
List<string> except_email = new List<string>() {
"joannarealestate.com.cn","jrecorporate.com","jremobility.com","jrechina.com"
};
result = MailList.list.Exists(mail =>
{
return !except_email.Exists(x => mail.sender.Contains(x));
});
} return result;
}
/// <summary>
/// 获取有效ACCESS_TOKEN
/// </summary>
/// <returns></returns>
private static ACCESS_TOKEN Get_ACCESS_TOKEN()
{
string file_access_token = string.Empty;//从文件中读取的access_token
string txtFileUrl = Directory.GetParent(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.FullName + "\\" + "ACCESS_TOKEN.txt";
using (FileStream fs = File.Open(txtFileUrl, FileMode.OpenOrCreate))
{
byte[] bytes = new byte[fs.Length];
fs.Read(bytes, , bytes.Length);
file_access_token = Encoding.Default.GetString(bytes);
}
ACCESS_TOKEN ACCESS_TOKEN = new ACCESS_TOKEN(); ACCESS_TOKEN = JsonConvert.DeserializeObject<ACCESS_TOKEN>(file_access_token);
if (ACCESS_TOKEN != null && ACCESS_TOKEN.expires_date > DateTime.Now)
{//还没过期 }
else
{//已经过期或不存在ACCESS_TOKEN 向腾讯发起请求获取ACCESS_TOKEN
string access_token_url = string.Format(@"https://api.exmail.qq.com/cgi-bin/gettoken?corpid={0}&corpsecret={1}", "你的corpid", "你的corpsecret"); string response = WebRequestExt.GetData(access_token_url);
ACCESS_TOKEN = JsonConvert.DeserializeObject<ACCESS_TOKEN>(response);
if (ACCESS_TOKEN != null && ACCESS_TOKEN.expires_in == )
{//获取成功
ACCESS_TOKEN.expires_date = DateTime.Now.AddSeconds(ACCESS_TOKEN.expires_in);
//写入到文件
File.WriteAllText(txtFileUrl, JsonConvert.SerializeObject(ACCESS_TOKEN));
}
else
{//获取失败
MessageBox.Show(response);
}
} return ACCESS_TOKEN;
}
class ACCESS_TOKEN
{
/// <summary>
/// 获取到的凭证。长度为64至512个字节
/// </summary>
public string access_token { get; set; }
/// <summary>
/// 凭证的有效时间(秒)
/// </summary>
public int expires_in { get; set; }
/// <summary>
/// 凭证的有效时间-当前时间加上expires_in
/// </summary>
public DateTime expires_date { get; set; } public int errcode { get; set; }
public string errmsg { get; set; }
}
class MailList
{
/// <summary>
/// 返回码
/// </summary>
public int errcode { get; set; }
/// <summary>
/// 对返回码的文本描述内容
/// </summary>
public string errmsg { get; set; }
/// <summary>
/// 列表数据
/// </summary>
public List<Mail> list { get; set; }
}
class Mail
{
/// <summary>
/// 邮件类型。1:发信 2:收信
/// </summary>
public int mailtype { get; set; }
public string subject { get; set; }
/// <summary>
/// 发信者
/// </summary>
public string sender { get; set; }
/// <summary>
/// 收信者
/// </summary>
public string receiver { get; set; }
/// <summary>
/// 时间(时间戳格式)
/// </summary>
public int time { get; set; }
/// <summary>
/// 邮件状态
/// 0: 其他状态
/// 1: 发信中
/// 2: 被退信
/// 3: 发信成功
/// 4: 发信失败
/// 11: 收信被拦截
/// 12: 收信,邮件进入垃圾箱
/// 13: 收信成功,邮件在收件箱
/// 14: 收信成功,邮件在个人文件夹
/// </summary>
public int status { get; set; }
}
C# 读取excel用户列表过滤一个月内未收到外部邮件已离职的员工的更多相关文章
- .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
解决.NET读取Excel数据时,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的操作: 1. 检查本机是否安装Office Access,如果未安装去去h ...
- python应用_读取Excel数据列表输出【一】
python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 1.准备Excel数据如下: 2.下面主要是对Excel数据读取后以双列表(每一行是一个用例为一个列表,再一个个案例组 ...
- ADO.NET(OleDb)读取Excel表格时的一个BUG
如果我们有例如以下一个Excel表格: 如今要使用C#程序读取其内容: using System; using System.Data.OleDb; namespace Skyiv.Be ...
- NPOI读取Excel遇到的坑
NPOI是POI的.NET版本.POI是用Java写成的库,能帮助用户在没有安装Office环境下读取Office2003-2007文件.NPOI在.NET环境下使用,能读写Excel/Word文件. ...
- 如何在C#中打开和读取EXCEL文件
这篇文章向您展示如何在C#Windows Forms Application中使用ExcelDataReader,ExcelDataReader.DataSet打开和读取Excel文件.创建一个新的W ...
- C#读取excel文件提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序
错误描述: 在VS2010执行读取excel文件时,报错"未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序" 业务代码: //下 ...
- 利用poi包装一个简单的Excel读取器.一(适配一个Reader并提供readLine方法)
通常,读文本我们会使用BufferedReader,它装饰或者说管理了InputStreamReader,同时提供readLine()简化了我们对文本行的读取.就像从流水线上获取产品一样,每当取完一件 ...
- POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)
今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...
- 使用mybatis开发Dao的原始方法,实现根据用户id查询一个用户信息 、根据用户名称模糊查询用户信息列表 、添加用户信息等功能
1.需求 将下边的功能实现Dao: 根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户信息 2. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类 3.User.xml映 ...
随机推荐
- 题目1005:Graduate Admission(结构体排序)
问题来源 http://ac.jobdu.com/problem.php?pid=1005 问题描述 这道题理解题意有些麻烦,多看几遍先理解题意再说.每个学生有自己的三个成绩,一个编号,以及一个志愿列 ...
- 我也学习JAVA多线程-join
在工作中,挺少遇到join关键字,但很多多线程资料和面试过程中,初中级开发工程师总会遇到join. 今天一起学习下join. join的作用:等待指定的时间(当为0时,一直等待),直到这个线程执行结束 ...
- 【算法笔记】A1071 Speech Patterns
1071 Speech Patterns (25 分) People often have a preference among synonyms of the same word. For ex ...
- Scala IDEA for Eclipse里用maven来创建scala和java项目代码环境(图文详解)
这篇博客 是在Scala IDEA for Eclipse里手动创建scala代码编写环境. Scala IDE for Eclipse的下载.安装和WordCount的初步使用(本地模式和集群模式) ...
- 2-8 js基础 jsonp封装
'use strict'; function jsonp(json){ json = json||{} if(!json.url)return; json.data=json.data||{}; js ...
- 深入理解java集合框架之---------Linked集合 -----构造函数
linked构造函数 1.LinkedList(): 构造一个空列表的集合 /** * 序列化 */ private static final long serialVersionUID = 1090 ...
- HighCharts理解与总结
摘自:http://www.highcharts.com/docs/getting-started/installation Installation Highcharts requires two ...
- 大数据sql引擎
Hive:把sql解析后用MapReduce跑 SparkSQL:把sql解析后用Spark跑,比hive快点 Phoenix:一个绕过了MapReduce运行在HBase上的SQL框架 Drill/ ...
- 【转】一点一点学ASP.NET之基础概念——HttpModule
概述 HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的 ...
- mysql备份 小结 (三种方式的详细解读)
备份的本质就是将数据集另存一个副本,但是原数据会不停的发生变化,所以利用备份只能回复到数据变化之前的数据.那变化之后的呢?所以制定一个好的备份策略很重要 新建一个all.sqlvim all.sql在 ...