文章目录

  • 使用场景
  • 一、使用步骤
    • 1.引入库
    • 2.调用
  • 二、我使用时出现的bug
    • 错误信息一
    • 原因及解决方案
    • 错误信息二
    • 原因及解决方案
    • 错误信息三
    • 原因及解决方案
  • 三、总结

使用场景

多个word进行合并;word转pdf;
1,此方法只支持.net framework框架;
2,但恰恰我的项目是netcore的,所以需要在项目中添加引入一个net framework的项目,在源项目中引用framework项目,最终在framework项目中进行对com组件进行调用处理;

一、使用步骤

1.引入库

第一步:创建netFramework项目
在项目中 右键----添加----新建项目----创建一个netFramework的web项目
(也可以下载我写的,直接添加现有项目即可,资源下载地址)
第二步:添加引用
右键引用----添加引用----点击COM----找到 Microsoft Word 14.0 Object Library选中确认添加即可(找不到的话,从nuget上面下载安装也可,已实测)
第三步:创建类文件(此处我只用到了合并word以及word转pdf,其他代码不放了,网上可以搜到)
代码如下(示例):

using System.Collections.Generic;
using System.IO;
using Microsoft.Office.Interop.Word;
using System;
using System.Linq;
using System.Reflection;
using System.Web;namespace NetFrameworkProject
{public class WordClass{Application objApp = null;Document objDocLast = null;Document objDocBeforeLast = null;public WordClass(){objApp = new Application();}#region 打开文件public void Open(string tempDoc){object objTempDoc = tempDoc;object objMissing = System.Reflection.Missing.Value;objApp = new Application();objDocLast = objApp.Documents.Open(ref objTempDoc, //FileNameref objMissing, //ConfirmVersionsref objMissing, //ReadOnlyref objMissing, //AddToRecentFilesref objMissing, //PasswordDocumentref objMissing, //PasswordTemplateref objMissing, //Revertref objMissing, //WritePasswordDocumentref objMissing, //WritePasswordTemplateref objMissing, //Formatref objMissing, //Encondingref objMissing, //Visibleref objMissing, //OpenAndRepairref objMissing, //DocumentDirectionref objMissing, //NoEncodingDialogref objMissing //XMLTransform);objDocLast.Activate();}#endregionpublic void SaveAs(string outDoc){object objMissing = System.Reflection.Missing.Value;object objOutDoc = outDoc;objDocLast.SaveAs(ref objOutDoc, //FileNameref objMissing, //FileFormatref objMissing, //LockCommentsref objMissing, //PassWordref objMissing, //AddToRecentFilesref objMissing, //WritePasswordref objMissing, //ReadOnlyRecommendedref objMissing, //EmbedTrueTypeFontsref objMissing, //SaveNativePictureFormatref objMissing, //SaveFormsDataref objMissing, //SaveAsAOCELetter,ref objMissing, //Encodingref objMissing, //InsertLineBreaksref objMissing, //AllowSubstitutionsref objMissing, //LineEndingref objMissing //AddBiDiMarks);}/// <summary>/// 循环合并多个文件(插入合并文件)/// </summary>/// <param name="tempDoc">模板文件</param>/// <param name="arrCopies">需要合并的文件</param>/// <param name="outDoc">合并后的输出文件</param>public void InsertMerge(string tempDoc, List<string> arrCopies, string outDoc){object objMissing = Missing.Value;object objFalse = false;object confirmConversion = false;object link = false;object attachment = false;try{//打开模板文件Open(tempDoc);foreach (string strCopy in arrCopies){objApp.Selection.InsertFile(strCopy,ref objMissing,ref confirmConversion,ref link,ref attachment);}//保存到输出文件SaveAs(outDoc);foreach (Microsoft.Office.Interop.Word.Document objDocument in objApp.Documents){objDocument.Close(ref objFalse, //SaveChangesref objMissing, //OriginalFormatref objMissing //RouteDocument);}}finally{objApp.Quit(ref objMissing, //SaveChangesref objMissing, //OriginalFormatref objMissing //RoutDocument);objApp = null;}}/// <summary>/// 将word转换成pdf/// </summary>/// <param name="sourcePath"></param>/// <param name="targetPath"></param>/// <returns></returns>public bool WordToPDF(string sourcePath, string targetPath){bool result = false;Microsoft.Office.Interop.Word.Application application = new Microsoft.Office.Interop.Word.Application();Microsoft.Office.Interop.Word.Document document = null;try{application.Visible = false;document = application.Documents.Open(sourcePath);document.ExportAsFixedFormat(targetPath, WdExportFormat.wdExportFormatPDF);result = true;}catch (Exception e){Console.WriteLine(e.Message);result = false;}finally{document.Close();}return result;}}
}

第四步:添加项目引用(net framework框架可忽略此步)
在实际用的地方,将新建的项目引用进去;

到这里就准备就绪了,进入调用环节;

2.调用

代码如下(示例):

 public void netFrameWorkDemo(){//指定目录string path = @"E:\codeSource\WEBCORE\wwwroot\UploadFile\1\2021-03-01\";//输出文档时会自动创建string outDoc = path+"all.docx";//模版word只需要指定一个空word即可,必须要用,不然后面open方法会报错,可根据需要自动生成string tempDoc = path+"tempDoc.docx";string ttt = path + "问题汇总.docx";string ttt2 = path + "问题汇总2.docx";//合并wordList<string> arrCopies = new List<string>();arrCopies.Add(ttt);arrCopies.Add(ttt2);WordClass wc = new WordClass();wc.InsertMerge(tempDoc, arrCopies, outDoc);//word转成pdfstring tttpdf = path + "ttt.pdf";//指定输出的文件名string ttt2pdf = path + "ttt2.pdf";//指定输出的文件名wc.WordToPDF(ttt, tttpdf); wc.WordToPDF(ttt2, ttt2pdf);}

二、我使用时出现的bug

错误信息一

无法将类型为“Microsoft.Office.Interop.Excel.ApplicationClass”的 COM 对象强制转换为接口类型“Microsoft.Office.Interop.Excel._Application”。此操作失败的原因是对 IID 为“{000208D5-0000-0000-C000-000000000046}”的接口的 COM 组件调用 QueryInterface 因以下错误而失败: 加载类型库/DLL 时出错。 (异常来自 HRESULT:0x80029C4A (TYPE_E_CANTLOADLIBRARY))。

原因及解决方案

网上搜了很多方法,有很多说法,又是注册表又是重装office的,每人情况都不一定一样,我的是因为之前装了wps又卸载了,重新把wps装上就好了,网上说必须用wps自带的卸载才行(没试过,有试过的可以留言共享下)。

错误信息二

Retrieving the COM class factory for component with CLSID {000209FF-0000-0000-C000-000000000046} failed due to the following error: 80070005 拒绝访问。 (0x80070005 (E_ACCESSDENIED)).

原因及解决方案

第一:这个主要是64位系统的问题,word是32位的组件,所以在正常的系统组件服务里是看不到的(找不到CLSID为000209FF-0000-0000-C000-000000000046),可以通过在运行里面输入 comexp.msc -32 来打开32位的组件服务,在里就能看到excel组件了
第二:只要修改IIS的应用程序池,选择你的项目,点击高级设置,标识改为:LocalSystem 或NetworkServer;

错误信息三

word转pdf时报错 Object reference not set to an instance of an object( 对象引用未设置为对象的实例 )

原因及解决方案

原因是文件夹没有IIS_USERS的权限。给项目文件夹附上权限即可。


三、总结

这种方法是免费的,缺点还是挺明显的,就是速度很慢,我测试了一个190页的word转成pdf大约月要35秒; 收费的可以使用下 Aspose.word与Aspose.pdf;

.net直接调用office com组件操作word与pdf相关推荐

  1. java调用office接口_java调用com组件操作word使用总结(jacob)

    ava调用com组件操作word使用总结(jacob) 简单描述 在此处输入简单摘要 特别声明:使用java-com技术可以完成任何VBA可以完成的office文档操作; 一.准备工作 先了解一下概念 ...

  2. 使用Aspose组件将WORD、PDF、PPT转为图片

    using System; using System.Collections.Generic; using System.Text; using OMCS.Engine.WhiteBoard; usi ...

  3. 【python操作word和pdf】

    python操作word和pdf 一.python操作word 1.python新建word文档及常规操作 2.python对word的字体设置 3.python向word插入图片和表格 4.pyth ...

  4. .Net调用Office Com组件的原理及问题检索com类工厂组件检索 COM 类工厂中 CLSID 为 {XXX} 的组件失败

    .net调用office组件进行Excel.Word.ppt的一些操作,需要做一下操作: 1.正确全面的安装office 2.DCOM配置权限(64位系统要添加32位组件[mmc -32]) (1.) ...

  5. 【python自动化办公02】word操作-word转pdf

    点击上方"AI搞事情"关注我们 清明 Python调用Win32com实现Office批量转PDF https://www.cnblogs.com/lolipop2019/p/14 ...

  6. java操作word/excel/pdf等文件技术方案

    最近项目中遇到很多对word/excel/pdf等文件的操作,解决方案有好多,开源免费有:利用openoffice组件(需要安装openoffice软件),poi,itext等.也有收费的服务:asp ...

  7. Java操作Word转PDF(Word转图片)

    1. spire.doc的jar引用 首先我们需要用到国产word处理工具jar包spire.doc,可以通过maven仓库寻找,然后在pom文件中直接引用. 此处需要注意,我们需要使用的是spire ...

  8. c#调用Aspose.Word组件操作word 插入文字/图片/表格 书签替换套打

    由于NPOI暂时没找到书签内容替换功能,所以换用Apose.Word组件. using System; using System.Collections.Generic; using System.C ...

  9. 微软 Office Online 在线查看word,pdf, xls,ppt 文档

    使用微软提供的Office Online平台只需要一个网址即可在线查看Xls,doc,PPT等文档 http://view.officeapps.live.com/op/view.aspx?src=要 ...

最新文章

  1. ubuntu8.10家庭使用(一)
  2. python 让系统不识别转义字符 print的时候直接输出
  3. Android 利用addView 动态给Activity添加View组件
  4. 炸!亿级数据DB秒级平滑扩容!!!
  5. Json字符串和Json对象的简单总结
  6. 熟悉使用ssm框架完成项目
  7. mysql表去掉回车、换行
  8. weka分类器怎么设置样本类别_【程序喵笔记】小样本学习1.0
  9. 全栈入门_启动数据栈入门包(2020)
  10. ASP.NET中Request.IsAuthenticated和Request.User.Identity.IsAuthenticated的区别
  11. 论文浅尝 | 在生成式多跳机器阅读任务中引入外部常识知识
  12. python -m SimpleHTTPServer
  13. mysql当时读_Mysql事务以及四中隔离级别实例2以及InnoDB如何解决当时读的幻读问题...
  14. ROS 控制台:rqt_console 因为比较简单。。。
  15. 基于Spring的包含特定注解bean的package扫描工具
  16. 工程管理 -- makefile
  17. wordpress配置邮箱发送功能
  18. ibm服务器机 安装系统安装系统安装方法,IBM服务器系统安装图解全攻略
  19. 【GlobalMapper精品教程】007:如何加载谷歌卫星影像?
  20. 【javase基础】第六篇:方法的重载与递归

热门文章

  1. 因果效应与uplift模型
  2. flash大厅_Flash必要的系统组件未能正常运行,请修复Adobe
  3. bmp文件大小计算C语言,BMP文件解码[C语言]
  4. java毕业生设计学生用品采购系统计算机源码+系统+mysql+调试部署+lw
  5. macbook pro换固态硬盘ssd与移植mac os x系统
  6. 考计算机证书多少钱 二级计算机证培训费用是多少
  7. Shrio异常The security manager does not implement the WebSecurityManager interface.
  8. 打印身份证主要安装步骤
  9. 页面禁止保存、复制、右键、查看源代码、下载、嵌套等【js禁用】【js屏蔽快捷键】
  10. leetcode刷刷刷