c#调用word com组件 替换书签套打
安装office2007,添加com引用Microsoft Word12.0 Object Library和Microsoft Office12.0 Object Library
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web; using Microsoft.Office.Interop.Word;
using System.Reflection;
using System.Data; namespace CunJuInformationPlatformDataService.CommonClass
{
public class WordAPI
{
public static Paragraph AddParagraph(DocumentClass wordDoc, string contentTxt,WdParagraphAlignment align=WdParagraphAlignment.wdAlignParagraphLeft,int fontBold=1,int fontSize=12)
{
//由于使用的是COM库,因此有许多变量需要用Missing.Value代替
Object Nothing = System.Reflection.Missing.Value;//创建文档 // ////////////////////////////////
//Insert a paragraph at the beginning of the document
Microsoft.Office.Interop.Word.Paragraph myparagraph1;
myparagraph1 = wordDoc.Content.Paragraphs.Add(ref Nothing);
myparagraph1.Range.Text = contentTxt; //换3行显示123
myparagraph1.Alignment = align; //段落居左
myparagraph1.Range.Font.Bold = fontBold;
myparagraph1.Range.Font.Size = fontSize;
myparagraph1.Format.SpaceAfter = 24; //距离下一段的下边距(margin-bottom,单位是pt)
myparagraph1.Range.InsertParagraphAfter(); return myparagraph1;
} public static void AddImage(DocumentClass wordDoc,string imgPath,float width=-1,float height=-1)
{
object oEndOfDoc = "\\endofdoc";/*预置书签表示文档结尾,原文有错误反斜杠写成了//正斜杠,导致下面的myrange有问题*/
object myrange = wordDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
//定义该插入的图片是否为外部链接
Object linkToFile = false; //默认
//定义要插入的图片是否随Word文档一起保存
Object saveWithDocument = true; //默认
//使用InlineShapes.AddPicture方法插入图片
wordDoc.InlineShapes.AddPicture(imgPath, ref linkToFile, ref saveWithDocument, ref myrange);
if (width!=-1)
{ wordDoc.Application.ActiveDocument.InlineShapes[1].Width = height;//图片宽度
}
if (height != -1)
{ wordDoc.Application.ActiveDocument.InlineShapes[1].Height = height;//图片高度
} Microsoft.Office.Interop.Word.Paragraph return_pragraph;
object myrange2 = wordDoc.Bookmarks.get_Item(ref oEndOfDoc).Range;
return_pragraph = wordDoc.Content.Paragraphs.Add(ref myrange2);
return_pragraph.Range.InsertParagraphAfter(); //插入一个空白行
} public static void BookMarkReplace(Document wordDoc, string bookMark, string type, string value)
{ foreach (Bookmark bm in wordDoc.Bookmarks)
{
if (bm.Name == bookMark)
{
Object missing = Missing.Value;
if (type == "IMG")
{
bm.Select();
//bm.Range.Text = "";//这句不能加加了下句就报对象已被移除,所以做图片书签的时候选空格来做就看不出来了
var img=bm.Range.InlineShapes.AddPicture(@value, ref missing, ref missing); //插入图片
img.Width = 600; //自动等比
//img.Height = 300; }
else if (type == "TABLE")
{
System.Data.DataTable table = Utils.JsonDataTableConvert.ToDataTable(value);//json转datatable //http://zhidao.baidu.com/link?url=Zo7GtNDbA3cnqy-g2QM9cIEWxrw5Le6W0l_MsNnYnF_d6NrEufjkmjGyZj9AC2liuj8JSSKiw4nky6MHueexEFk99z8XXpOo2_eMct2MIB3
Table wtable = wordDoc.Tables.Add(wordDoc.Bookmarks.get_Item(bookMark).Range, table.Rows.Count + 1, table.Columns.Count); /*行+1是表格列头*/ System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
stopwatch.Start(); // 开始监视代码运行时间 wtable.set_Style("网格型"); int tableRowCount = table.Rows.Count;
int tableColumnCount = table.Columns.Count;
//表格列名
for (int i = 1; i <= tableColumnCount; i++)
{
wtable.Rows[1].Cells[i].Range.Font.Bold = 1;
wtable.Rows[1].Cells[i].Range.Font.Size=10;
wtable.Rows[1].Cells[i].Range.Text = table.Columns[i - 1].ColumnName;
}
//循环往表格里赋值
for (int i = 1; i <= tableRowCount; i++)
{
for (int j = 1; j <= tableColumnCount; j++)
{
wtable.Rows[i + 1].Cells[j].Range.Font.Bold = 0;
wtable.Rows[i + 1].Cells[j].Range.Font.Size = 10;
wtable.Rows[i + 1].Cells[j].Range.Text = table.Rows[i - 1][j - 1].ToString();
}
} // your code ....
stopwatch.Stop(); // 停止监视
TimeSpan timespan = stopwatch.Elapsed; // 获取当前实例测量得出的总时间
double hours = timespan.TotalHours; // 总小时
double minutes = timespan.TotalMinutes; // 总分钟
double seconds = timespan.TotalSeconds; // 总秒数
double milliseconds = timespan.TotalMilliseconds; // 总毫秒数 Logger.InfoLog(tableRowCount+"行*"+tableColumnCount+"列,耗时:"+minutes+"分钟,折合:"+seconds+"秒."); }
else
{//其他文字,日期等文字
bm.Select();//选中书签
bm.Range.Text = value + "\r\n";//替换文字
} break;
}
} } }
}
调用:
DateTime dt = DateTime.Now;
var basePath = Server.MapPath("~/Upload/");
object savePathWord = basePath + "tem/" + dt.ToString("yyyy-MM-dd--HH-mm-ss-") + dt.Millisecond + "_" + fileName + ".docx"; File.Copy(Server.MapPath("~/") + wordTemplatePath, savePathWord.ToString()); Microsoft.Office.Interop.Word.Application appWord = new Microsoft.Office.Interop.Word.Application();
appWord.ScreenUpdating = false;
Microsoft.Office.Interop.Word.Document doc = new Microsoft.Office.Interop.Word.Document();
object Visible = false;
object ReadOnly = false;
object missing = System.Reflection.Missing.Value;
doc = appWord.Documents.Open(ref savePathWord, ref missing, ref ReadOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref Visible, ref missing, ref missing, ref missing, ref missing); try
{ foreach (var item in ftvs)
{//表单值写入word if (item.ControlType != "IMG" && item.ControlType != "WORD" && item.ControlType != "EXCEL" && item.ControlType != "TABLE")
{//文本 日期 等文字内容
if (item.Id == -1)
{//insert }
else
{//update } <span style="color:#ff0000;">WordAPI.BookMarkReplace(doc, item.BookMarkName, item.ControlType, item.Value);
</span> }
else
{//附件已经在上传的时候插入了附件表和内容表,现在要把内容表的record_id外键改过来(默认为NULL)
if (item.ControlType == "TABLE")
{//表格
<span style="color:#ff0000;">WordAPI.BookMarkReplace(doc, item.BookMarkName, item.ControlType, item.Value);</span>
}
else if (item.ControlType == "IMG")
{
//放在最后集中处理
}
}
} #region 单独处理图片
//*****单独处理图片 //if (formTemplateValue_Ids != null)
//{
// string[] ftvIds = formTemplateValue_Ids.Split(',');
// var imgs = dc.FormTemplateValues.Where(ee => ee.ControlType == "IMG" && ftvIds.Contains(ee.Id.ToString()));
// foreach (var item in imgs)
// {
// string imgPath =GetImgPath(item.Id);//Server.MapPath("~/")+item.PdfPath; //保存图片的时候也存在了服务器上
// WordAPI.BookMarkReplace(doc, item.BookMarkName, item.ControlType, imgPath);
// }
//} var imgs = dc.FormTemplateValues.Where(ee => ee.IsDeleted == false).Where(ee => ee.ControlType == "IMG" && ee.FormTemplateRecord_Id == recordId);
foreach (var item in imgs)
{
string imgPath = GetImgPath(item.Id);//Server.MapPath("~/")+item.PdfPath; //保存图片的时候也存在了服务器上
<span style="color:#ff0000;">WordAPI.BookMarkReplace(doc, item.BookMarkName, item.ControlType, imgPath);</span>
}
#endregion appWord.ScreenUpdating = true;
doc.Save();
doc.Close(ref missing, ref missing, ref missing);
//关闭wordApp组件对象
appWord.Quit(ref missing, ref missing, ref missing);
版权声明:本文为博主原创文章,未经博主允许不得转载。
c#调用word com组件 替换书签套打的更多相关文章
- C#关于word文档的书签替换操作
public void Get_Word(string gjbh) { try { DataSet ds = OperaterBase.GetDsBySql("select diffTabl ...
- 服务器端调用Word组件读取Word权限、未将对象引用到对象实例终极解决方案
最近因为业务需要,需要在服务器上调用Word组件,结果遇到各种问题,比如检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件失败 ...
- C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签
概要 书签的设置可以帮助我们快速的定位某段文字,使用起来很方便,也很节省时间.在前一篇文章“C# 如何添加/删除Word书签”中介绍了插入.删除书签的方法,本篇文章将对C# 操作Word书签的功能做进 ...
- 快速解决PHP调用Word组件DCOM权限的问题
1. 首先必须要在电脑上安装 Office 2. windows+r : 输入 dcomcnfg.exe 打开组件服务,然后双击 组件服务 ==> 双击 计算机 ==> 双击 我的电脑 = ...
- Java 操作Word书签(三):用文本、图片、表格替换书签
本篇文章将继续介绍通过Java来操作Word书签的方法,即替换Word中已有书签,包括用新的文本.图片.表格等替换原有书签处的内容. 使用工具:Free Spire.Doc for Java (免费版 ...
- 调用office Word Com 组件,提示权限不足处理
最近一直在处理一个项目,项目主要功能与Office-Word 有关,主要涉及到文本内容编辑与样式设置等相关内容.因项目依赖office 相关dll,需要兼容多种Office 版本(office 200 ...
- DocX开源WORD操作组件的学习系列三
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- DocX开源WORD操作组件的学习系列一
DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...
- C# 调用word进程操作文档关闭进程
C# 调用word进程操作文档关闭进程 作者:Jesai 时间:2018-02-12 20:36:23 前言: office办公软件作为现在主流的一款办公软件,在我们的日常生活和日常工作里面几乎每天都 ...
随机推荐
- 【转】微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引
微信公众账号 Senparc.Weixin.MP SDK 开发教程 索引 Senparc.Weixin.MP SDK从一开始就坚持开源的状态,这个过程中得到了许多朋友的认可和支持. 目前SDK已经达到 ...
- 匿名对象和object的转换
有时候经常用到需要把一个匿名对象存入session或List<object>或其他容器中,可是取出来的时候变成object了,不太方便使用. 下面是一种转换方式: class Pr ...
- RHEL 6 或者 Oracle Linux 6, 不关机识别新添加的scsi硬盘
下面看一下在系统不重启的情况,如何让系统认识新的磁盘,并能对其分区与格式化1.在开机状态下新增磁盘2.执行下面的命令 echo "- - -" > /sys/class/sc ...
- 【转载】怎样使用ZEMAX导出高质量的图像动画
Zemax 导出高质量图片与动画 (2013-08-13 11:01:51) http://blog.sina.com.cn/s/blog_628dd2bc0101dycu.html 转载▼ How ...
- Pro ASP.NET MVC –第六章 MVC的基本工具
在本章,我们将介绍每个MVC程序员"武器库"的三个重要工具:依赖注入容器.单元测试框架和mock工具.在本书,对于三个工具分别都只用了一种方式实现,但每个工具都还有其他的实现方式. ...
- JMir——Java版热血传奇2之资源文件与地图
我虽然是90后,但是也很喜欢热血传奇2(以下简称“传奇”)这款游戏. 进入程序员行业后自己也对传奇客户端实现有所研究,现在将我的一些研究结果展示出来,如果大家有兴趣的话不妨与我交流. 项目我托管到co ...
- 搬家至个人独立博客virson.cn
最近正在将博客园的文章搬到自己的独立博客,以后基本上不会在博客园更新文章了,欢迎光临我的新博客:www.virson.cn,博客内容持续更新中……
- Spring Boot 之 HelloWorld详解
摘要: 原创出处:www.bysocket.com 泥瓦匠BYSocket 希望转载,保留摘要,谢谢! “以前是人放狗看家,现在是狗牵着人散步” — 随笔 一.Spring Boot 自述 世界上最好 ...
- 公钥、私钥、CA认证、数字签名、U盾
感谢传智播客的方立勋老师,在一个教学视频上,他巧妙地以蒋介石给宋美龄写密信作为例子,生动地讲述了软件密码学知识. 加密分为对称加密和非对称加密,我们传统理解的,发送数据之前使用一个加密器加密,接到数据 ...
- Shell之数学计算
本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~ 数学计算是Shell中比较常用的一种操作, 但是因为shell中所有的变量都默认为字符串, ...