您的位置:首页 > 编程语言 > C#

c#操作word的方法集成,绝对可靠

2013-09-28 13:01 399 查看


        如果有问题,请留言,愿意解答

using System.Linq;
using System.Collections.Generic;
using System.Text;
using Microsoft.Office.Interop.Word;
using System;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using Word = Microsoft.Office.Interop.Word;
using System.Runtime.InteropServices;
using System.Diagnostics;

namespace 清洁生产报告辅助软件// 注意引用该类时添加引用dll文件以及更改namespace名称
{
class function
{
Word.Application app = new Microsoft.Office.Interop.Word.Application(); //可以打开word程序
Word.Document doc = null; //一会要记录word打开的文档
private _Application wordApp = null;
private _Document wordDoc = null;
public _Application Application
{
get
{
return wordApp;
}
set
{
wordApp = value;
}
}
public _Document Document
{
get
{
return wordDoc;
}
set
{
wordDoc = value;
}
}

//通过模板创建新文档
public void CreateNewDocument(string filePath)//这个路径是给模板的
{
killWinWordProcess();
wordApp = new ApplicationClass();
wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;///////////////////////??????????????????
wordApp.Visible = false;
object missing = System.Reflection.Missing.Value;
object templateName = filePath;
wordDoc = wordApp.Documents.Open(ref templateName, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing);
}

//保存新文件
public void SaveDocument(string filePath)
{
object fileName = filePath;
object format = WdSaveFormat.wdFormatDocument;//保存格式             
object miss = System.Reflection.Missing.Value;

//删除空白行
Word.Paragraph paragraph;
Word.Paragraphs paragraphs = wordDoc.Paragraphs;
for (int i = paragraphs.Count; i > 0; i--)
{
paragraph = paragraphs[i];

//  如果段落的文本为空的话,首先选择该段落,然后再调用Word中Selection对象的Delete方法来删除
// 不为空什么都不做
if (paragraph.Range.Text.Trim() == string.Empty)
{
paragraph.Range.Select();
// wordapp.Selection.Delete();
paragraph.Range.Delete();
}
}
wordDoc.SaveAs(ref fileName, ref format, ref miss,
ref miss, ref miss, ref miss, ref miss,
ref miss, ref miss, ref miss, ref miss,
ref miss, ref miss, ref miss, ref miss,
ref miss);
//关闭wordDoc,wordApp对象 
object SaveChanges = WdSaveOptions.wdSaveChanges;
object OriginalFormat = WdOriginalFormat.wdOriginalDocumentFormat;
object RouteDocument = false;
wordDoc.Close(ref SaveChanges, ref OriginalFormat, ref RouteDocument);
wordApp.Quit(ref SaveChanges, ref OriginalFormat, ref RouteDocument);
}

// 杀掉winword.exe进程
public void killWinWordProcess()
{
System.Diagnostics.Process[] processes = System.Diagnostics.Process.GetProcessesByName("WINWORD");
foreach (System.Diagnostics.Process process in processes)
{
bool b = process.MainWindowTitle == "";
if (process.MainWindowTitle == "")
{
process.Kill();
}
}
}

//插入表格,bookmark书签
public Table InsertTable(string bookmark, int rows, int columns, float width)
{
object miss = System.Reflection.Missing.Value;
object oStart = bookmark;
Range range = wordDoc.Bookmarks.get_Item(ref oStart).Range;//表格插入位置
Table newTable = wordDoc.Tables.Add(range, rows, columns, ref miss, ref miss);

//由于附值以后书签自动消除,为了以后便于修改,需要把书签再自动生成一个
object oRng = range;
wordDoc.Bookmarks.Add(oStart.ToString(), ref oRng);

//设置表的格式
newTable.Borders.Enable = 1;  //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过)
newTable.Borders.OutsideLineWidth = WdLineWidth.wdLineWidth050pt;//边框宽度
if (width != 0)
{
newTable.PreferredWidth = width;//表格宽度
}
newTable.AllowPageBreaks = false;
return newTable;
}

//合并单元格 表名,开始行号,开始列号,结束行号,结束列号
public void MergeCell(Microsoft.Office.Interop.Word.Table table, int row1, int column1, int row2, int column2)
{
table.Cell(row1, column1).Merge(table.Cell(row2, column2));
}

//设置表格内容对齐方式 Align水平方向,Vertical垂直方向(左对齐,居中对齐,右对齐分别对应Align和Vertical的值为-1,0,1)
public void SetParagraph_Table(Microsoft.Office.Interop.Word.Table table, int Align, int Vertical)
{
switch (Align)
{
case -1: table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphLeft; break;//左对齐
case 0: table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphCenter; break;//水平居中
case 1: table.Range.ParagraphFormat.Alignment = WdParagraphAlignment.wdAlignParagraphRight; break;//右对齐
}
switch (Vertical)
{
case -1: table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalTop; break;//顶端对齐
case 0: table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalCenter; break;//垂直居中
case 1: table.Range.Cells.VerticalAlignment = WdCellVerticalAlignment.wdCellAlignVerticalBottom; break;//底端对齐
}
}

//设置表格字体
public void SetFont_Table(Microsoft.Office.Interop.Word.Table table, string fontName, double size)
{
if (size != 0)
{
table.Range.Font.Size = Convert.ToSingle(size);
}
if (fontName != "")
{
table.Range.Font.Name = fontName;
}
}

//是否使用边框,n表格的序号,use是或否
public void UseBorder(int n, bool use)
{
if (use)
{
wordDoc.Content.Tables
.Borders.Enable = 1;  //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过)
}
else
{
wordDoc.Content.Tables
.Borders.Enable = 2;  //允许有边框,默认没有边框(为0时报错,1为实线边框,2、3为虚线边框,以后的数字没试过)
}
}

//给表格插入一行,n表格的序号从1开始记
public void AddRow(int n)
{
object miss = System.Reflection.Missing.Value;
wordDoc.Content.Tables
.Rows.Add(ref miss);
}

//给表格添加一行
public void AddRow(Microsoft.Office.Interop.Word.Table table)
{
object miss = System.Reflection.Missing.Value;
table.Rows.Add(ref miss);
}

//给表格插入rows行,n为表格的序号
public void AddRow(int n, int rows)
{
object miss = System.Reflection.Missing.Value;
Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables
;
for (int i = 0; i < rows; i++)
{
table.Rows.Add(ref miss);
}
}

//给表格中单元格插入元素,table所在表格,row行号,column列号,value插入的元素
public void InsertCell(Microsoft.Office.Interop.Word.Table table, int row, int column, string value)
{
table.Cell(row, column).Range.Text = value;
}

//给表格中单元格插入元素,n表格的序号从1开始记,row行号,column列号,value插入的元素
public void InsertCell(int n, int row, int column, string value)
{
wordDoc.Content.Tables
.Cell(row, column).Range.Text = value;
}

//给表格插入一行数据,n为表格的序号,row行号,columns列数,values插入的值
public void InsertCell(int n, int row, int columns, string[] values)
{
Microsoft.Office.Interop.Word.Table table = wordDoc.Content.Tables
;
for (int i = 0; i < columns; i++)
{
table.Cell(row, i + 1).Range.Text = values[i];
}
}

//读取固定段落的方法集合
/*打开文档*/
public void openFile(object fileName)
{
try
{
if (app.Documents.Count > 0)
{
if (MessageBox.Show("已经打开了一个word文档,你想关闭重新打开该文档吗?", " 提示", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
object unknow = Type.Missing;
doc = app.ActiveDocument;
if (MessageBox.Show("你想保存吗?", "保存", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
app.ActiveDocument.Save();
}

app.ActiveDocument.Close(ref unknow, ref unknow, ref unknow);
app.Visible = false;
}
else
{
return;
}
}
}
catch (Exception)
{
//MessageBox.Show("您可能关闭了文档");
app = new Microsoft.Office.Interop.Word.Application();
}

try
{
object unknow = Type.Missing;
doc = app.Documents.Open(ref fileName,
ref unknow, ref unknow, ref unknow, ref unknow, ref unknow,
ref unknow, ref unknow, ref unknow, ref unknow, ref unknow,
ref unknow, ref unknow, ref unknow, ref unknow, ref unknow);
// doc.Close();
}
catch (Exception ex)
{
MessageBox.Show("出现错误:" + ex.ToString());
}

}

/*读取word文档的第i段*/
public string readPar(int i)
{
try
{

string temp = doc.Paragraphs[i].Range.Text.Trim();
return temp;
}
catch (Exception e)
{
MessageBox.Show("Error:" + e.ToString());
return null;
}
}

/*返回word文档一共几段*/
public int getParCount()
{
return doc.Paragraphs.Count;
}

/*判断文件名的后缀*/
public static bool IsC(string str)
{
if (str.IndexOf(".docx") >= 0 || str.IndexOf(".doc") >= 0)
{
return true;
}
return false;
}

//通过标签读取表格中的数据(路径,第几行,第几列的数据,标签名)
public string readtable(string filePath, int row, int columns, string book)
{
killWinWordProcess();
wordApp = new ApplicationClass();
wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;
wordApp.Visible = false;
object missing = System.Reflection.Missing.Value;
object templateName = filePath;
wordDoc = wordApp.Documents.Open(ref templateName, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing);
wordDoc.Activate();
object bq = "book";
Bookmark mbook = wordDoc.Bookmarks.get_Item(ref bq);
Table ta = mbook.Range.Tables[1];
string value = ta.Cell(row, columns).Range.Text;
MessageBox.Show(value);
return value;
}

//插入一段文字,text为文字内容
public void InsertText(string bookmark, string text)
{
object missingValue = System.Reflection.Missing.Value;

if (text != null)
{
object oStart = bookmark;
string TT = text;
char[] cText = new char[TT.Length];
cText = TT.ToCharArray();
string tText = "";

for (int n = 0; n < TT.Length; n++)
{
//由于回车建“\n”作为标志,所以每当有回车时表示一段文字开始,确定该标签下每段的字体一致(设定字体只能按段落来设置)
if (cText
!= '\n' && n < TT.Length - 1)
tText = tText + cText
;
else
{

Word.Range bookRng = wordDoc.Bookmarks.get_Item(ref oStart).Range;
bookRng.Text = tText;
//**********************************************************************
bookRng.Font.Bold = 1;//设置粗细
bookRng.Font.Size = 22;//字体大小
bookRng.InsertParagraphAfter();
//由于附值以后书签自动消除,为了以后便于修改,需要把书签再自动生成一个

object oRng = bookRng;
wordDoc.Bookmarks.Add(oStart.ToString(), ref oRng);
object bSaveChange = true;

tText = "";

}

}

}

}

//通过一个标签读取word的内容
public string reading(string filePath, string book)
{
killWinWordProcess();
wordApp = new ApplicationClass();
wordApp.DisplayAlerts = WdAlertLevel.wdAlertsNone;///////////////////////??????????????????
wordApp.Visible = false;
object missing = System.Reflection.Missing.Value;
object templateName = filePath;
MessageBox.Show(templateName.ToString());

wordDoc = wordApp.Documents.Open(ref templateName, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing, ref missing);

wordDoc.Activate();
object bq = "book";
Bookmark mbook = wordDoc.Bookmarks.get_Item(ref bq);
string s = mbook.Range.Text;
MessageBox.Show(s);
return s;
}

//类结束的位置
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# application csdn office word