zoukankan      html  css  js  c++  java
  • C#操作word模板插入文字、图片及表格详细步骤

    c#操作word模板插入文字、图片及表格 

    1.建立word模板文件 person.dot
    用书签 标示相关字段的填充位置

    2.建立web应用程序 加入Microsoft.Office.Interop.Word引用
    具体添加引用请参看
    http://www.microsoft.com/china/msdn/library/office/office/OfficePrIntopAssFAQ.mspx?mfr=true

    3.相关示例代码

    protected void CreateReport_Click(object sender, EventArgs e)
            {
                Microsoft.Office.Interop.Word.Application appWord = null;//应用程序
                Microsoft.Office.Interop.Word.DocumentClass doc = null;//文档
                try
                {
                    appWord = new Microsoft.Office.Interop.Word.Application();
                    appWord.Visible = false;
                    object objTrue = true;
                    object objFalse = false;
                    object objTemplate = Server.MapPath("person.dot");//模板路径
                    object objDocType = WdDocumentType.wdTypeDocument;
                    doc = (DocumentClass)appWord.Documents.Add(ref objTemplate, ref objFalse, ref objDocType,ref objTrue);
                    //第一步生成word文档
                    //定义书签变量
                    object obDD_Name = "bm_Name";//姓 名
                    object obDD_Sex = "bm_Sex";//性 别
                    object obDD_Birthday = "bm_Birthday"; //出生年月
                    object obpic="pic";
                    object obtable = "obtable";
                    object Nothing = System.Reflection.Missing.Value;
                    //InlineShape shape = appWord.Selection.InlineShapes.AddPicture(@"F:Picture\_DSC1602.JPG", ref Nothing, ref Nothing, ref Nothing);
                    //第二步 读取数据,填充数据集
                    System.Data.DataTable dt = new DataTable();
                    dt.Columns.Add("p_Name");
                    dt.Columns.Add("p_Sex");
                    dt.Columns.Add("p_Birthday");
                    DataRow dr = dt.NewRow();
                    dr["p_Name"] = "张三";
                    dr["p_Sex"] = "";
                    dr["p_Birthday"] = "1980-01-01";
                    dt.Rows.Add(dr);
    
                    //第三步 给书签赋值
                    //给书签赋值
                    doc.Bookmarks.get_Item(ref obDD_Name).Range.Text = dt.Rows[0]["p_Name"].ToString(); //姓 名
                    doc.Bookmarks.get_Item(ref obDD_Sex).Range.Text = dt.Rows[0]["p_Sex"].ToString();//性 别
                    doc.Bookmarks.get_Item(ref obDD_Birthday).Range.Text = dt.Rows[0]["p_Birthday"].ToString();//年龄
                    doc.Bookmarks.get_Item(ref obpic).Range.InlineShapes.AddPicture(@"F:Picture\_DSC1602.JPG", ref Nothing, ref Nothing, ref Nothing);
    
                    
                    //文档中插入表格
                    //doc.Bookmarks.get_Item(ref obtable).Range.Tables.Add(doc.Bookmarks.get_Item(ref obtable).Range, 12, 3, ref Nothing, ref Nothing);
                    Microsoft.Office.Interop.Word.Table newTable = doc.Tables.Add(doc.Bookmarks.get_Item(ref obtable).Range, 12, 3, ref Nothing, ref Nothing);
                    newTable.Borders.OutsideLineStyle = WdLineStyle.wdLineStyleSingle;
                    newTable.Borders.InsideLineStyle = WdLineStyle.wdLineStyleSingle;
                    //给文档的最后一行再添加内容
                    doc.Paragraphs.Last.Range.Text = "";
                    
                    //第四步 生成word
                    object filename = Server.MapPath("~") + "\BG\" + dt.Rows[0]["p_Name"].ToString() + ".doc";
                    object miss = System.Reflection.Missing.Value;
                    doc.SaveAs(ref filename, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss, ref miss);
                    object missingValue = Type.Missing;
                    object doNotSaveChanges = WdSaveOptions.wdDoNotSaveChanges;
                    doc.Close(ref doNotSaveChanges, ref missingValue, ref missingValue);
                    appWord.Application.Quit(ref miss, ref miss, ref miss);
                    doc = null;
                    appWord = null;
    
                }
                catch (System.Exception ex)
                {
                    //捕捉异常,如果出现异常则清空实例,退出word,同时释放资源
                    string aa = ex.ToString();
                    object miss = System.Reflection.Missing.Value;
                    object missingValue = Type.Missing;
                    object doNotSaveChanges = WdSaveOptions.wdDoNotSaveChanges;
                    doc.Close(ref doNotSaveChanges, ref missingValue, ref missingValue);
                    appWord.Application.Quit(ref miss, ref miss, ref miss);
                    doc = null;
                    appWord = null;
                }
            }

    -----
    以上代码在运行时 如遭遇80070005错误

    解决方法一:
    控制面板-》管理工具-》组件服务-》计算机-》我的电脑-》DCom配置-》找到Microsoft Word文档
    之后
    单击属性打开此应用程序的属性对话框。 
    2. 单击标识选项卡,然后选择交互式用户。 
    3.单击"安全"选项卡,分别在"启动和激活权限""访问权限"组中选中"自定义",然后
    自定义->编辑->添加ASP.NET账户和IUSER_计算机名
    4. 确保允许每个用户访问,然后单击确定。 
    5. 单击确定关闭 DCOMCNFG

    解决方法二:
    如果上述方法不能解决问题,就应该是权限问题,请尝试用下面的方法:
    web.config中使用身份模拟,<system.web>节中加入 <identity impersonate="true" userName="你的用户名

    " password="密码"/>
    </system.web>

    参考文档:http://wenku.baidu.com/view/fc8aa56fb84ae45c3b358c98.html

    附:图片的详细操作

    object filename = @"C:InetpubwwwrootTestWebApp est.doc";//文件名 
    Word.Application a = new Word.ApplicationClass();//建立一个Word程序对像 
    object Nothing = System.Reflection.Missing.Value;//空值 
    Word.Document b = a.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);//建立一个Word文档对像 

    //其实这步就是执行了这个宏 
    InlineShape shape = a.Selection.InlineShapes.AddPicture(@"C:Documents and SettingsAdministrator桌面2003121512223366481.jpg",ref Nothing,ref Nothing,ref Nothing); 

    shape.Height = InchesToPoints(0.5) 
    shape.Width = InchesToPoints(0.5) 

    //Selection.InlineShapes.AddPicture FileName:= "C:Documents and SettingsAdministrator桌面2003121512223366481.bmp", LinkToFile:=False, SaveWithDocument:=True End Sub b.Save();//保存 
    b.Close(ref Nothing,ref Nothing,ref Nothing);//关闭Word文档 
    a.Quit(ref Nothing,ref Nothing,ref Nothing);//退出Word程序

     

    c# 向word中指定的书签写数据

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    
    using System.Data;
    using System.Configuration;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    //using System.Web.UI.HTMLControls;
    //using Microsoft.office;
    using Microsoft.Office.Core;
    using Microsoft.Office.Interop;
    using Microsoft.Office.Interop.Word;
    
    
    namespace common
    {
        public class WriteInWord
        {
         
            ApplicationClass app = null;//定义应用程序对象        
            Document doc = null;        //定义word文档对象     
            Object missing = System.Reflection.Missing.Value;//定义空变量         Object isReadOnly = false;
            public  void OpenDocument(string parFilePath)
            {
    
                object filePath = parFilePath;//文档路径  
    
                app = new ApplicationClass();
    
                //打开文档  
    
                doc = app.Documents.Open(ref filePath, ref missing, ref missing, ref missing, ref missing,
    
                           ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
    
                           ref missing, ref missing, ref missing, ref missing);
    
                doc.Activate();//激活文档  
    
            }
    
    
            /// <summary>  
    
            /// 向word文档写入数据  
    
            /// </summary>  
    
            /// <param name="parLableName">域标签</param>  
    
            /// <param name="parFillName">写入域中的内容</param>  
    
            public  void WriteIntoDocument(string parLableName, string parFillName)
            {
    
                object lableName = parLableName;
    
                Bookmark bm = doc.Bookmarks.get_Item(ref lableName);//返回标签  
    
                bm.Range.Text = parFillName;//设置域标签的内容  
    
            }
            /// <summary>  
    
            /// 保存并关闭  
    
            /// </summary>  
    
            /// <param name="parSaveDocPath">文档另存为的路径</param>  
    
            public  void SaveAndClose(string parSaveDocPath)
            {
    
                object savePath = parSaveDocPath;//文档另存为的路径  
    
                Object saveChanges = app.Options.BackgroundSave;//关闭doc文档不提示保存  
    
                //文档另存为  
    
                doc.SaveAs(ref savePath, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing,
    
                                ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing);
    
                doc.Close(ref saveChanges, ref missing, ref missing);//关闭文档  
    
                app.Quit(ref missing, ref missing, ref missing);     //关闭应用程序  
    
            }
    
        }

     

     

  • 相关阅读:
    【开发记录】TSINGSEE青犀视频平台开发Visual Studio 2017自建WebRTC中peerconnection_client程序报错无法解析的外部符号
    【开发记录】网络穿透/端口映射EasyNTS视频网关设备支持H265编码视频流和aac音频流的拉转推功能
    【开发记录】EasyRTC企业远程视频通话系统基于WebRTC编译mediasoupclient库报错没有生成”object”文件解决方法
    端口映射/网络穿透设备EasyNTS上云网关如何配置拉流转推到EasyDSS视频直播点播平台?
    【操作说明】新版网络穿透+视频拉转推EasyNTS上云网关管理平台如何进行远程设备管理?
    【BUG修复】TSINGSEE青犀视频云边端智能分析平台EasyNVR/EasyDSS/EasyGBS在chrome登陆无法获取用户信息
    【开发记录】网络穿透/端口映射/动态组网/视频推流EasyNTS上云网关平台tab栏折叠功能开发
    【产品升级】网络穿透/远程运维/动态组网EasyNTS上云网关新增RTMP视频推流上云功能
    【操作说明】新版网络穿透/端口映射/视频拉转推EasyNTS上云网关管理平台如何远程接入EasyNTS上云网关?
    TSINGSEE青犀视频云边端架构视频智能分析平台低延迟直播可以用webrtc实现吗?
  • 原文地址:https://www.cnblogs.com/elves/p/3624115.html
Copyright © 2011-2022 走看看