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(, );
fileName = random + ext;
fuUpload.SaveAs(SavaPath + fileName); //图片保存到项目中
//写入word
string FilePath = "WriteWord+" + new Random().Next(, ) + ".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, , imgByte.Length);
builder.InsertImage(imgByte, , ); //以字节组的方式写入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(, ) + ".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="", sex="男"},
new Person(){ Name="李四", Age="", sex="男"},
new Person(){ Name="王五", Age="", sex="男"},
new Person(){ Name="赵六", Age="", sex="男"},
new Person(){ Name="……", Age="……", sex="……"}
}; DocumentBuilder builder = new DocumentBuilder(doc);
NodeCollection allTables = doc.GetChildNodes(NodeType.Table, true); //拿到所有表格
Aspose.Words.Tables.Table table = allTables[] as Aspose.Words.Tables.Table; //拿到第1个表格
foreach (Person item in perList)
{
var row = table.Rows[table.Rows.Count - ].Clone(true); //复制最后一行
table.Rows.Insert(table.Rows.Count - , row); //插入到这行的上面
builder.MoveToCell(, table.Rows.Count - , , ); //移动单元格到第几行第几列
builder.Write(item.Name); //写入数据
builder.MoveToCell(, table.Rows.Count - , , );
builder.Write(item.Age);
builder.MoveToCell(, table.Rows.Count - , , );
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,写数据,插入图片的更多相关文章
- Word 写论文插入参考文献的正确操作
1. 引言 一般我们写论文插入参考文献的标号都是手动输入的,这样造成的问题有以下几个: 手动输入标号比较麻烦: 如果参考文献顺序变了,需要一个一个重新更改标号数值,及其麻烦: 标号无法和末尾的参考文献 ...
- Npoi XWPF Word 导出时插入图片无法显示 bug 完美解决
一.来自客户的需求 最近客户来个新需求生成一个word 标签纸,并且需要在标签纸上插入一个logo,并且将erp 中的数据取出来自动写在文档上,不由得淡淡一笑,这不难呀! 于是乎我就写下了这样的代码: ...
- C# 操作Word文本框——插入表格/读取表格/删除表格
在文本框中,我们可以操作很多元素,如文本.图片.表格等,在本篇文章中将着重介绍如何插入表格到文本框,插入的表格我们可以对表格进行格式化操作来丰富表格内容.此外,对于文本框中的表格内容,我们也可以根据需 ...
- 2.4.5 用NPOI操作EXCEL--插入图片
我们知道,在Excel中是可以插入图片的.操作菜单是“插入->图片”,然后选择要插入图片,可以很容易地在Excel插入图片.同样,在NPOI中,利用代码也可以实现同样的效果.在NPOI中插入图片 ...
- Word批量调整插入图片大小
做标书,word中需要插入大量图片,实为一些证书.文件的扫描文件.但插入后,大小不是想要的,太小了,打印出来看不清.需要调整,需要批量调整. 这是一个不错的方法: 选中第一张图片,按页面调整大小到适合 ...
- 利用Python操作Word文档【图片】
利用Python操作Word文档
- C++操作MySQL大量数据插入效率低下的解决方法
#include <iostream> #include <winsock2.h> #include <string> #include "mysql.h ...
- 解决 C++ 操作 MySQL 大量数据插入效率低下问题
往 Mysql 中,插入10000条简单数据.速度很缓慢,竟然要5分钟左右, 可是打开事务的话.一秒不到就搞定了 代码: #include <iostream> #include < ...
- C语言之文件操作06——写数据到文本文件遇0停止
//文件 /* =============================================================== 题目:输入10个篮球运动员的身高数据(cm)保存至D盘文 ...
- C#中按模板操作Word —— 如何向Word中插入图片
一.Word对象模型的重叠性分析 本文主要介绍通过书签Bookmark向Word文档中插入图片的方法.在此之前我们先简单讨论下Word对象模型的重叠性.如果你对Word对象模型还不熟悉,请参考本专栏第 ...
随机推荐
- 安装 Office project 2013 时提示找不到 Office.zh-cn\OfficeLR.cab
昨天在安装project 时总是弹出下图中的提示框,在网上搜索了很多办法但是没有解决这个问题. 后来进入到office.zh-cn的文件夹中,在officemui.msi文件中右键卸载,然后在重新安装 ...
- js监听dom元素内容变化
$("#divid").bind('DOMNodeInserted', function(e) { alert('element now contains: ' + $(e.tar ...
- javascript判断input框只能输入数字的方法
javascript 只允许输入数字有很多方法,总结如下 1,只允许输入数字和小数点. <input onKeypress="return (/[\d.]/.test(String.f ...
- CAD安装失败怎样卸载CAD 2016?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- 转:Android开源项目推荐之「网络请求哪家强」 Android开源项目推荐之「网络请求哪家强」
转载自https://zhuanlan.zhihu.com/p/21879931 1. 原则 本篇说的网络请求专指 http 请求,在选择一个框架之前,我个人有个习惯,就是我喜欢选择专注的库,其实在软 ...
- Neutron命令测试2
/etc/network/interfaces auto loiface lo inet loopback auto eth0iface eth0 inet manualup ifconfig $IF ...
- pat1100. Mars Numbers (20)
1100. Mars Numbers (20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue People o ...
- 位于XDB的服务器localhost要求用户名和密码,端口占用
问题现象: 从MyEclipse启动部署在tomcat上的web程序后,出现如下问题: 然后访问tomcat主页(http://localhost:8080/),弹出如下对话框: 问题原因: 机器上安 ...
- 转载【Ubuntu】Ubuntu14.04虚拟机调整窗口大小自适应VMware14窗口
Ubuntu屏幕居中一小块,很不好看 查看-–> 自动调整大小—>自动适应客户机/自动适应窗口 切一下就可以把Ubuntu图的界面大小调的和VMware窗口自适应了 效果: 转载 自h ...
- vue的计算和监视属性,附一小实例
1. 计算属性 在computed属性对象中定义计算属性的方法 在页面中使用{{方法名}}来显示计算的结果 2. 监视属性: 通过通过vm对象的$watch()或watch配置来监视指定的属性 当属性 ...