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

C#操作Word表格

2013-09-06 09:07 351 查看
向表格中添加行,有两种操作形式:一种是在WORD模板中已经存在了一个表格。一种是我们在程序中直接添加一个表格对象。

第一种情况下,需要注意:在WORD模板中要操作的表格中,不能有纵向合并的单元格,不然程序无法获取到当前要操作对象导致程序报错.单元格的合并,我们可以在程序中控制。

第二种情况下就需要我们通过程序去直接添加表格了。

生成表格的代码具体如下:

1.获取文档中已存在的表格:

Microsoft.Office.Interop.Word.TablecharacterTable = doc.Tables[2];//在document对象的集合操作中,起始点是从1开始,并不是从0开始的,此处需要注意。

2.在文档中直接生成表格,首先要获取插入表格的位置,然后添加表格对象:

object oEndOfDoc ="\\endofdoc";//WORD中预定义的书签,还有很多,此处就不一一列举。

object oMissing =System.Reflection.Missing.Value;

Range wrdRng = doc.Bookmarks.get_Item(refoEndOfDoc).Range;//获取当前文档的末尾位置。

wrdRng.InsertAfter(" ");//插入一行,此处不能用wrdRng.InsertAfter(""),如果用这个,就不能换行,我也不知道为什么。

[复制此代码]CODE:

object oCollapseEnd =Microsoft.Office.Interop.Word.WdCollapseDirection.wdCollapseEnd;

object oPageBreak =Microsoft.Office.Interop.Word.WdBreakType.wdPageBreak;//分页符

wrdRng.Collapse(ref oCollapseEnd);

wrdRng.InsertBreak(ref oPageBreak);//插入了一页

wrdRng.Collapse(ref oCollapseEnd);

wrdRng.InsertAfter("图片信息");

wrdRng.Font.Size = 20;//指定操作对象的文字大小

wrdRng.Font.Bold = 1;//指定操作对象的粗体:1为粗体,0为正常

wrdRng.ParagraphFormat.Alignment =WdParagraphAlignment.wdAlignParagraphCenter;//指定操作区域的文字布局:居中对齐

//上述代码的意思是:找到当前的末尾位置,然后插入一个分页符,相当于跳到了一个新页,在这个新页的顶端写入文字“图片信息”,并指定文字大小为20,粗体居中显示。

wrdRng = doc.Bookmarks.get_Item(refoEndOfDoc).Range;

wrdRng.InsertAfter(" ");

wrdRng = doc.Bookmarks.get_Item(refoEndOfDoc).Range;

wrdRng.InsertParagraphAfter();//插入一个段落,在此段落上插入一个2行一列的表格。

Microsoft.Office.Interop.Word.TablenewTable = doc.Tables.Add(wrdRng, 2, 1, ref oMissing, ref oMissing);

我们还可以对表格进行格式设置,此处我们就不在一一列举。

3.下面我们分析一下对表格的单元格的操作:合并,拆分。这个就需要我们根据实际表格来进行操作:

//获取具体的某个单元格(1,1),获取第一行第一列的单元格

Cell cell = doc.Tables[1].Cell(1,1);

cell.Range.Text="Text";//指定当前单元格的内容为Text

在Table的操作中,添加新行:

object beforeRow = doc.Tables[1].Rows[2];//此行是先获取到第二行

doc.Tables[1].Rows.Add(ref beforeRow);//效果类似于在WORD中此表格的第二行上进行【插入行】操作,插入的新行将会插入到当前行的上一行中,格式也是和此行一致的。

//合并单元格:感觉在此处合并单元格挺傻瓜的,你只需要指定你要合并的起始单元格和结束单元格,然后通过Merge操作就行了

Cell cell = doc.Tables[1].Cell(iRow, 2);//列合并

cell.Merge(doc.Tables[1].Cell(iRow, 6));

Cell cell1 = doc.Tables[1].Cell(iRow - 1,1);//行合并

cell1.Merge(doc.Tables[1].Cell(iRow + 1,1));

上述操作就是在此程序中用到的一些知识点,还有好多的东西需要去熟悉、理解。

另外,在程序的测试过程中发现,当执行一次文档生成后,在资源管理器中始终有winword.exe进程杀不掉,目前的解决办法是:直接杀进程,代码如下:

[复制此代码]CODE:

protected void killAllProcess() //杀掉所有winword.exe进程

{

System.Diagnostics.Process[] myPs;

myPs =System.Diagnostics.Process.GetProcesses();

foreach (System.Diagnostics.Process p inmyPs)

{

if (p.Id != 0)

{

string myS = "WINWORD.EXE" +p.ProcessName + " ID:" + p.Id.ToString();

try

{

if (p.Modules != null)

if (p.Modules.Count > 0)

{

System.Diagnostics.ProcessModule pm =p.Modules[0];

myS += "\n Modules[0].FileName:"+ pm.FileName;

myS += "\nModules[0].ModuleName:" + pm.ModuleName;

myS += "\nModules[0].FileVersionInfo:\n" + pm.FileVersionInfo.ToString();

if (pm.ModuleName.ToLower() =="winword.exe")

p.Kill();

}

}

catch

{ }

finally

{

}

}

}

}

目前为止,一个WORD文档就生成了。上述为我在这个程序开发中遇到的问题和解决方法,可能有好多地方都是考虑不全的,如果在程序开发中对WORD的操作有新的认识的话,欢迎和我沟通交流,彼此提高!

下边是在网上一些比较好的摘抄:

创建新Word

[复制此代码]CODE:

object oMissing =System.Reflection.Missing.Value;

Word._Application oWord;

Word._Document oDoc;

oWord = new Word.Application();

oWord.Visible = true;

oDoc = oWord.Documents.Add(ref oMissing,ref oMissing,

ref oMissing, ref oMissing);

打开文档:

[复制此代码]CODE:

object oMissing =System.Reflection.Missing.Value;

Word._Application oWord;

Word._Document oDoc;

oWord = new Word.Application();

oWord.Visible = true;

object fileName =@"E:CCCXCXXTestDoc.doc";

oDoc = oWord.Documents.Open(ref fileName,

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

导入模板

[复制此代码]CODE:

object oMissing =System.Reflection.Missing.Value;

Word._Application oWord;

Word._Document oDoc;

oWord = new Word.Application();

oWord.Visible = true;

object fileName =@"E:XXXCCXTest.doc";

oDoc = oWord.Documents.Add(ref fileName, refoMissing,

ref oMissing, ref oMissing);

.添加新表

[复制此代码]CODE:

object oMissing =System.Reflection.Missing.Value;

Word._Application oWord;

Word._Document oDoc;

oWord = new Word.Application();

oWord.Visible = true;

oDoc = oWord.Documents.Add(ref oMissing,ref oMissing,

ref oMissing, ref oMissing);

object start = 0;

object end = 0;

Word.Range tableLocation = oDoc.Range(refstart, ref end);

oDoc.Tables.Add(tableLocation, 3, 4, refoMissing, ref oMissing);

.表插入行

[复制此代码]CODE:

object oMissing = System.Reflection.Missing.Value;

Word._Application oWord;

Word._Document oDoc;

oWord = new Word.Application();

oWord.Visible = true;

oDoc = oWord.Documents.Add(ref oMissing,ref oMissing,

ref oMissing, ref oMissing);

object start = 0;

object end = 0;

Word.Range tableLocation = oDoc.Range(refstart, ref end);

oDoc.Tables.Add(tableLocation, 3, 4, refoMissing, ref oMissing);

Word.Table newTable = oDoc.Tables[1];

object beforeRow = newTable.Rows[1];

newTable.Rows.Add(ref beforeRow);

.单元格合并

[复制此代码]CODE:

object oMissing =System.Reflection.Missing.Value;

Word._Application oWord;

Word._Document oDoc;

oWord = new Word.Application();

oWord.Visible = true;

oDoc = oWord.Documents.Add(ref oMissing,ref oMissing,

ref oMissing, ref oMissing);

object start = 0;

object end = 0;

Word.Range tableLocation = oDoc.Range(refstart, ref end);

oDoc.Tables.Add(tableLocation, 3, 4, refoMissing, ref oMissing);

Word.Table newTable = oDoc.Tables[1];

object beforeRow = newTable.Rows[1];

newTable.Rows.Add(ref beforeRow);

Word.Cell cell = newTable.Cell(1, 1);

cell.Merge(newTable.Cell(1, 2));

.单元格分离

[复制此代码]CODE:

object oMissing =System.Reflection.Missing.Value;

Word._Application oWord;

Word._Document oDoc;

oWord = new Word.Application();

oWord.Visible = true;

oDoc = oWord.Documents.Add( oMissing,

ref oMissing, ref oMissing);

object start = 0;

object end = 0;

Word.Range tableLocation = oDoc.Range(refstart, ref end);

oDoc.Tables.Add(tableLocation, 3, 4, refoMissing, ref oMissing);

Word.Table newTable = oDoc.Tables[1];

object beforeRow = newTable.Rows[1];

newTable.Rows.Add(ref beforeRow);

Word.Cell cell = newTable.Cell(1, 1);

cell.Merge(newTable.Cell(1, 2));

object Rownum = 2;

object Columnnum = 2;

cell.Split(ref Rownum, ref Columnnum);

通过段落控制插入

[复制此代码]CODE:

object oMissing =System.Reflection.Missing.Value;

object oEndOfDoc = "\endofdoc";/**//* endofdoc is a predefined bookmark */

//Start Word and create a new document.

Word._Application oWord;

Word._Document oDoc;

oWord = new Word.Application();

oWord.Visible = true;

oDoc = oWord.Documents.Add(ref oMissing,ref oMissing,

ref oMissing, ref oMissing);

//Insert a paragraph at the beginning ofthe document.

Word.Paragraph oPara1;

oPara1 = oDoc.Content.Paragraphs.Add(refoMissing);

oPara1.Range.Text = "Heading 1";

oPara1.Range.Font.Bold = 1;

oPara1.Format.SpaceAfter = 24; //24 ptspacing after paragraph.

oPara1.Range.InsertParagraphAfter();

Wor版内容下载地址:

下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: