一、引言
我们打开一个Word文档,该Word文档就是一个Word.Document对象
Word文档中内容都是段落组成的,然而段落在Word对象模型中是Word.Paragraph对象
空白行或空白页也就是段落的内容为空,明白了这点,我们就可以在程序中对段落对象的文本进行判断,如果段落内容为空,我们就删除该段落,这样也就实现了移除空白行的功能了。
我们首先需要打开员工信息表,此时我们可以利用Excel对象模型中的Excel.Application.Workbooks.Open方法来获得一个工作簿对象,关于更多Excel对象模型的内容可以转向——创建Excel解决方案。
通过第一步我们已经获得了工作簿对象了,然后通过遍历工作簿中的激活表,即表格一(Sheet1),我们可以通过workbook.ActiveSheet来获得表格一对象。
遍历表格一中的所有行来找到生日信息中的月份,如果月份等于当前月份,就给该员工的邮箱进行发邮件。
对于自动发送邮件的实现,该实现和我们手动操作Outlook过程是一样,手动操作时,我们需要手动打开Outlook(在程序中就是创建Outlook应用程序对象),然后点击新建邮件(在程序中就是通过Applicatin对象的CreateItem(Outlook.OlItemType.olMailItem)方法来创建一个邮件项目),在新建邮件窗口中指定收件人,主题,邮件内容之后,点击Outlook中的发送邮件按钮(在程序中就是通过指定 Outlook.MailItem对象(即代表一个邮件窗体)的To(收件人)、Subject(主题)、Body(邮件内容)属性,然后再调用Send方法来发送邮件)
明白了思路之后。,我们理解代码会更加容易了,具体实现代码为:
using System;
using System.IO;
using System.Runtime.InteropServices;
using System.Windows.Forms;
// 引用Excel和Outlook的命名空间
using Excel = Microsoft.Office.Interop.Excel;
using Outlook = Microsoft.Office.Interop.Outlook;
string excelpath = string.Empty;
// 打开员工表格
privatevoid btnOpen_Click(object sender, EventArgs e)
{
using (OpenFileDialog openFileDialog = new OpenFileDialog())
{
openFileDialog.Filter = "Excel File(*.xls;*.xlsx)|*.xls;**.xlsx|All Files(*.*)|*.*";
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
txtExcelPath.Text = openFileDialog.FileName;
excelpath = openFileDialog.FileName;
}
}
}
// 自动给本月寿星发邮件通知
privatevoid btnSendEmail_Click(object sender, EventArgs e)
{
if (!File.Exists(txtExcelPath.Text))
{
MessageBox.Show("员工表路径不存在,请确保输入正确的文件路径");
return;
}
if (txbBirthday.Text.Trim() == string.Empty || txbEmail.Text.Trim() == string.Empty)
{
MessageBox.Show("请先输入员工表中生日信息所在的列和邮箱信息所在的列!");
return;
}
// 输入信息都正确时开始发送邮件
SendEmail(int.Parse(txbBirthday.Text.Trim()), int.Parse(txbEmail.Text.Trim()));
}
// 发送邮件方法
privatevoid SendEmail(int birthDayColumn,int emailColumn)
{
// 获得当前月份
int nowmonth = DateTime.Now.Month;
// 发送邮件地址字符串
string toEmailString = string.Empty;
string emailBody="请收到邮件的员工,请本月28号到休闲室来参加生日Party";
Excel.Application excelApp = null;
Excel.Workbook workbook =null;
Excel.Worksheet worksheet = null;
Excel.Range range = null;
try
{
// 新建Excel应用程序被设置它不可见
excelApp = new Excel.Application();
excelApp.Visible = false;
workbook = excelApp.Workbooks.Open(excelpath);
// 获得打开文件的激活表格
worksheet= workbook.ActiveSheet;
// 遍历表格中的所有行
for (int row = 2; row < worksheet.UsedRange.Rows.Count + 1; row++)
{
// 因为我的测试表格中第四列是生日信息,在Excel中第一行的下标是从1开始的
// 这里本来需要在页面设置一个文本框让用户填写生日信息是在那一列的
// 这里为了测试就直接在程序中指定
// 下面的Range就代表生日列中每一个单元格
range = worksheet.Cells[row, birthDayColumn];
// 我们可以通过Range.Value来获得单元格中的生日信息
// 因为我生日单元格中为日期格式,所以获得的是日期类型,所以直接通过Month属性来获得月份
int month = range.Value.Month;
// 如果我们的Excel文档中生日时间设置为文本格式的话,这时候就需要通过分割字符串的方式来获得月份
// 通过Split函数来把生日信息以'/'符号分隔,分隔的数组的第二个就是月份
//int month = Int32.Parse(birthday.Split('/')[1]);
// 如果月份等于当前月的话,就给这个人发邮件
if (month == nowmonth)
{
// 获得本月生日员工的邮件地址
toEmailString += ";" + ((Excel.Range)worksheet.Cells[row, emailColumn]).Value;
}
}
}
catch (Exception ex)
{
MessageBox.Show("读取员工表格时出错,异常信息为:" + ex.Message);
return;
}
finally
{
workbook.Close(Excel.XlSaveAction.xlDoNotSaveChanges);
excelApp.Quit();
if (workbook != null)
{
Marshal.FinalReleaseComObject(workbook);
workbook = null;
}
if (excelApp != null)
{
Marshal.FinalReleaseComObject(excelApp);
excelApp = null;
}
}
if (CreateEmailItem("生日提醒", toEmailString, emailBody))
{
MessageBox.Show("成功给本月寿星发送邮件提醒");
}
}
// 创建邮件项
privatebool CreateEmailItem(string subjectEmail,string toEmail,string bodyEmail)
{
Outlook.Application outlookapp = null;
Outlook.MailItem email =null;
try
{
// 创建邮件项,就如你手动点新建邮件一样
outlookapp = new Outlook.Application();
email = outlookapp.CreateItem(Outlook.OlItemType.olMailItem);
// 指定邮件的主题,收件人和内容,就如你在新建邮件窗体中输入收件人,主题和内容一样
email.Subject = subjectEmail;
email.To = toEmail;
email.Body = bodyEmail;
email.Importance = Outlook.OlImportance.olImportanceHigh;
// 发送邮件,就如你点界面上的发送邮件操作一样
((Outlook._MailItem)email).Send();
}
catch(Exception ex)
{
MessageBox.Show("发送邮件的时候失败,异常信息为:" + ex.Message);
returnfalse;
}
finally
{
// 释放资源
((Outlook._Application)outlookapp).Quit();
if (email != null)
{
Marshal.FinalReleaseComObject(email);
email = null;
}
if (outlookapp != null)
{
Marshal.FinalReleaseComObject(outlookapp);
outlookapp = null;
}
}
returntrue;
}