如何做网站制作,建设银行河北分行网站,php网站开发技术题目,大庆市建设局网站目录 
功能需求 
Office 数据源的一些映射关系 
范例运行环境 
配置Office DCOM 
关键代码 
组件库引入 
核心代码 
杀掉进程 
总结 功能需求 
在应用项目里#xff0c;多数情况下我们会遇到导入 Excel 文件数据到数据库的功能需求#xff0c;但某些情况下#xff0c;也存…目录 
功能需求 
Office 数据源的一些映射关系 
范例运行环境 
配置Office DCOM 
关键代码 
组件库引入 
核心代码 
杀掉进程 
总结 功能需求 
在应用项目里多数情况下我们会遇到导入 Excel 文件数据到数据库的功能需求但某些情况下也存在使用 Word 进行表格数据编辑的情况。Word 和 Excel 其实各有特点用户的习惯不同即使同一数据源可能提供的数据源文件类型也不同这其中也包括导入Word内容的功能比如表格数据导出到DataSet数据集。 
Office 数据源的一些映射关系 
下图是一个简单的 Office 数据源的映射关系 
1、第一层级比如 WORD / EXCEL 为应用层级Application、 DATASET / DATABASE 为数据容器 
2、第二层级比如WORD 包含一个文档对象Docment、Excel 包含一个工作簿对象WorkBook、DataSet / DataBase 包括一组数据表对象Tables 
3、第三层级比如Word里的表格对象Table、Excel里的工作表对象Sheet 
最实际的工作任务是要将Table或Sheet对象的二维数据对应导出生成到 DataSet 里的 Table 对象如果有多个则生成对应的集合。最后我们可能会再次导出到 DataBase 的数据表集合里Tables。 范例运行环境 
操作系统 Windows Server 2019 DataCenter 
操作系统上安装 Office Word 2016 
.net版本 .netFramework4.7.1 或以上 
开发工具VS2019  C# 
配置Office DCOM 
对于安装原生Office应用我们需要对DCOM进行进一步的配置方可使用其API。 
打开控制面板、管理工具、组件服务 点击组件服务、计算机、我的电脑、DCOM配置  找到 Microsoft Word97-2003 文档应用程序 选择属性、打开标识选项卡、选择下列用户选项设置启动Word应用的用户点确定即可。 理论上设置到这里就可以了但以防万一可以继续设置启动权限选择安全选项卡、启动和激活权限如下图 关键代码 
组件库引入 核心代码 
public DataSet WordAsDataSet(string _filename) 方法传入要读取的 WORD 文件路径即可方法会遍历该WORD里的TABLES对象集合如果找到TABLE对象则按列的顺序创建字段列比如F1、F2...Fn以些类推从第二行起为记录行则根据创建的结构写入到 DataTable中。 public DataSet WordAsDataSet(string _filename){DataSet ds  new DataSet();Object Nothing  System.Reflection.Missing.Value;object filename  _filename;//创建一个名为WordApp的组件对象DateTime beforetime  DateTime.Now;Word.Application WordApp  new Word.Application();//创建一个名为WordDoc的文档对象WordApp.DisplayAlerts  Word.WdAlertLevel.wdAlertsNone;Word.Document WordDoc  WordApp.Documents.Open(ref filename, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing, ref Nothing);WordDoc.SpellingChecked  false;//关闭拼写检查WordDoc.ShowSpellingErrors  false;//关闭显示拼写错误提示框DateTime aftertime  DateTime.Now;
//遍历所有的Word里的表格并写到数据集的TABLES集合里foreach (Word.Table wTable in WordDoc.Tables){System.Data.DataTable dt  new System.Data.DataTable();for (int colPos  1; colPos  wTable.Columns.Count; colPos){DataColumn dc  new DataColumn();dc.ColumnName  F  colPos.ToString();dt.Columns.Add(dc);}for (int rowPos  1; rowPos  wTable.Rows.Count; rowPos){DataRow drNew  dt.NewRow();int columnIndex  0;foreach (Word.Cell cellObj in wTable.Rows[rowPos].Cells){drNew[columnIndex]  cellObj.Range.Text.Remove(cellObj.Range.Text.Length - 2, 2);//remove \r\acolumnIndex;}dt.Rows.Add(drNew);}ds.Tables.Add(dt);}WordDoc.Close(ref Nothing, ref Nothing, ref Nothing);//关闭WordApp组件对象WordApp.Quit(ref Nothing, ref Nothing, ref Nothing);KillProcessByStartTime(WINWORD, beforetime, aftertime);return ds;}杀掉进程 
这是一个无奈之举尝试了一些方法但某些情况下仍然无法释放掉 Word 应用进程因此根据时间点范围写了一个强制杀掉进程的方法。 
示例代码如下 
public string KillProcessByStartTime(string processName,DateTime beforetime,DateTime aftertime){Process[] ps  Process.GetProcesses();foreach (Process p in ps)  {if(p.ProcessName.ToUpper()!processName) continue;if(p.StartTime  beforetime  p.StartTime  aftertime){try{p.Kill();}catch(Exception e){return e.Message;}}}  return ;} 总结 
在实际的应用中无论是导入的文件格式还是导出的数据源都是要结合客户的需求进行的。 
在功能实现前需要约定模板文件的格式字段内容的意义、长度等。导入到 DataSet 成功后再根据业务逻辑进行后续操作再加工或直接导入到规范的数据表里如 MS SQL SERVER。 
这些代码我们提供了一些操作WORD相关的关键方法这里仅作参考欢迎大家评论指教