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版内容下载地址:
下载地址
第一种情况下,需要注意:在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版内容下载地址:
下载地址
相关文章推荐
- C# 操作在Word表格中插入新行(表格含合并行)
- C#操作word之插入表格
- C#操作word,签入书签,图表,表格
- c#操作word表格
- c#操作word表格
- 黄聪:C# web word文档操作,任意指定位置插入图片,表格简单操作
- c#之Word基本操作----创建,打开,绘制表格,插入图片等
- C# 操作现有Word表格详细教程
- C#操作Word表格的彪悍实例 很全
- c#操作word表格
- Word C# 操作表格 提示集合所要求的成员不存在
- C#操作Word(四)——在Word文档中绘制表格
- c#操作word表格
- c#调用Aspose.Word组件操作word 插入文字/图片/表格 书签替换套打
- c#调用Aspose.Word组件操作word 插入文字/图片/表格 书签替换套打
- c#操作word表格
- C#中操作Word(7)—— 如何向Word中插入表格
- c#操作word中表格
- C#操作Word表格的常见操作
- c#操作word表格