sto之旅系列六实现office的自动化使你办公更easyWord文档格式.docx
《sto之旅系列六实现office的自动化使你办公更easyWord文档格式.docx》由会员分享,可在线阅读,更多相关《sto之旅系列六实现office的自动化使你办公更easyWord文档格式.docx(11页珍藏版)》请在冰点文库上搜索。
using(OpenFileDialogopenFileDialog=newOpenFileDialog())
openFileDialog.Filter="
Worddocument(*.doc;
*.docx)|*.dox;
**.docx|AllFiles(*.*)|*.*"
;
//设置允许选择多个文件,该属性默认为false的,即只允许选择一个文件
openFileDialog.Multiselect=true;
if(openFileDialog.ShowDialog()==DialogResult.OK)
txtWordPath.Text=openFileDialog.FileName;
//获得所有选定文件的文件名
wordPatharray=openFileDialog.FileNames;
}
//移除Word中的所有空页
privatevoidbtnRemove_Click(objectsender,EventArgse)
Word.Applicationwordapp=null;
Word.Documentdoc=null;
try
//启动Word应用程序并设置不可见
wordapp=newWord.Application();
//如果不设置该属性,就可以看到Word程序的启动过程,这个和我们手动启动Word是一样的
wordapp.Visible=false;
//遍历每个文件名
foreach(varwordpathinwordPatharray)
doc=wordapp.Documents.Open(wordpath);
//删除所有空白页面
Word.Paragraphparagraph;
Word.Paragraphsparagraphs=doc.Paragraphs;
for(inti=paragraphs.Count;
i&
gt;
0;
i--)
paragraph=paragraphs[i];
//如果段落的文本为空的话,首先选择该段落,然后再调用Word中Selection对象的Delete方法来删除
//不为空什么都不做
if(paragraph.Range.Text.Trim()==string.Empty)
paragraph.Range.Select();
wordapp.Selection.Delete();
if(doc!
=null)
//先保存所有修改再关闭Word文档
doc.Save();
((Word._Document)doc).Close();
}MessageBox.Show("
删除空白行成功"
);
catch(Exceptionex)
MessageBox.Show("
异常发生,异常信息为:
"
+ex.Message);
finally
//释放资源
//退出Word程序
if(wordapp!
((Word._Application)wordapp).Quit();
doc=null;
wordapp=null;
}为了测试该程序的正确性,这里我建立了两个测试文档,为了测试,我故意在文档中删除了空白行和空白页面,下面是两个测试文档的截图:
下面就看看该工具的运行效果(效果图是一段动画,认为这样可以更加说明运行效果):
三、人事部门的福音——自动给本月寿星员工发送邮件提醒为了帮助大家更好地理解该程序,还是像之前一样,首先说说实现该程序的思路:
我们首先需要打开员工信息表,此时我们可以利用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方法来发送邮件)明白了思路之后,我们理解代码会更加容易了,具体实现代码为:
usingSystem;
usingSystem.IO;
usingSystem.Runtime.InteropServices;
usingSystem.Windows.Forms;
//引用Excel和Outlook的命名空间
usingExcel=Microsoft.Office.Interop.Excel;
usingOutlook=Microsoft.Office.Interop.Outlook;
stringexcelpath=string.Empty;
//打开员工表格
ExcelFile(*.xls;
*.xlsx)|*.xls;
**.xlsx|AllFiles(*.*)|*.*"
txtExcelPath.Text=openFileDialog.FileName;
excelpath=openFileDialog.FileName;
}//自动给本月寿星发邮件通知
privatevoidbtnSendEmail_Click(objectsender,EventArgse)
if(!
File.Exists(txtExcelPath.Text))
员工表路径不存在,请确保输入正确的文件路径"
return;
if(txbBirthday.Text.Trim()==string.Empty||txbEmail.Text.Trim()==string.Empty)
请先输入员工表中生日信息所在的列和邮箱信息所在的列!
}//输入信息都正确时开始发送邮件
SendEmail(int.Parse(txbBirthday.Text.Trim()),int.Parse(txbEmail.Text.Trim()));
//发送邮件方法
privatevoidSendEmail(intbirthDayColumn,intemailColumn)
//获得当前月份
intnowmonth=DateTime.Now.Month;
//发送邮件地址字符串
stringtoEmailString=string.Empty;
stringemailBody="
请收到邮件的员工,请本月28号到休闲室来参加生日Party"
Excel.ApplicationexcelApp=null;
Excel.Workbookworkbook=null;
Excel.Worksheetworksheet=null;
Excel.Rangerange=null;
//新建Excel应用程序被设置它不可见
excelApp=newExcel.Application();
excelApp.Visible=false;
workbook=excelApp.Workbooks.Open(excelpath);
//获得打开文件的激活表格
worksheet=workbook.ActiveSheet;
//遍历表格中的所有行
for(introw=2;
row&
lt;
worksheet.UsedRange.Rows.Count+1;
row++)
//因为我的测试表格中第四列是生日信息,在Excel中第一行的下标是从1开始的
//这里本来需要在页面设置一个文本框让用户填写生日信息是在那一列的
//这里为了测试就直接在程序中指定
//下面的Range就代表生日列中每一个单元格
range=worksheet.Cells[row,birthDayColumn];
//我们可以通过Range.Value来获得单元格中的生日信息
//因为我生日单元格中为日期格式,所以获得的是日期类型,所以直接通过Month属性来获得月份
intmonth=range.Value.Month;
//如果我们的Excel文档中生日时间设置为文本格式的话,这时候就需要通过分割字符串的方式来获得月份
//通过Split函数来把生日信息以'
/'
符号分隔,分隔的数组的第二个就是月份
//intmonth=Int32.Parse(birthday.Split('
)[1]);
//如果月份等于当前月的话,就给这个人发邮件
if(month==nowmonth)
//获得本月生日员工的邮件地址
toEmailString+="
+((Excel.Range)worksheet.Cells[row,emailColumn]).Value;
读取员工表格时出错,异常信息为:
workbook.Close(Excel.XlSaveAction.xlDoNotSaveChanges);
excelApp.Quit();
if(workbook!
Marshal.FinalReleaseComObject(workbook);
workbook=null;
if(excelApp!
Marshal.FinalReleaseComObject(excelApp);
excelApp=null;
}if(CreateEmailItem("
生日提醒"
toEmailString,emailBody))
成功给本月寿星发送邮件提醒"
//创建邮件项
privateboolCreateEmailItem(stringsubjectEmail,stringtoEmail,stringbodyEmail)
Outlook.Applicationoutlookapp=null;
Outlook.MailItememail=null;
//创建邮件项,就如你手动点新建邮件一样
outlookapp=newOutlook.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(Exceptionex)
发送邮件的时候失败,异常信息为:
returnfalse;
((Outlook._Application)outlookapp).Quit();
if(email!
Marshal.FinalReleaseComObject(email);
email=null;
if(outlookapp!
Marshal.FinalReleaseComObject(outlookapp);
outlookapp=null;
}returntrue;
}为了测试程序,我新建了一个员工信息表,表格的格式如下(你当然可以根据自己的需要更改格式):
现在就让我们看看该程序的运行效果:
四、小结到这里,本专题的内容就和大家介绍完了,在下一个专题中将向大家介绍下如何通过Office提供的API的来遥控幻灯片。
如果大家对本专题中两个工具的实现源码有任何的疑问,都可以在下面留言给我。