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映 ...
随机推荐
- Java Web 热部署
热部署有多种方案,下面的方案是其中的一种. 暂时还没找到一种令人满意的方案. 1,配置WEB Server 去这里 (https://tomcat.apache.org/download-90.cgi ...
- web环境中的spring MVC
1. web.xml文件的简单详解 在web环境中, spring MVC是建立在IOC容器的基础上,要了解spring mvc,首先要了解Spring IOC容器是如何在web环境中被载入并起作用的 ...
- 将参数传递给ASP.NET Core 2.0中的中间件
问题 在ASP.NET Core的安装过程中,如何将参数传递给中间件? 解 在一个空的项目中添加一个POCO类来保存中间件的参数, publicclass GreetingOptions { publ ...
- Android之build.prop属性详解
注:本篇文章是基于MSD648项目(AndroidTV)的prop进行说明. Android版本:4.4.4 内核版本:3.10.86 1.生成build.prop build.prop的生成是由ma ...
- Mac下安装Iterm2终端工具
一般Iterm2是结合oh-my-zsh一起使用,但是如果不喜欢zsh也可以单独使用.Iterm2有个亮点就是可以通过快捷键快速启动. 安装步骤: 1.下载: http://www.iterm2.co ...
- Windows Server 2008 R2 Enterprise 上用 SqlServer 2008 R2 创建发布出现异常
标题: 新建发布向导------------------------------ SQL Server 无法将“AC”配置为分发服务器. ------------------------------其 ...
- mysql中的CURRENT_TIMESTAMP
MySQL的timestamp类型可以使用CURRENT_TIMESTAMP来指定默认值,当记录增.改时,该值会自动取当前时间,如下图所示: 增加或修改记录时,该值自动变化 但是这个跟MySQL的版本 ...
- io流之转换流InputStreamReader、OutputStreamWriter
例子程序: package io; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.File ...
- javascript语言使用技巧及注意事项总结
1.首次为变量赋值时务必使用var关键字 变量没有声明而直接赋值得话,默认会作为一个新的全局变量,要尽量避免使用全局变量. var a=b=10;//其中a是局部变量,b是全局变量 2.使用===比= ...
- linux mint 19 与windows时间不同步
首先确定时间无误 sudo apt-get install ntpdate sudo ntpdate time.windows.com 2 sudo hwclock --localtime --sys ...