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

摘要:
本文介绍如何用C#将数据写入Word。住址→ 查看下载地址并附加一个辅助类来操作此dll。使用书签将数据写入Word中的文本和图片。步骤1。您需要准备Word模板的第二步。在Word模板中插入书签。准备在Word中填写数据所需的职位。然后我们可以在Word中插入书签。插入Img标记后,在Img中找到并删除Img。我们只需要定位。

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

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

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

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

附一个辅助类来操作此dll

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

文本和图片

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

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

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

C#操作Word,写数据,插入图片第1张

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

 C#操作Word,写数据,插入图片第2张

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

我们的页面

C#操作Word,写数据,插入图片第3张

 <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 />

后台

 C#操作Word,写数据,插入图片第4张

 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里面生成的数据如下

C#操作Word,写数据,插入图片第5张

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

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

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

C#操作Word,写数据,插入图片第6张

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

C#操作Word,写数据,插入图片第7张

这就是我们的模板

再来看我们是如何写数据

  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里面的表格如下:

 C#操作Word,写数据,插入图片第8张

免责声明:文章转载自《C#操作Word,写数据,插入图片》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇使用PHP开发HR系统(3)Java 迭代器删除元素ConcurrentModificationException异常。下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

【Lua】table表删除指定元素 (转)

在对表做删除操作时,发现table.remove(table,idx)这个方法是根据table中的索引进行删除操作,而现在的需求是根据value值进行删除操作,在quick-x中也有相应的table方法封装: 1.根据table中的value值进行删除操作 -- table中删除指定元素(非根据索引) -- @param array 要...

HTML表格基础详解

       在现在 div 大行其道的时代,table 这个标签似乎很少被人提及,到处都是 div+css 布局的书以及博客文章,但其实 table 以及连带的其他表格标签依然在网页中占很重要的地位,特别是后台展示数据的时候表格运用是否熟练就显得很重要,一个清爽简约的表格能够把繁杂的数据表现得很有条理,虽然 div 布局也可以做到,但是总没有表格来得方便...

Access sql语句创建表及字段类型

创建一张空表: Sql="Create TABLE [表名]" 创建一张有字段的表: Sql="Create TABLE [表名]([字段名1] MEMO NOT NULL, [字段名2] MEMO, [字段名3] COUNTER NOT NULL, [字段名4] DATETIME, [字段名5] TEXT(200), [字段名6] TEXT(200))...

postgres数据库表空间收缩之pg_squeeze,pg_repack

postgres数据库表空间收缩之pg_squeeze,pg_repack 目录 postgres数据库表空间收缩之pg_squeeze,pg_repack pg_squeeze1.2 原理 优点 安装 使用 pgstattuple 临时处理 监控方式 注意事项 squeeze1.2和低版本的区别 pg_repack 原理 安装 使用方法 测...

Oracle:管理 date类型 interval 动态变化的分区:查询、删除

-- 创建临时表,目的是获取long类型的:high_value 的值 drop table syscom_tab_partition_temp purge ; create table prm8_user.syscom_tab_partition_temp (table_name varchar2(30),partition_position int,...

db2数据库创建删除主键约束和创建删除唯一键约束

创建、删除唯一约束: db2 "alter table tabname add unique(colname)" db2 "alter table tabname drop unique CONSTNAME " 创建主键约束: db2 "alter table staff add primary key (id)" db2 "alter table t_d...