开发者社区> 余二五> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

C#实现Word中表格信息读取

简介:
+关注继续查看
很多时候,会有很多信息存放在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文档就好。现在他们对这些难于维护,难于检索的东西终于失去了耐性,开始考虑数据库和网络了。也许数字化也是一个思维逐步转变的过程。









本文转自 duguguiyu 51CTO博客,原文链接:http://blog.51cto.com/duguguiyu/361738,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
从海康摄像机上读取RTSP视频流并存储当前帧到本地
从海康摄像机上读取RTSP视频流并存储当前帧到本地
663 0
SAP PP COR1事务里下达工单,保存时报错:No data was found for the input values
SAP PP COR1事务里下达工单,保存时报错:No data was found for the input values
84 0
04 pandas DataFrame_创建、文件读取、编码
=== DataFrame 简介 === 定义:数据帧 (DataFrame) 是二维数据结构,即数据以行和列的表格方式排列。 特点: 1、 潜在的列是不同的类型 2、 大小可变 3、 标记轴是行和列 (行、列索引) 4、 可以对行和列进行算数运算 =...
1171 0
【C/C++学院】(18)QT文件读写/主窗口类/获取host信息
<h1><span style="font-family:'Microsoft YaHei UI','Microsoft YaHei',SimSun,'Segoe UI',Tahoma,Helvetica,sans-serif,'Microsoft YaHei',Georgia,Helvetica,Arial,sans-serif,宋体,PMingLiU,serif; font-size:
1873 0
搜搜(www.soso.com),I 老虎油!
搜搜(www.soso.com),I 老虎油! 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
1642 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载