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办公软件作为现在主流的一款办公软件,在我们的日常生活和日常工作里面几乎每天都 ...
随机推荐
- 【转帖】Moodle平台的5个新玩法
[玩坏Moodle平台]Moodle平台的5个新玩法 1.RSS订阅 Moodle平台可以导入外部博客(或其他提供RSS的服务),并显示在Moodle内置的博客系统中.无论是自己的个人网站还是他人的博 ...
- 用Eclipse运行Android版APP(PhoneGap)时出现:Unable to execute dex: Multiple dex files define
这两天遇到点小问题,做个记录: 症状:运行,调试时都报:Unable to execute dex: Multiple dex files define错误,发布后的APP安装到手机后一运行,就提示: ...
- 如何将 Microsoft Bot Framework 链接至微信公共号
说到 Microsoft Bot Framework 其实微软发布了已经有一段时间了,有很多朋友可能还不太了解,微软Bot的功能今天我给大家简单的介绍一下,Bot Framework的开发基础以及如何 ...
- linux下mysql的root密码忘记解决方法
1.首先确认服务器出于安全的状态,也就是没有人能够任意地连接MySQL数据库. 因为在重新设置MySQL的root密码的期间,MySQL数据库完全出于没有密码保护的 状态下,其他的用户也可以任意地登录 ...
- lxde桌面默认快捷键
ctrl+alt+左右 选择左右桌面shift+alt+左右 当前窗口送至左右桌面房子键+F1~F4 切换桌面1-4房子键+d 显示桌面alt+esc ...
- 一个代价11万的bug
这个bug不是技术bug或者是程序bug,是典型的业务操作bug. 开发人员混淆了线上数据和本地测试数据,把线上数据切换到本地的数据做测试,结果对这些客户进行了资金调整...就导致了这个悲剧发生 早在 ...
- ubuntu 添加管理员账户
sudo adduser cat 输入密码即可 sudo adduser cat sudo 为cat 添加sudo 权限
- Legolas工业自动化平台案例 —— 水源地自动化监控系统
天津港爆炸事件后,除了安置群众.追究事故责任外,人们最关心的莫过于爆炸污染物对于周边环境的影响,其中最重要的一块就是饮用水的安全.所幸的是,水源的安全监测是实实在在有据可依的.环保单位和供水企业在建设 ...
- Android studio动态调试smali
前面介绍了使用IDA动态调试smali,这种方法设置简单,不用重打包,用起来方便,但是如果变量类型设置错误则会马上退出调试,这是让人不爽的地方,而使用Android studio则不会. 0x01 ...
- 如何对excel进行列查重
学习了excel函数:countif.表达式:COUNTIF(数据区域,条件),作用:对数据区域内符合条件单元格计数 具体应用 在“姓名”(列A)后插入一列(列B),在B2单元格输入公式“=IF(CO ...