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办公软件作为现在主流的一款办公软件,在我们的日常生活和日常工作里面几乎每天都 ...
随机推荐
- Windows 2008 利用Filezilla server搭建FTP
Windows 2008 利用Filezilla server搭建FTP, 安装后总是提示Error Connection To Server Lost , 后来,无意中先安装了IIS,再安装file ...
- [GraphQL] Write a GraphQL Schema in JavaScript
Writing out a GraphQL Schema in the common GraphQL Language can work for simple GraphQL Schemas, but ...
- drupal module 自定义
01 <?php function mytracer_menu() { $items = array(); $items['admin/config/mytracer'] = array( 't ...
- Strategy策略设计模式
1.策略模式和状态模式的区别和联系(本部分转载自:http://letscoding.cn/java%E4%B8%AD%EF%BC%8C%E7%8A%B6%E6%80%81%E6%A8%A1%E5%B ...
- 初探设计:Java接口和抽象类何时用?怎么用?
今天犯了个错: “接口变动,伤筋动骨,除非你确定只有你一个人在用”.哪怕只是throw了一个新的Exception.哈哈,这是我犯的错误. 一.接口和抽象类 类,即一个对象. 先抽象类,就是抽象出类的 ...
- tolua++实现分析
项目正在使用cocos2dx的lua绑定,绑定的方式是tolua++.对大规模使用lua代码信心不是很足,花了一些时间阅读tolua++的代码,希望对绑定实现的了解,有助于项目对lua代码的把控.从阅 ...
- 使用Javascript来创建一个响应式的超酷360度全景图片查看幻灯效果
360度的全景图片效果常常可以用到给客户做产品展示,今天这里我们推荐一个非常不错的来自Robert Pataki的360全景幻灯实现教程,这里教程中将使用javascript来打造一个超酷的全景幻灯实 ...
- 你还在问android横竖屏切换的生命周期?
本文原创,转载请注明来自xiaoQLuhttp://www.cnblogs.com/xiaoQLu/p/3324503.html 开源帮助android获得了飞速的发展,开源也导致了数不清的碎片问题. ...
- Apache MPM winnt
Win32DisableAcceptEx 指令在 apache2.4 被 AcceptFilter None 取代
- ICMP type code 对应表(转)
ICMP类型 TYPE CODE Description Query Error 0 0 Echo Reply——回显应答(Ping应答) x 3 0 Network Unreachable——网 ...