C# 操作word文档

转载 2007年09月14日 10:16:00

object oFileName = @"C:/Documents and Settings/liush/My Documents/TestDoc.doc";
object oReadOnly = true;
object oMissing = System.Reflection.Missing.Value;

Word._Application oWord;
Word._Document oDoc;
oWord = new Word.Application();
oWord.Visible = true;//只是为了方便观察
oDoc = oWord.Documents.Open(ref oFileName, ref oMissing, ref oReadOnly, ref oMissing, ref oMissing,
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

//MessageBox.Show(oDoc.Tables.Count.ToString());
for (int tablePos = 1; tablePos <= oDoc.Tables.Count; tablePos++)
{
    Word.Table nowTable = oDoc.Tables.Item(tablePos);
    string tableMessage = string.Format("第{0}/{1}个表:/n", tablePos, oDoc.Tables.Count);

    for (int rowPos = 1; rowPos <= nowTable.Rows.Count; rowPos++)
    {
for (int columPos = 1; columPos <= nowTable.Columns.Count; columPos++)
{
tableMessage += nowTable.Cell(rowPos, columPos).Range.Text;
tableMessage = tableMessage.Remove(tableMessage.Length - 2, 2);//remove /r/a
tableMessage += "/t";
}

tableMessage += "/n";
    }

    MessageBox.Show(tableMessage);
}

如果看过了上面kaneboy的文章(这是一个系列的之一),再看这段代码应该不会很难理解。打开一个已有文档,然后遍历其中的所有的表。这里只是简单的将信息显示出来,具体实践上可以对这些信息进行分析。做完这些后,终于找到了一些官方的支持文档,地址如下:
http://msdn2.microsoft.com/zh-CN/library/y1xatbkd.aspx
其中的word任务有对word各种操作的简单代码事例,用vb和c#写的。看完之后,我想每个人都会明白vb对com的支持比c#不是简单明了一点两点。(可以看下这个http://blog.joycode.com/kaneboy/archive/2005/08/03/61489.aspx)同样的代码,用vb实现打开word文档的操作,代码如下:

Dim fileName As String = "C:/Documents and Settings/liush/My Documents/TestDoc.doc"
Dim isReadOnly As Boolean = True

Dim wordApplication As Word.Application = New Word.Application()
Dim wordDocument As Word.Document
wordApplication.Visible = True
wordDocument = wordApplication.Documents.Open(fileName, , isReadOnly)

/***********************************************************************/

在CSDN上总是有网友问这个问题,自己也遇到过,因些写出来供参考:
症状:
oWordApplic = New Word.Application
当程序运行到这句时出现下面的错误:
检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。
oWordApplic = New Word.Application
当程序运行到这句时出现下面的错误:
检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。 
解决方法一:
控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档
之后
单击属性打开此应用程序的属性对话框。 
2. 单击标识选项卡,然后选择交互式用户。
3.单击"安全"选项卡,分别在"启动和激活权限"和"访问权限"组中选中"自定义",然后
自定义->编辑->添加ASP.NET账户和IUSER_计算机名



* 这些帐户仅在计算机上安装有 IIS 的情况下才存在。
13. 确保允许每个用户访问,然后单击确定。
14. 单击确定关闭 DCOMCNFG。

解决方法二:
如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法:
在web.config中使用身份模拟,在<system.web>节中加入  <identity impersonate="true" userName="你的用户名" password="密码"/>
 </system.web>

/************************************************************/

protected void Page_Load(object sender, EventArgs e)
        {
            Word.Application wdApplication;   //As   Word.Application();  
            Word.Document wdWords;   //As   Word.Document  
    
            wdApplication   =   new   Word.Application();
            Object filename = @"D:/web/image/a.doc";
            object oReadOnly = true;
            object oMissing = System.Reflection.Missing.Value;
            wdWords = wdApplication.Documents.Open(ref filename, ref oMissing, ref oReadOnly, ref oMissing, ref oMissing,
    ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing, ref oMissing);

            for (int tablePos = 1; tablePos <= wdWords.Tables.Count; tablePos++)
            {
                Word.Table nowTable = wdWords.Tables.Item(tablePos);
                string tableMessage = string.Format("第{0}/{1}个表:/n", tablePos, wdWords.Tables.Count);

                for (int rowPos = 1; rowPos <= nowTable.Rows.Count; rowPos++)
                {
                    for (int columPos = 1; columPos <= nowTable.Columns.Count; columPos++)
                    {
                        tableMessage += nowTable.Cell(rowPos, columPos).Range.Text;
                        tableMessage = tableMessage.Remove(tableMessage.Length - 2, 2);//remove /r/a
                        tableMessage += "/t";
                    }

                    tableMessage += "/n";
                }

                Response.Write(tableMessage);
            }

C# Aspose.Word 操作word文档【五】

今天给大家介绍下,Aspose.word 对word进行创建一行文字(段落)的时候注意事项            string tempFile = Application.StartupPath ...
  • qq_23126581
  • qq_23126581
  • 2017年10月12日 13:43
  • 311

[C#]用C#动态生成Word文档之服务器配置Server 2003

用C#动态生成Word文档功能实现了,在本地的机器运行时是好的,但安装到远程服务器上就报错了,让我头疼了好久,看了很多的信息后,现在才算是搞定了。 为了不忘记特意再此做下记录来!程序安装到远程服务器上...
  • yiyiwyy326
  • yiyiwyy326
  • 2007年04月30日 10:24
  • 6624

C# 窗体程序界面显示和操作word 单是不依赖office的操作办法

最近做了一个招投标电子化的项目,评标需要打开word  对其打分,但是考虑到以后政府使用的话可能仅仅用wps来替代office ,而目前weboffice等这些是需要本地安装office的 ,其他像a...
  • zqyo2000z
  • zqyo2000z
  • 2017年11月28日 14:13
  • 64

C#利用内置的word五大对象操作word文档

public class WordHelper { ApplicationClass app = null; //定义应用程序对象 ...
  • q646926099
  • q646926099
  • 2016年08月01日 21:53
  • 1200

C# VS2012操作word文档 (一).创建文档

该文章主要是讲述如何使用VS2012创建word文档,因为在项目中我们可能需要点击一个按钮把数据库中的项目表单或图片显示到word文档中,因此该文章主要分析如何使用VS2012创建word文档并填写相...
  • Eastmount
  • Eastmount
  • 2013年09月06日 16:44
  • 8200

C#使用NPOI进行word相关操作和导出(1)

1.首先进行XWPFDocument类的实例化,该类的实例对应一个word文档   XWPFDocument MyDoc = new XWPFDocument();      2.设置页面的...
  • wangwei6125
  • wangwei6125
  • 2017年08月02日 21:06
  • 1597

C# Aspose.Word 操作word文档【二】

上一篇我们介绍了用书签的方式来填充word中数据,今天介绍第二种方法操作word! 依旧是先自己建好word模板,然后这里就不需要插入书签了。 1、建立模板 能看到红色标示的区域依旧用到...
  • qq_23126581
  • qq_23126581
  • 2017年09月20日 15:19
  • 190

C# 打印word文件

#region 辅助定义     //打印机状态     [FlagsAttribute]     internal enum PrinterStatus     {         PR...
  • zhangxinbin5
  • zhangxinbin5
  • 2014年03月17日 15:41
  • 1437

在MVC中使用word进行文档协作

之前在企业报验的界面上使用了pageoffice,效果很不错,现在准备加入到实验室的协作平台上,这个在解决无seafile上貌似成了关键技术。为了安全起见,暂时先放在内网,至于是否使用花生壳实现内网穿...
  • ni75089504
  • ni75089504
  • 2016年12月21日 14:17
  • 471

C#通过模板创建Word文件

C#通过模板创建Word文件,模板文件中创建书签bookmark,并在调用时给书签位置赋值。 模板创建文件类 /// ///创建Word格式的Report 的摘要说明 /...
  • enter89
  • enter89
  • 2015年06月26日 09:45
  • 1861
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C# 操作word文档
举报原因:
原因补充:

(最多只允许输入30个字)