C#操作ms office实现office转pdf

前提

安装office 2019

安装vs 2022

新建项目

引入4个com包

编写代码

代码结构

代码如下

cs 复制代码
using Microsoft.Office.Interop.Excel;

namespace UseMsOffice
{
    internal class Program
    {
        static void Main(string[] args)
        {
            WordToPdf();
            ExcelToPdf();
            PPTToPdf();
        }

        static void WordToPdf()
        {
            // Word应用程序对象  
            var wordApp = new Microsoft.Office.Interop.Word.Application();
            Microsoft.Office.Interop.Word.Document? doc = null;
            string root = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase ?? "";
            try
            {
                // 设置为不可见模式  
                wordApp.Visible = false;
                var docPath = Path.Combine(root, "Document", "office.docx");
                // 打开一个现有的Word文档  
                doc = wordApp.Documents.Open(docPath);

                // 将文档另存为PDF  
                string pdfPath = Path.Combine(root, $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}_office.pdf");
                doc.ExportAsFixedFormat(pdfPath, Microsoft.Office.Interop.Word.WdExportFormat.wdExportFormatPDF);

                // 关闭文档和Word应用  
                doc.Close();
                wordApp.Quit();

                Console.WriteLine("文档已成功转换为PDF格式。");
            }
            catch (Exception ex)
            {
                Console.WriteLine("发生错误:" + ex.Message);
            }
            finally
            {
                // 释放COM对象  
                System.Runtime.InteropServices.Marshal.ReleaseComObject(doc);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(wordApp);
                doc = null;
                wordApp = null;
            }
        }

        static void ExcelToPdf()
        {
            // Excel应用程序对象  
            var excelApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook workBook = null;
            string root = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase ?? "";
            try
            {
                // 设置为不可见模式  
                excelApp.Visible = false;
                var docPath = Path.Combine(root, "Document", "office.xlsx");
                // 打开一个现有的Word文档  
                workBook = excelApp.Workbooks.Open(docPath);

                // 将文档另存为PDF  
                string pdfPath = Path.Combine(root, $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}_office.pdf");
                workBook.ExportAsFixedFormat(XlFixedFormatType.xlTypePDF, pdfPath);

                // 关闭文档和Word应用  
                workBook.Close();
                excelApp.Quit();

                Console.WriteLine("文档已成功转换为PDF格式。");
            }
            catch (Exception ex)
            {
                Console.WriteLine("发生错误:" + ex.Message);
            }
            finally
            {
                // 释放COM对象  
                System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                workBook = null;
                excelApp = null;
            }
        }

        static void PPTToPdf()
        {
            // Excel应用程序对象  
            var pptApp = new Microsoft.Office.Interop.PowerPoint.Application();
            Microsoft.Office.Interop.PowerPoint.Presentation presentation = null;
            string root = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase ?? "";
            try
            {
                // 设置为不可见模式  
                pptApp.Visible = Microsoft.Office.Core.MsoTriState.msoFalse;
                var docPath = Path.Combine(root, "Document", "office.pptx");
                // 打开一个现有的Word文档  
                presentation = pptApp.Presentations.Open(docPath);

                // 将文档另存为PDF  
                string pdfPath = Path.Combine(root, $"{DateTime.Now.ToString("yyyy_MM_dd_HH_mm_ss")}_office.pdf");
                presentation.ExportAsFixedFormat(pdfPath,Microsoft.Office.Interop.PowerPoint.PpFixedFormatType.ppFixedFormatTypePDF);

                // 关闭文档和Word应用  
                presentation.Close();
                pptApp.Quit();

                Console.WriteLine("文档已成功转换为PDF格式。");
            }
            catch (Exception ex)
            {
                Console.WriteLine("发生错误:" + ex.Message);
            }
            finally
            {
                // 释放COM对象  
                System.Runtime.InteropServices.Marshal.ReleaseComObject(presentation);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(pptApp);
                presentation = null;
                pptApp = null;
            }
        }
    }
}

测试

参考

https://blog.csdn.net/z542601362/article/details/45158215
https://www.cnblogs.com/5426z/articles/4865312.html
https://blog.csdn.net/qq_35620884/article/details/141326517
https://blog.csdn.net/lzp1990/article/details/138810685

相关推荐
Evand J11 分钟前
【MATLAB例程,图像降噪滤波9】自适应维纳滑动窗口滤波(Wiener)图像降噪、方法对比,有中文注释
开发语言·图像处理·计算机视觉·matlab·滑动窗口·滤波·降噪
杜大哥33 分钟前
python程序:如何查看电脑【电池电量的剩余百分比】 和 【是否插入连接着充电器】?
开发语言·python
wuyk55534 分钟前
Python网络爬虫入门到实战 第01章:爬虫到底是什么?原理、流程、合法性、风险全解析(零基础必看)
开发语言·爬虫·python
yurenpai(27届找实习中)41 分钟前
Java 10 的 var 为什么不能随便用?从订单汇总看懂类型推断与泛型陷阱
java·开发语言·java18
、如果1 小时前
PDF图片文字提取零依赖方案:pymupdf+AI视觉实战
人工智能·数据分析·pdf·图片提取·文字提取·skills
shmily麻瓜小菜鸡1 小时前
JS/TS 易踩坑知识点 — 模块化与工程化类
开发语言·javascript·ecmascript
geovindu1 小时前
CSharp: Observer Pattern
开发语言·后端·观察者模式·设计模式·c#·.netcore·行为模式
郝学胜-神的一滴2 小时前
C++11 工程级应用 09:告别无谓拷贝,解锁高性能移动语义
开发语言·数据结构·c++·vscode·软件工程·visual studio
MC皮蛋侠客3 小时前
OPC UA 系列(一):标准全景与 Python 最小闭环——让第一条设备数据流动起来
开发语言·python·opcua
SamChan903 小时前
PDF翻译后的格式完整性校验:用Python自动比对译文与原文档的表格与段落结构
开发语言·python·ai·pdf·机器翻译