很多时候,会有很多信息存放在word文档中。而我们需要把这些信息提取出来,另做它用。而word的格式是ms的机密,不知道有没有nb人可以对其做字符流的分析,反正我是没这能力也没这打算。所以就只能用ms提供的组件来进行编程。但ms没有提供托管的类库,而是提供了对com组件的pia转换。具体添加,使用和相关知识,可以参见kaneboy's blog中的http://blog.joycode.com/kaneboy/articles/67688.aspx。高手的讲解,很是清晰。
而我想做的是对word文档中的表信息进行提取。网上很难找到相关的代码(打开一个已有文档,对其内容进行分析),但我觉得这种工作是很有意义的。写了一段小的demo,如下:
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)
所以,下次我要做com操作的时候,我还会回归我可爱的vb的。但是,用了太久的c#毛病越来越多了,动不动就习惯性加括号,加分号。。。
ps:这些工作是帮我老妈做的。她们资料室想把资料目录信息存入数据库,然后建立网站方便检索和管理。这些目录信息原先是存放在word文档中的。这是她们第一次数字化的结果,那一次她们把一大堆纸质资料变成了word文档。在她们的当时理解中,数字化就是按照原来的东西,连格式都不变的变成word文档就好。现在他们对这些难于维护,难于检索的东西终于失去了耐性,开始考虑数据库和网络了。也许数字化也是一个思维逐步转变的过程。
新闻热点
疑难解答