• C#操作Word,写数据,插入图片


    本篇介绍的是如何在C#中往word里面写入数据。

    如何在线的操作文档:  c#在线操作文档

    关于Aspose.Word控件的介绍,请戳→ 介绍

    首先需要去下载这个dll文件,然后引用到你的项目当中。地址→查看下载地址

    附一个辅助类来操作此dll

    利用书签把数据写入到Word当中

    文本和图片

    第一步,你先要去准备Word模板(新建一个Word然后复制到项目中)

    第二步,在Word模板中插入书签

    在word中准备你需要把数据填写到那个位子,(Text:我所传进来的文本所在位子   Img:传进来的图片所在位子)

      然后我们就可以在word中插入书签了

     

    插入Img标签完成后,定位在img把img删除,我们只是需要定位。

    我们的页面

     <div>写文字</div>    
         <label for="txtText">你想写的数据:</label> <input type="text" name="txtText" runat="server" id="txtText" />
           <hr />
         <div>插入图片</div>
           
          <label>上传你的图片:</label>
            <asp:FileUpload ID="fuUpload" runat="server" />
             <br />

    后台

     

     protected void btnSubmit_Click(object sender, EventArgs e)
        {
            if (fuUpload.HasFile)
            {
                string fileName = "";
                string SavaPath = Server.MapPath("~/img/");
                string ext = Path.GetExtension(fuUpload.FileName);
                List<string> extList = new List<string>() { ".jpg", ".png", ".jpeg", ".gif", ".bmp" };
                if (extList.Any(x => x == ext))
                {
                    string random = Guid.NewGuid().ToString().Substring(0, 4);
                    fileName = random + ext;
                    fuUpload.SaveAs(SavaPath + fileName); //图片保存到项目中
                  //写入word
                    string FilePath = "WriteWord+" + new Random().Next(0, 99) + ".doc";
                    System.IO.File.Copy(Server.MapPath("~/WriteWord.doc"), FilePath, true);  //复制
                    System.IO.File.SetAttributes(FilePath, System.IO.FileAttributes.Normal);//设置文件属性 只读 还是可修改
                  
    Document doc = new Document(FilePath); //这段代码可以封装,用的时候调用就行 //if (doc.Range.Bookmarks["text"] != null) //{ // Bookmark mark = doc.Range.Bookmarks["text"]; // mark.Text=txtText.Value.Trim(); //} BookAddMark(doc, "text", txtText.Value.Trim()); //把文本写入到指定标签的位子 DocumentBuilder builder = new DocumentBuilder(doc); //builder里面有个write方法 builder.MoveToBookmark("img"); //找到你图片插入的位子,定位到这里 //builder.InsertHtml("<img scr='~/img/"+ fileName + "'>"); 这样word里面是读不出图片的 //InserImage()有很多重载它需要什么你就给什么进去 // builder.InsertImage(Server.MapPath("~/img/" + fileName)); //第一种,直接给路径,当设置不了宽高 //图片的路径要找对 FileStream fs = new FileStream(Server.MapPath("~/img/" + fileName), FileMode.Open); byte[] imgByte = new byte[fs.Length]; fs.Read(imgByte, 0, imgByte.Length); builder.InsertImage(imgByte, 200, 200); //以字节组的方式写入word fs.Close(); builder = null; doc.Save(Server.MapPath("~/Word/" + FilePath)); //保存word文档 } else { Page.ClientScript.RegisterStartupScript(Page.ClientScript.GetType(), "myscript", "<script>alert('上传的文件类型不支持');</script>"); } } else { Page.ClientScript.RegisterStartupScript(Page.ClientScript.GetType(), "myscript", "<script>alert('请选择你所需要上传的文件');</script>"); } }
      public void BookAddMark(Document doc, string parama, string paramb)
        {
            if (doc.Range.Bookmarks[parama] != null)
            {
                Bookmark mark = doc.Range.Bookmarks[parama];
                mark.Text = paramb;
            }
        }

      word里面生成的数据如下

    如果需要写一个集合里面的数据,用书签就不是很方法,因为我们不能控制集合的数量,拿我们就会用到上面说的wirte方法,配合表格插入数据

    我们在word里面生成一个表格

    例:我们需要生成很多数据

     我们可以先把模板表格确定好

    这就是我们的模板

    再来看我们是如何写数据

      protected void btnWriteData_Click(object sender, EventArgs e)
        {
            string FilePath = "WriteWord+" + new Random().Next(0, 99) + ".doc";
            System.IO.File.Copy(Server.MapPath("~/WriteWord.doc"), FilePath, true);  //复制
            System.IO.File.SetAttributes(FilePath, System.IO.FileAttributes.Normal);//设置文件属性 只读 还是可修改
            Document doc = new Document(FilePath);
         
            List<Person> perList = new List<Person>() {
               new Person(){ Name="张三", Age="18", sex=""},
               new Person(){ Name="李四", Age="18", sex=""},
               new Person(){ Name="王五", Age="18", sex=""},
               new Person(){ Name="赵六", Age="18", sex=""},
               new Person(){ Name="……", Age="……", sex="……"}
            };
    
            DocumentBuilder builder = new DocumentBuilder(doc);
            NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); //拿到所有表格
            Aspose.Words.Tables.Table table = allTables[0] as Aspose.Words.Tables.Table; //拿到第1个表格
            foreach (Person item in perList)
            {
                var row = table.Rows[table.Rows.Count - 1].Clone(true);  //复制最后一行
                table.Rows.Insert(table.Rows.Count - 1, row);  //插入到这行的上面
                builder.MoveToCell(0, table.Rows.Count - 2, 0, 0);   //移动单元格到第几行第几列
                builder.Write(item.Name);   //写入数据
                builder.MoveToCell(0, table.Rows.Count - 2, 1, 0);
                builder.Write(item.Age);
                builder.MoveToCell(0, table.Rows.Count - 2, 2, 0);
                builder.Write(item.sex);           
            }
            builder = null;
            doc.Save(Server.MapPath("~/Word/" + FilePath));
        }
        private class Person
        {
            public string Name { get; set; }
            public string Age { get; set; }
            public string sex { get; set; }
        }

    生成的Word里面的表格如下:

     

  • 相关阅读:
    echo和重定向
    grep命令
    重温JSP学习笔记--JSP动作标签
    重温JSP学习笔记--El表达式
    重温JSP学习笔记--El函数库
    重温JSP学习笔记--JSTL标签库
    重温JSP学习笔记
    Android 用 camera2 API 自定义相机
    从零开始用 Flask 搭建一个网站(一)
    从零开始用 Flask 搭建一个网站(二)
  • 原文地址:https://www.cnblogs.com/Sea1ee/p/6651528.html
Copyright © 2020-2023  润新知