操作的前提:
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
至此前提配置就完成了
编程部分:
添加引用
using Microsoft.Office.Core; using Microsoft.Office.Interop; using Microsoft.Office.Interop.Word;
object oReadOnly = true; object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = false;//只是为了方便观察,为true时,会显示一个打开的Word object fileName = System.Web.HttpContext.Current.Server.MapPath("~/Resultstemplate.doc").ToString(); oDoc = oWord.Documents.Add(ref fileName, ref oMissing, ref oMissing, ref oMissing);关闭和Word的连接
oDoc.Close(ref missing, ref missing, ref missing); oWord.Quit(ref missing, ref missing, ref missing);对Word中的表格的数据读取,并在网页中简单显示
protected void PageFucword() { //object oMissing = System.Reflection.Missing.Value; //Word._Application oWord; //Word._Document oDoc; //oWord = new Word.Application(); //oWord.Visible = true; // //oDoc = oWord.Documents.Add(ref fileName, ref oMissing,ref oMissing, ref oMissing); object oReadOnly = true; object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); oWord.Visible = false;//只是为了方便观察 object fileName = System.Web.HttpContext.Current.Server.MapPath("~/Resultstemplate.doc").ToString(); oDoc = oWord.Documents.Add(ref fileName, 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[tablePos]; string tableMessage = string.Format("第{0}/{1}个表:\n", tablePos, oDoc.Tables.Count); // int i = 0; // foreach (Word.InlineShape shape in nowTable.Cell(28, 1).Range.InlineShapes) //{ //直接读取图片 //if (shape.Type == Word.WdInlineShapeType.wdInlineShapePicture) //{ // //获取Word中的图片 // byte[] img = (byte[])shape.Range.EnhMetaFileBits; // Bitmap bmp = new Bitmap(new System.IO.MemoryStream(img)); // bmp.Save("c:\\pic" + i.ToString() + ".jpg "); //} //i++; //从剪切板上读取图片,还无法实现 //if (shape.Type == Word.WdInlineShapeType.wdInlineShapePicture) //{ // shape.Select(); // oWord.Selection.Copy(); // Image image = Clipboard.GetImage(); // Bitmap bitmap = new Bitmap(image); // bitmap.Save("c:\\pic " + i.ToString() + ".jpg "); // i++; //} // } Table a = new Table(); a.Attributes["border"] = "1"; a.Attributes["width"] = "100%"; for (int rowPos = 1; rowPos <= nowTable.Rows.Count; rowPos++) { TableRow rw = new TableRow(); for (int columPos = 1; columPos <= nowTable.Rows[rowPos].Cells.Count; columPos++) { TableCell tc = new TableCell(); if (nowTable.Columns.Count > nowTable.Rows[rowPos].Cells.Count) { tc.Attributes["colspan"] = nowTable.Columns.Count.ToString(); tc.Attributes["align"] = "center"; } string cell = nowTable.Cell(rowPos, columPos).Range.Text; if (cell.Contains("")) { int i = 0; foreach (Word.InlineShape shape in nowTable.Cell(rowPos, columPos).Range.InlineShapes) { //直接读取图片 if (shape.Type == Word.WdInlineShapeType.wdInlineShapePicture) { System.Web.UI.WebControls.Image imgct = new System.Web.UI.WebControls.Image(); //获取Word中的图片 byte[] img = (byte[])shape.Range.EnhMetaFileBits; Bitmap bmp = new Bitmap(new System.IO.MemoryStream(img)); string url = System.Web.HttpContext.Current.Server.MapPath("~/image/").ToString() + "pic" + i.ToString() + ".jpg ";//图片保存路径 bmp.Save(url); imgct.ImageUrl = "~/image/" + "pic" + i.ToString() + ".jpg "; imgct.Attributes["width"] = "250px"; tc.Controls.Add(imgct); tc.Wrap = true; } i++; } } else { cell = cell.Remove(cell.Length - 2, 2); if (cell == "") cell = "空"; tc.Text = cell; //tableMessage += cell; //tableMessage = tableMessage.Remove(tableMessage.Length - 2, 2);//remove \r\a //tableMessage += "\t"; } rw.Cells.Add(tc); } //tableMessage += "\n"; a.Rows.Add(rw); } //Label1.Text = tableMessage; Page.Controls.Add(a); } }
通过标签Bookmark来读取数据
Bookmark bk;
bk.Range.Cells[1];//该值得到书签所在的单元格
public bool FruitWordToSQL() { object oReadOnly = true; object oMissing = System.Reflection.Missing.Value; Word._Application oWord; Word._Document oDoc; oWord = new Word.Application(); //oWord.Visible = false;//只是为了方便观察 object fileName = System.Web.HttpContext.Current.Server.MapPath("~/Resultstemplate.doc").ToString(); oDoc = oWord.Documents.Add(ref fileName, ref oMissing, ref oMissing, ref oMissing); System.Collections.IEnumerator enu = oWord.ActiveDocument.Bookmarks.GetEnumerator(); Dictionary<string, string> map = new Dictionary<string, string>();//数据项(项名,项值) while (enu.MoveNext()) { Word.Bookmark bk = (Word.Bookmark)enu.Current; string text = bk.Name.ToString(); string value=bk.Range.Cells[1].Range.Text;//书签所在单元格的内容 value = value.Remove(value.Length - 2);//去除单元格后的标记(/r/n) map.Add(text,value); } //对word的操作结束,关闭对word的控制 oDoc.Close(ref oMissing, ref oMissing, ref oMissing); oWord.Quit(ref oMissing, ref oMissing, ref oMissing); //检验数据的格式及正确性 KeyValuePair<bool,string> check=CheckData(map); if (check.Key == false) { //check.Value中所含的值为数据检验不符合标准的第一个数据的值 return false; } //map中的数据插入到数据库的Fruit表中 bool Inserted=InsertData(map); if (Inserted == false)//插入失败 { //插入失败后的操作 return false; } return true; }