目標(biāo):使用word的mailmerge功能,數(shù)據(jù)源是excel中的數(shù)據(jù)。這些資料在網(wǎng)上很少,只能自己慢慢測(cè)試了。
關(guān)于word的mailmerge功能:
word提供郵件的模板,可以選擇各種數(shù)據(jù)源,比如數(shù)據(jù)庫(kù),excel等,然后群發(fā)(或打印、另存文件)郵件。
為了實(shí)現(xiàn)這個(gè)功能,我的程序要能做的是
1:打開(kāi)word文件對(duì)象
2:設(shè)置mailmerge數(shù)據(jù)源:指定excel,指定查詢語(yǔ)句,指定聯(lián)接的列s
3:關(guān)閉保存
關(guān)于引用:
using word = microsoft.office.interop.word;
using system.reflection;
using system.diagnostics;
using system.io;
關(guān)于變量:word的com對(duì)象需要傳入的參數(shù)定義
word.application wordapp = new microsoft.office.interop.word.application();
object missing = system.reflection.missing.value;
object falsevalue = false;
object truevalue = true;
關(guān)于處理
需要注意的是
1:打開(kāi)word的方式
2:query的寫(xiě)法。類似于sql一般,比較好玩。
3:設(shè)置列,。設(shè)置之后,在word中可以看見(jiàn)這些列。
4:關(guān)閉word之后,還得再copy一次excel。直接生成之后的excel文件size暴漲,文件還打不開(kāi),所以覆蓋一遍了之。原因不詳。
private void button1_click(object sender, eventargs e)
{
object filename = copytemplatedoc();//copy doc in
word.document doc = wordapp.documents.open(ref filename, ref missing, ref falsevalue, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref truevalue, ref missing, ref missing, ref missing);
object linkto = copyexceldata();//copy excel data
object query = "select * from `sheet1$`";//data from sheet1
object header = "name,category,address,content";//filed list
try
{
doc.mailmerge.createdatasource(ref linkto, ref missing, ref missing, ref header, ref falsevalue, ref query, ref missing, ref missing, ref truevalue);
doc.mailmerge.fields.add(wordapp.selection.range, "name");//add one filed to test
messagebox.show("success");
}
catch (exception ex)
{
messagebox.show(ex.message);
}
finally
{
doc.save();//save word
closeapp();//close word app
copyexceldata();//copy data again,*******************
}
}
關(guān)于關(guān)閉word對(duì)象
public void closeapp()
{
wordapp.documents.close(ref truevalue, ref missing, ref missing);
wordapp.quit(ref truevalue, ref missing, ref missing);
system.runtime.interopservices.marshal.releasecomobject(wordapp);
gc.collect();
//this.killexcelprocess();
}
還有兩個(gè)工具函數(shù)不再贅述,用來(lái)copy文件并且返回文件名private string copyexceldata();和private string copytemplatedoc()。
新聞熱點(diǎn)
疑難解答
圖片精選