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用户列表过滤一个月内未收到外部邮件已离职的员工的更多相关文章

  1. .NET读取Excel数据,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

    解决.NET读取Excel数据时,提示错误:未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序的操作: 1. 检查本机是否安装Office Access,如果未安装去去h ...

  2. python应用_读取Excel数据列表输出【一】

    python能使用xlrd模块实现对Excel数据的读取,且按照想要的输出形式. 1.准备Excel数据如下: 2.下面主要是对Excel数据读取后以双列表(每一行是一个用例为一个列表,再一个个案例组 ...

  3. ADO.NET(OleDb)读取Excel表格时的一个BUG

    如果我们有例如以下一个Excel表格:    如今要使用C#程序读取其内容: using System;  using System.Data.OleDb;    namespace Skyiv.Be ...

  4. NPOI读取Excel遇到的坑

    NPOI是POI的.NET版本.POI是用Java写成的库,能帮助用户在没有安装Office环境下读取Office2003-2007文件.NPOI在.NET环境下使用,能读写Excel/Word文件. ...

  5. 如何在C#中打开和读取EXCEL文件

    这篇文章向您展示如何在C#Windows Forms Application中使用ExcelDataReader,ExcelDataReader.DataSet打开和读取Excel文件.创建一个新的W ...

  6. C#读取excel文件提示未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0”提供程序

    错误描述: 在VS2010执行读取excel文件时,报错"未在本地计算机上注册"Microsoft.ACE.OLEDB.12.0"提供程序" 业务代码: //下 ...

  7. 利用poi包装一个简单的Excel读取器.一(适配一个Reader并提供readLine方法)

    通常,读文本我们会使用BufferedReader,它装饰或者说管理了InputStreamReader,同时提供readLine()简化了我们对文本行的读取.就像从流水线上获取产品一样,每当取完一件 ...

  8. POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)

    今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...

  9. 使用mybatis开发Dao的原始方法,实现根据用户id查询一个用户信息 、根据用户名称模糊查询用户信息列表 、添加用户信息等功能

    1.需求 将下边的功能实现Dao: 根据用户id查询一个用户信息 根据用户名称模糊查询用户信息列表 添加用户信息 2. 原始Dao开发方法需要程序员编写Dao接口和Dao实现类 3.User.xml映 ...

随机推荐

  1. 【转载】基于Redis实现分布式锁

    背景在很多互联网产品应用中,有些场景需要加锁处理,比如:秒杀,全局递增ID,楼层生成等等.大部分的解决方案是基于DB实现的,Redis为单进程单线程模式,采用队列模式将并发访问变成串行访问,且多客户端 ...

  2. JS设计模式之单体模式(Singleton)

    单体模式作为一种软件开发模式在众多面向对象语言中得到了广泛的使用,在javascript中,单体模式也是使用非常广泛的,但是由于javascript语言拥有其独特的面向对象方式,导致其和一些传统面向对 ...

  3. mysql启动不起来

    在刚编译安装完成mysql,启动mysql时报了下面错误: /etc/init.d/mysqld start Starting MySQL... ERROR! The server quit with ...

  4. Mac下关闭Sublime Text 3的更新检查

    操作如下: 注意:update_check的属性前后都要有一个逗号. , "update_check":false, 然后还需要一步,就是注册破解,在[Help]->[Ent ...

  5. Acronis

    关于这个神奇的东西也没少折腾了我,这里是它的家:http://www.acronis.com/zh-cn/ 网上也看了一些,没有头绪,总之给我的感觉就是不明觉厉.这里小结自己的学到的一些东西,算是一整 ...

  6. js继承的实现(es5)

    js对面向对象的支持很弱,所以在ES6之前实现继承会绕比较多的弯(类似于对面向对象支持弱,然后强行拼凑面向对象的特性) es5中实现继承的几种方式,父类定义为Super function Super( ...

  7. StackMapTable属性说明

    (1)StackMapTable属性的说明 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.4 (2)S ...

  8. JavaScript设计模式-21.命令模式

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  9. (转)在 CentOS7 上安装 MongoDB

    在 CentOS7 上安装 MongoDB 1 通过 SecureCRT 连接至 CentOS7 服务器: 2 进入到 /usr/local/ 目录: cd /usr/local 3 在当前目录下创建 ...

  10. Python 获取Kmeans聚类结果每一类的数据

    获取聚类结果中每一类的数据,该数据类型是DataFrame 思路:获取clf_KMeans的标签,我这里是聚三类,标签就是0,1,2 将Label转成Series类型,再筛选出指定标签的res0,我筛 ...