求教Aspose.Words导出dt到word的问题

jazm 发布于 2014/10/31 09:32
阅读 896
收藏 1

已解决:单挑数据导入到一个word文档,导出文字和图片成功,执行Main();方法导出dt到word

待解决:多条数据(文字,图片的导入到一个word文档里面)从dt导入到word;已发现的错误提示“已添加了具有相同键的项”

Aspose.Words.dll  2.docx

原理:基于word模板 。通过Dt导入到word,其中使用替换文档中的  &关键字&来实现。

以下为完整代码片段

private void Main()
        {
            var dic = new Dictionary<string, string>();
            Document doc = new Document(Server.MapPath(@"2.doc"));//模板文件路径
            string StrID = Request.Form["YX_CH"];//这里是获取前台GridView项目的值,穿给下面的dt作为查询条件之一,另外的nodeid是节点编号
            if (StrID == null)
            {
                WebMsgBox.Show("您还未选择任何数据!");
            }
            DataTable dt = bArticle.GetList(" nodeid='" + Request.QueryString["nodeid"] + "' and ArticleID in (" + StrID + ")").Tables[0];
            //if (dt.Rows.Count > 0)
            //{
            //    for (int i = 0; i < dt.Rows.Count; i++)
            //    {
            //以上4行注释的为for循环(开始)

                    dic.Add("标题", dt.Rows[0]["art_title"].ToString()); //错误开始位置“已添加了具有相同键的项”开始的第一行,浏览器所指位置
                    dic.Add("日期", dt.Rows[0]["art_pubdate"].ToString());
                    dic.Add("图片", Server.MapPath(@"/UploadFiles/Images/") + dt.Rows[0]["art_img"].ToString());

                    //使用特殊字符串替换
                    doc = new Document(Server.MapPath(@"2.doc"));
                    foreach (var key in dic.Keys)
                    {
                        if (key != "图片")
                        {
                            var repStr = string.Format("&{0}&", key);
                            doc.Range.Replace(repStr, dic[key], false, false);
                        }
                        else
                        {
                            Regex reg = new Regex("&图片&");
                            doc.Range.Replace(reg, new ReplaceAndInsertImage(Server.MapPath(@"/UploadFiles/Images/") + dt.Rows[i]["art_img"].ToString()), false);
                        }
                    }



            //    }
            //}
             //以上4行注释的为for循环(结束)
        doc.Save(Server.MapPath(@"2ks.doc"));//保存导出的文件 Response.End(); }
        //插入图片的一个方法
        public class ReplaceAndInsertImage : IReplacingCallback
        {
            /// <summary>
            /// 需要插入的图片路径
            /// </summary>
            public string url { get; set; }

            public ReplaceAndInsertImage(string url)
            {
                this.url = url;
            }

            public ReplaceAction Replacing(ReplacingArgs e)
            {
                //获取当前节点
                var node = e.MatchNode;
                //获取当前文档
                Document doc = node.Document as Document;
                DocumentBuilder builder = new DocumentBuilder(doc);
                //将光标移动到指定节点
                builder.MoveTo(node);
                //插入图片
                builder.InsertImage(url);
                return ReplaceAction.Replace;
            }
        }




加载中
返回顶部
顶部