C#的office操作[word&Excel]

    技术2022-05-11  135

    C#实现对Word文件读写

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

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

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

      代码如下:

    ///#region 打开Word文档,并且返回对象wDoc,wDoc/// /// 打开Word文档,并且返回对象wDoc,wDoc/// /// 完整Word文件路径+名称 /// 返回的Word.Document wDoc对象/// 返回的Word.Application对象public static void CreateWordDocument(string FileName,ref Word.Document wDoc,ref Word.Application WApp){if(FileName == "") return;Word.Document thisDocument = null;Word.FormFields formFields = null;Word.Application thisApplication = new Word.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;Object XMLTransform = System.Type.Missing;

    try{Word.Document wordDoc =thisApplication.Documents.Open(ref filename, ref ConfirmConversions,ref ReadOnly, ref AddToRecentFiles, ref PasswordDocument, ref PasswordTemplate,ref Revert,ref WritePasswordDocument, ref WritePasswordTemplate, ref Format,ref Encoding, ref Visible, ref OpenAndRepair, ref DocumentDirection,ref NoEncodingDialog, ref XMLTransform );

    thisDocument = wordDoc;wDoc = wordDoc;WApp = thisApplication;formFields = wordDoc.FormFields;}catch(Exception ex){MessageBox.Show(ex.Message);}

    }#endregion

    http://ike.126.com调用上面静态方法,打开目标文件并且把DataGrid中数据填充到对应Word标签中去

    ///#region Word填充数据(For Example)/// /// Word填充数据/// private void WordLoadData(){Word.Document wDoc=null;Word.Application wApp=null;sysFun.CreateWordDocument("E://监测报告(new).dot",ref wDoc,ref wApp);

    //对标签"C"进行填充object bkmC="C";if(wApp.ActiveDocument.Bookmarks.Exists("C") == true){wApp.ActiveDocument.Bookmarks.get_Item(ref bkmC).Select();}wApp.Selection.TypeText(this.txt1.Text);object bkmG = "TWaterTable3";object unit; object count; //移动数object extend;

    extend = Word.WdMovementType.wdExtend;unit = Word.WdUnits.wdCell;//把DataGrid中数据填充到标签TWaterTable3上if(wApp.ActiveDocument.Bookmarks.Exists("TWaterTable3") == true){wApp.ActiveDocument.Bookmarks.get_Item(ref bkmG).Select();

    for(int i=0;i {if(i==0){count=1;}else{count=0;}//需填充5列数据wApp.Selection.Move(ref unit,ref count);wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[0].Text);count=1;

    wApp.Selection.Move(ref unit,ref count);wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[1].Text);

    wApp.Selection.Move(ref unit,ref count);wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[2].Text);

    wApp.Selection.Move(ref unit,ref count);wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[3].Text);

    wApp.Selection.Move(ref unit,ref count);wApp.Selection.TypeText(gridEX1.GetRow(i).Cells[4].Text);//换行wApp.Selection.MoveRight(ref unit,ref count,ref extend);}}}#endregion

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

    C#操作Excel(导入导出)

      有很多朋友说需要C#导出到Excel的代码,现共享给大家

    /// /// 读取Excel文档/// /// 文件名称/// 返回一个数据集public DataSet ExcelToDS(string Path){string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";OleDbConnection conn = new OleDbConnection(strConn);conn.Open(); string strExcel = ""; OleDbDataAdapter myCommand = null;DataSet ds = null;strExcel="select * from [sheet1$]";myCommand = new OleDbDataAdapter(strExcel, strConn);ds = new DataSet();myCommand.Fill(ds,"table1"); return ds;}

    /// /// 写入Excel文档/// /// 文件名称public bool SaveFP2toExcel(string Path){try{string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source="+ Path +";"+"Extended Properties=Excel 8.0;";OleDbConnection conn = new OleDbConnection(strConn);conn.Open(); System.Data.OleDb.OleDbCommand cmd=new OleDbCommand ();cmd.Connection =conn;//cmd.CommandText ="UPDATE [sheet1$] SET 姓名='2005-01-01' WHERE 工号='日期'";//cmd.ExecuteNonQuery ();for(int i=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 ();return true;}catch(System.Data.OleDb.OleDbException ex){System.Diagnostics.Debug.WriteLine ("写入Excel发生错误:"+ex.Message );}return false;}

      这种方法是相当有效的。http://ike.126.com

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

    VB.NET实现word打开与关闭

    Imports Word

    '打开

    Dim mWordapp As Word.Application 'word 应用程序

    Dim mobjDoc As Word.Document 'word 文档

    Dim fullFileName as string '文件路径

    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进程

    GC.Collect()

    更多文章请点击左边的“文章”和“存档”分类

    文章

    c#(RSS) 其他(RSS) 通用算法(RSS) 杂谈(RSS)

    存档

    2005年12月(139) 2005年11月(11) 2005年08月(2) 2005年04月(2) 2005年01月(3)

    最新回复(0)