操作的前提:

1.要保证机器本身要安装OFFICE.

有时安装了Office,但是不能找到Microsoft Word 11.0(或者更高的版本) Object Library。那可能是因为在安装office的时候没有选在。net可编程性支持

此时只需要重新打开office安装文件-》添加或删除功能-》下一步-》在Microsoft Word下点选。net可编程性支持

以Office 2003为例

2.用VS打开一个asp.net网站,右键单击Bin ->添加引用,在COM中选择Microsoft Word 11.0(或者更高的版本) Object Library。点击确定后会在Bin文件夹中出现

Microsoft.Office.Interop.Word.dll

或者Interop.Word.dll

如果没有Bin文件夹,就右键根目录,选择添加ASP.NET文件->Bin

至此前提配置就完成了

编程部分:

添加引用

  1. using Microsoft.Office.Core;
  2. using Microsoft.Office.Interop;
  3. using Microsoft.Office.Interop.Word;

编程打开Word文件,和Word文件夹建立连接

  1. object oReadOnly = true;
  2. object oMissing = System.Reflection.Missing.Value;
  3. Word._Application oWord;
  4. Word._Document oDoc;
  5. oWord = new Word.Application();
  6. oWord.Visible = false;//只是为了方便观察,为true时,会显示一个打开的Word
  7. object fileName = System.Web.HttpContext.Current.Server.MapPath("~/Resultstemplate.doc").ToString();
  8. oDoc = oWord.Documents.Add(ref fileName, ref oMissing, ref oMissing, ref oMissing);

关闭和Word的连接

  1. oDoc.Close(ref missing, ref missing, ref missing);
  2. oWord.Quit(ref missing, ref missing, ref missing);

对Word中的表格的数据读取,并在网页中简单显示

  1. protected void PageFucword()
  2. {
  3. //object oMissing = System.Reflection.Missing.Value;
  4. //Word._Application oWord;
  5. //Word._Document oDoc;
  6. //oWord = new Word.Application();
  7. //oWord.Visible = true;
  8. //
  9. //oDoc = oWord.Documents.Add(ref fileName, ref oMissing,ref oMissing, ref oMissing);
  10. object oReadOnly = true;
  11. object oMissing = System.Reflection.Missing.Value;
  12. Word._Application oWord;
  13. Word._Document oDoc;
  14. oWord = new Word.Application();
  15. oWord.Visible = false;//只是为了方便观察
  16. object fileName = System.Web.HttpContext.Current.Server.MapPath("~/Resultstemplate.doc").ToString();
  17. oDoc = oWord.Documents.Add(ref fileName, ref oMissing, ref oMissing, ref oMissing);
  18. //MessageBox.Show(oDoc.Tables.Count.ToString());
  19. for (int tablePos = 1; tablePos <= oDoc.Tables.Count; tablePos++)
  20. {
  21. Word.Table nowTable = oDoc.Tables[tablePos];
  22. string tableMessage = string.Format("第{0}/{1}个表:\n", tablePos, oDoc.Tables.Count);
  23. // int i = 0;
  24. // foreach (Word.InlineShape shape in nowTable.Cell(28, 1).Range.InlineShapes)
  25. //{
  26. //直接读取图片
  27. //if (shape.Type == Word.WdInlineShapeType.wdInlineShapePicture)
  28. //{
  29. //    //获取Word中的图片
  30. //    byte[] img = (byte[])shape.Range.EnhMetaFileBits;
  31. //    Bitmap bmp = new Bitmap(new System.IO.MemoryStream(img));
  32. //    bmp.Save("c:\\pic" + i.ToString() + ".jpg ");
  33. //}
  34. //i++;
  35. //从剪切板上读取图片,还无法实现
  36. //if (shape.Type == Word.WdInlineShapeType.wdInlineShapePicture)
  37. //{
  38. //    shape.Select();
  39. //    oWord.Selection.Copy();
  40. //    Image image = Clipboard.GetImage();
  41. //    Bitmap bitmap = new Bitmap(image);
  42. //    bitmap.Save("c:\\pic " + i.ToString() + ".jpg ");
  43. //    i++;
  44. //}
  45. // }
  46. Table a = new Table();
  47. a.Attributes["border"] = "1";
  48. a.Attributes["width"] = "100%";
  49. for (int rowPos = 1; rowPos <= nowTable.Rows.Count; rowPos++)
  50. {
  51. TableRow rw = new TableRow();
  52. for (int columPos = 1; columPos <= nowTable.Rows[rowPos].Cells.Count; columPos++)
  53. {
  54. TableCell tc = new TableCell();
  55. if (nowTable.Columns.Count > nowTable.Rows[rowPos].Cells.Count)
  56. {
  57. tc.Attributes["colspan"] = nowTable.Columns.Count.ToString();
  58. tc.Attributes["align"] = "center";
  59. }
  60. string cell = nowTable.Cell(rowPos, columPos).Range.Text;
  61. if (cell.Contains(""))
  62. {
  63. int i = 0;
  64. foreach (Word.InlineShape shape in nowTable.Cell(rowPos, columPos).Range.InlineShapes)
  65. {
  66. //直接读取图片
  67. if (shape.Type == Word.WdInlineShapeType.wdInlineShapePicture)
  68. {
  69. System.Web.UI.WebControls.Image imgct = new System.Web.UI.WebControls.Image();
  70. //获取Word中的图片
  71. byte[] img = (byte[])shape.Range.EnhMetaFileBits;
  72. Bitmap bmp = new Bitmap(new System.IO.MemoryStream(img));
  73. string url = System.Web.HttpContext.Current.Server.MapPath("~/image/").ToString() + "pic" + i.ToString() + ".jpg ";//图片保存路径
  74. bmp.Save(url);
  75. imgct.ImageUrl = "~/image/" + "pic" + i.ToString() + ".jpg ";
  76. imgct.Attributes["width"] = "250px";
  77. tc.Controls.Add(imgct);
  78. tc.Wrap = true;
  79. }
  80. i++;
  81. }
  82. }
  83. else
  84. {
  85. cell = cell.Remove(cell.Length - 2, 2);
  86. if (cell == "") cell = "空";
  87. tc.Text = cell;
  88. //tableMessage += cell;
  89. //tableMessage = tableMessage.Remove(tableMessage.Length - 2, 2);//remove \r\a
  90. //tableMessage += "\t";
  91. }
  92. rw.Cells.Add(tc);
  93. }
  94. //tableMessage += "\n";
  95. a.Rows.Add(rw);
  96. }
  97. //Label1.Text = tableMessage;
  98. Page.Controls.Add(a);
  99. }
  100. }

通过标签Bookmark来读取数据

Bookmark bk;

bk.Range.Cells[1];//该值得到书签所在的单元格

    1. public bool FruitWordToSQL()
    2. {
    3. object oReadOnly = true;
    4. object oMissing = System.Reflection.Missing.Value;
    5. Word._Application oWord;
    6. Word._Document oDoc;
    7. oWord = new Word.Application();
    8. //oWord.Visible = false;//只是为了方便观察
    9. object fileName = System.Web.HttpContext.Current.Server.MapPath("~/Resultstemplate.doc").ToString();
    10. oDoc = oWord.Documents.Add(ref fileName, ref oMissing, ref oMissing, ref oMissing);
    11. System.Collections.IEnumerator enu = oWord.ActiveDocument.Bookmarks.GetEnumerator();
    12. Dictionary<string, string> map = new Dictionary<string, string>();//数据项(项名,项值)
    13. while (enu.MoveNext())
    14. {
    15. Word.Bookmark bk = (Word.Bookmark)enu.Current;
    16. string text = bk.Name.ToString();
    17. string value=bk.Range.Cells[1].Range.Text;//书签所在单元格的内容
    18. value = value.Remove(value.Length - 2);//去除单元格后的标记(/r/n)
    19. map.Add(text,value);
    20. }
    21. //对word的操作结束,关闭对word的控制
    22. oDoc.Close(ref oMissing, ref oMissing, ref oMissing);
    23. oWord.Quit(ref oMissing, ref oMissing, ref oMissing);
    24. //检验数据的格式及正确性
    25. KeyValuePair<bool,string> check=CheckData(map);
    26. if (check.Key == false)
    27. {
    28. //check.Value中所含的值为数据检验不符合标准的第一个数据的值
    29. return false;
    30. }
    31. //map中的数据插入到数据库的Fruit表中
    32. bool Inserted=InsertData(map);
    33. if (Inserted == false)//插入失败
    34. {
    35. //插入失败后的操作
    36. return false;
    37. }
    38. return true;
    39. }

C# asp.net 操作Word的前提配置和简单的方法的更多相关文章

  1. Asp.net操作Word文档,原来这么简单啊!

    引用Word对象库文件  具体做法是打开菜单栏中的项目>添加引用>浏览,在打开的“选择组件”对话框中找到MSWORD.OLB后按确定即可引入此对象库文件,vs.net将会自动将库文件转化为 ...

  2. asp.net操作word的表格

    近日开发中用户要求实现导出数据为Word,本来想使用html保存为word的实现,但因用户要求样式很高,使用html不好控制,并且导出中包括图片,使用页面导出时图片还是一个路径,不能把图片包括在wor ...

  3. ASP.NET操作Word的IIS权限配置

    ASP.NET账号在默认情况下是没有权限操作Microsoft Office对象的,如果不进行权限的配置,代码会抛出类似以下的异常: 检索 COM 类工厂中 CLSID 为 {00024500-000 ...

  4. asp.net 操作word 权限

    1.先安装office 2.在“DCOM配置”中,为IIS账号配置操作Word(其他Office对象也一样)的权限: 开始>运行>输入  dcomcnfg  >确定 具体操作:“组件 ...

  5. Asp.Net 操作word 第二篇[推荐]

    引言:前段时间有项目要用c#生成Word格式的计算报告,通过网络查找到很多内容,但是都很凌乱,于是自己决定将具体的步骤总结整理出来,以便于更好的交流和以后相似问题可以迅速的解决! 现通过具体的示例演示 ...

  6. asp.net 操作word

    参考一:点击这里 参考二:点击这里 参考三:点击这里 using System; using System.Web.Security; using Microsoft.Office.Interop.W ...

  7. asp.net操作word 配置在IIS上出现的问题

    异常: 检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败,原因是出现以下错误: 80070005 拒绝访问. (异常来自 ...

  8. 关于linux asp.net MVC网站中 httpHandlers配置无效的处理方法

    近期有Jexus用户反映,在Linux ASP.NET MVC网站的Web.config中添加 httpHandlers 配置用于处理自定义类型,但是在运行中并没有产生预期的效果,服务器返回了404( ...

  9. asp.net操作GridView添删改查的两种方法 及 光棒效果

    这部份小内容很想写下来了,因为是基础中的基础,但是近来用的比较少,又温习了一篇,发现有点陌生了,所以,还是写一下吧. 方法一:使用Gridview本身自带的事件处理,代码如下(注意:每次操作完都得重新 ...

随机推荐

  1. JSP九大内置对象和四个作用域

    JSP九大内置对象和四个作用域 在学习JSP的时候,首先就要先了解JSP的内置对象,什么是内置对象呢?内置对象也叫隐含对象,就是不需要预先声明就可以在脚本代码和表达式中随意使用.而这样的内置对象在JS ...

  2. Linux之最最最最基础(包括在虚拟机中安装linux系统)

    这里是以CentOS 6.5  64bit为例(学习用这个,Kali神马的有兴趣自己研究(这个系统是玩渗透用的)) 一 ---->配置Vmware Workstation     自定义--选择 ...

  3. Windows下Wamp装不上Memcache扩展

    windows下wamp装不上memcache扩展2015.03.20 No Comments 1,243 views用的是WAMP集成包,PHP版本5.5.12http://windows.php. ...

  4. 【原创】开机出现grub rescue,修复办法

    出现这种问题 一般在于进行了磁盘分区(GHOST备份时也会造成)导致grub引导文件找不到.我们只要让它找到引导文件就好了. 此时屏幕上提示grub resume>  我们先输入set看下现在g ...

  5. 解决Ubuntu和Windows的文件乱码问题(转载)

    解决Ubuntu和Windows的文件乱码问题(debian也通用) 1.转换文件内容编码   Windows下天生的纯文本文件,其中文编码为GBK,在Ubuntu下显示为乱码,可以使用iconv命令 ...

  6. 鸟哥私房菜笔记:Iptables:数据包过滤软件

    数据包进入流程:规则顺序的重要性 iptables利用的是数据包过滤机制,所以它会分析数据包的包头数据.根据包头数据与定义的规则来决定该数据包是否可以进入主机或者是被丢弃.也就是说,根据数据包的分析资 ...

  7. openwrt虚拟机的network unreachable

    之前在hyper-v中装了openwrt的ATTITUDE ADJUSTMENT (12.09, r36088)这个最新版本 我之前的文章有提到怎么安装 link 但是发现用opkg update不能 ...

  8. 教了几天C语言 C语言竞赛------家长们你们为什么这么急!!

    由于工大某些传统,暑假放一个月,想想有很多事情要做,而且回去也是热着,倒不如不回家了,在哈尔滨正好避暑,又能轻轻松松的吧事情做了,暑假还能有个好的休息,这样想着,最终决定不回去了.其实不回去的话,就会 ...

  9. Sublime Text3注册码

    这是一个注册码-– BEGIN LICENSE -– Michael Barnes Single User License EA7E-821385 8A353C41 872A0D5C DF9B2950 ...

  10. 【Druid】 阿里巴巴推出的国产数据库连接池com.alibaba.druid.pool.DruidDataSource

    阿里巴巴推出的国产数据库连接池,据网上测试对比,比目前的DBCP或C3P0数据库连接池性能更好   简单使用介绍 Druid与其他数据库连接池使用方法基本一样(与DBCP非常相似),将数据库的连接信息 ...