天天看點

C#操作Word/excel文檔

首先引入類庫,Microsoft.Office.Interop.Word,然後進行程式設計。代碼如下:

首先引入類庫,Microsoft.Office.Interop.Word,然後進行程式設計。代碼如下: 

using System; 

using System.Collections.Generic; 

using System.ComponentModel; 

using System.Data; 

using System.Drawing; 

using System.Text; 

using System.Windows.Forms; 

using Microsoft.Office.Interop.Word; 

namespace WordTest 

public partial class Form1 : Form 

object strFileName; 

Object Nothing; 

Microsoft.Office.Interop.Word.Application myWordApp = new Microsoft.Office.Interop.Word.ApplicationClass(); 

Document myWordDoc; 

string strContent = ""; 

public Form1() 

InitializeComponent(); 

private void button1_Click(object sender, EventArgs e) 

createWord(); 

//openWord(); 

private void createWord() 

strFileName = System.Windows.Forms.Application.StartupPath + "test.doc"; 

if (System.IO.File.Exists((string)strFileName)) 

System.IO.File.Delete((string)strFileName); 

Object Nothing = System.Reflection.Missing.Value; 

myWordDoc = myWordApp.Documents.Add(ref Nothing, ref Nothing, ref Nothing, ref Nothing); 

#region 将資料庫中讀取得資料寫入到word檔案中 

strContent = "你好nnr"; 

myWordDoc.Paragraphs.Last.Range.Text = strContent; 

strContent = "這是測試程式"; 

#endregion 

//将WordDoc文檔對象的内容儲存為DOC文檔 

myWordDoc.SaveAs(ref strFileName, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing); 

//關閉WordDoc文檔對象 

myWordDoc.Close(ref Nothing, ref Nothing, ref Nothing); 

//關閉WordApp元件對象 

myWordApp.Quit(ref Nothing, ref Nothing, ref Nothing); 

this.richTextBox1.Text = strFileName + "rn" + "建立成功"; 

private void openWord() 

fontDialog1.ShowDialog(); 

System.Drawing.Font font = fontDialog1.Font; 

object filepath = "D:asp.docx"; 

object oMissing = System.Reflection.Missing.Value; 

myWordDoc = myWordApp.Documents.Open(ref filepath, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 

ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, 

ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing); 

myWordDoc.Content.Font.Size = font.Size; 

myWordDoc.Content.Font.Name = font.Name; 

myWordDoc.Save(); 

richTextBox1.Text = myWordDoc.Content.Text; 

myWordDoc.Close(ref oMissing, ref oMissing, ref oMissing); 

myWordApp.Quit(ref oMissing, ref oMissing, ref oMissing); 

======================================

另外當然還需要引用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

調用上面靜态方法,打開目标檔案并且把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)

(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);

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

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

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

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

//換行

wApp.Selection.MoveRight(ref unit,ref count,ref extend);

然後就OK了,在對标簽表控制要注意列循環和換行.

/// 讀取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 S***eFP2toExcel(string Path)

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

cmd.Connection =conn;

//cmd.CommandText ="Update [sheet1$] SET 姓名='2005-01-01' Where 工号='日期'";

//cmd.ExecuteNonQuery ();

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;

這種方法是相當有效的。

下附: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

'真正釋放word程序

GC.Collect()

本文轉自快樂就好部落格園部落格,原文連結:http://www.cnblogs.com/happyday56/archive/2007/11/02/946867.html,如需轉載請自行聯系原作者