C#实现对Word文件读写[转]

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

手头上的一个项目报表相对比较简单,所以报表打印采用VBA引擎,通过定制Word模版,然后根据模版需要填充数据,然后OK,打印即可。

实现方法:首先需要引用VBA组建,我用的是Office2003PRofessional,Dll版本号为Microsoft Word11.0

另外当然还需要引用Interop.Word.Dll.

代码如下:

///#region 打开Word文档,并且返回对象wDoc,wDoc//////打开Word文档,并且返回对象wDoc,wDoc//////完整Word文件路径+名称///返回的Word.Document wDoc对象///返回的Word.application对象publicstaticvoidCreateWordDocument(stringFileName,refWord.Document wDoc,refWord.Application WApp)

{if(FileName =="")return;

Word.Document thisDocument=null;

Word.FormFields formFields=null;

Word.Application thisApplication=newWord.ApplicationClass();

thisApplication.Visible=true;

thisApplication.Caption="";

thisApplication.Options.CheckSpellingAsYouType=false;

thisApplication.Options.CheckGrammarAsYouType=false;

Object filename=FileName;

Object ConfirmConversions=false;

Object ReadOnly=true;

Object AddToRecentFiles=false;

Object PasswordDocument=System.Type.Missing;

Object PasswordTemplate=System.Type.Missing;

Object Revert=System.Type.Missing;

Object WritePasswordDocument=System.Type.Missing;

Object WritePasswordTemplate=System.Type.Missing;

Object Format=System.Type.Missing;

Object Encoding=System.Type.Missing;

Object Visible=System.Type.Missing;

Object OpenAndRepair=System.Type.Missing;

Object DocumentDirection=System.Type.Missing;

Object NoEncodingDialog=System.Type.Missing;

ObjectxmlTransform=System.Type.Missing;try{

Word.Document wordDoc=thisApplication.Documents.Open(reffilename,refConfirmConversions,refReadOnly,refAddToRecentFiles,refPasswordDocument,refPasswordTemplate,refRevert,refWritePasswordDocument,refWritePasswordTemplate,refFormat,refEncoding,refVisible,refOpenAndRepair,refDocumentDirection,refNoEncodingDialog,refXMLTransform );

thisDocument=wordDoc;

wDoc=wordDoc;

WApp=thisApplication;

formFields=wordDoc.FormFields;

}catch(Exception ex)

{

MessageBox.Show(ex.Message);

}

}#endregion调用上面静态方法,打开目标文件并且把DataGrid中数据填充到对应Word标签中去///#region Word填充数据(For Example)//////Word填充数据///privatevoidWordLoadData()

{

Word.Document wDoc=null;

Word.Application wApp=null;

sysFun.CreateWordDocument("E:\\监测报告(new).dot",refwDoc,refwApp);//对标签"C"进行填充objectbkmC="C";if(wApp.ActiveDocument.Bookmarks.Exists("C") ==true)

{

wApp.ActiveDocument.Bookmarks.get_Item

(refbkmC).Select();

}

wApp.Selection.TypeText(this.txt1.Text);objectbkmG ="TWaterTable3";objectunit;objectcount;//移动数objectextend;

extend=Word.WdMovementType.wdExtend;

unit=Word.WdUnits.wdCell;//把DataGrid中数据填充到标签TWaterTable3上if(wApp.ActiveDocument.Bookmarks.Exists("TWaterTable3") ==true)

{

wApp.ActiveDocument.Bookmarks.get_Item

(refbkmG).Select();for(inti=0;i {if(i==0)

{

count=1;

}else{

count=0;

}//需填充5列数据wApp.Selection.Move(refunit,refcount);

wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[0].Text);

count=1;

wApp.Selection.Move(refunit,refcount);

wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[1].Text);

wApp.Selection.Move(refunit,refcount);

wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[2].Text);

wApp.Selection.Move(refunit,refcount);

wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[3].Text);

wApp.Selection.Move(refunit,refcount);

wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[4].Text);//换行wApp.Selection.MoveRight(refunit,refcount,refextend);

}

}

}#endregion然后就OK了,在对标签表控制要注意列循环和换行.

C#操作Excel(导入导出)

有很多朋友说需要C#导出到Excel的代码,现共享给大家//////读取Excel文档//////文件名称///返回一个数据集publicDataSet ExcelToDS(stringPath)

{stringstrConn ="Provider=Microsoft.Jet.OLEDB.4.0;"+"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";

OleDbConnection conn=newOleDbConnection(strConn);

conn.Open();stringstrExcel ="";

OleDbDataAdapter myCommand=null;

DataSet ds=null;

strExcel="select * from [sheet1$]";

myCommand=newOleDbDataAdapter(strExcel, strConn);

ds=newDataSet();

myCommand.Fill(ds,"table1");returnds;

}//////写入Excel文档//////文件名称publicboolSaveFP2toExcel(stringPath)

{try{stringstrConn ="Provider=Microsoft.Jet.OLEDB.4.0;"+"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";

OleDbConnection conn=newOleDbConnection(strConn);

conn.Open();

System.Data.OleDb.OleDbCommand cmd=newOleDbCommand ();

cmd.Connection=conn;//cmd.CommandText ="UPDATE [sheet1$] SET 姓名='2005-01-01' WHERE 工号='日期'";//cmd.ExecuteNonQuery ();for(inti=0;i {if(fp2.Sheets [0].Cells[i,0].Text!="")

{

cmd.CommandText="INSERT INTO [sheet1$] (工号,姓名,部门,职务,日期,时间) VALUES('"+fp2.Sheets [0].Cells[i,0].Text+"','"+fp2.Sheets [0].Cells[i,1].Text+"','"+fp2.Sheets [0].Cells[i,2].Text+"','"+fp2.Sheets [0].Cells[i,3].Text+"','"+fp2.Sheets [0].Cells[i,4].Text+"','"+fp2.Sheets [0].Cells[i,5].Text+"')";

cmd.ExecuteNonQuery ();

}

}

conn.Close ();returntrue;

}catch(System.Data.OleDb.OleDbException ex)

{

System.Diagnostics.Debug.WriteLine ("写入Excel发生错误:"+ex.Message );

}returnfalse;

}

这种方法是相当有效的。

下附:VB.NET版实现word打开与关闭,有兴趣的朋友可以研究一下

VB.NET实现word打开与关闭

Imports Word'打开Dim mWordapp As Word.Application'word 应用程序Dim mobjDoc As Word.Document'word 文档Dim fullFileNameasstring'文件路径mWordapp= CreateObject("Word.Application")

mobjDoc=mWordapp.Documents.Add(FullFileName)'关闭Dim missing As Object=System.Reflection.Missing.Value

mWordapp.Application.Quit()

If Not mobjDoc Is Nothing Then'垃圾回收System.Runtime.InteropServices.Marshal.ReleaseComObject(mobjDoc)

mobjDoc=Nothing

End If

If Not mWordapp Is Nothing Then

System.Runtime.InteropServices.Marshal.ReleaseComObject(mWordapp)

mWordapp=Nothing

End If'真正释放word进程

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航