当前位置: 首页 > news >正文

C# Office文档操作完整教程

C# Office文档操作完整教程

基于.NET Framework 4.0 和 Visual Studio 2010


目录

  1. 环境准备
  2. Word文档操作
  3. Excel文档操作
  4. PowerPoint文档操作
  5. 转换为PDF
  6. 注意事项

环境准备

1. 安装Microsoft Office Interop组件

在Visual Studio 2010中添加引用:

  • 右键项目 → 添加引用 → COM标签页
  • 选择以下组件:
    • Microsoft Word 14.0 Object Library
    • Microsoft Excel 14.0 Object Library
    • Microsoft PowerPoint 14.0 Object Library

2. 必要的using语句

using System;
using System.IO;
using System.Runtime.InteropServices;
using Word = Microsoft.Office.Interop.Word;
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;

Word文档操作

1. 创建Word文档

public class WordDocumentHelper
{/// <summary>/// 创建新的Word文档/// </summary>public static void CreateWordDocument(string filePath){Word.Application wordApp = null;Word.Document doc = null;try{// 创建Word应用程序实例wordApp = new Word.Application();wordApp.Visible = false; // 不显示Word窗口// 创建新文档object missing = System.Reflection.Missing.Value;doc = wordApp.Documents.Add(ref missing, ref missing, ref missing, ref missing);// 添加标题Word.Paragraph titlePara = doc.Paragraphs.Add(ref missing);titlePara.Range.Text = "这是标题";titlePara.Range.Font.Size = 24;titlePara.Range.Font.Bold = 1;titlePara.Range.Font.Color = Word.WdColor.wdColorBlue;titlePara.Range.Font.Name = "微软雅黑";titlePara.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;titlePara.Range.InsertParagraphAfter();// 添加正文Word.Paragraph contentPara = doc.Paragraphs.Add(ref missing);contentPara.Range.Text = "这是正文内容,可以设置不同的字体样式。";contentPara.Range.Font.Size = 12;contentPara.Range.Font.Color = Word.WdColor.wdColorBlack;contentPara.Range.Font.Name = "宋体";contentPara.Range.InsertParagraphAfter();// 添加带颜色的文本Word.Paragraph colorPara = doc.Paragraphs.Add(ref missing);colorPara.Range.Text = "这是红色文本";colorPara.Range.Font.Size = 14;colorPara.Range.Font.Color = Word.WdColor.wdColorRed;colorPara.Range.Font.Italic = 1;colorPara.Range.InsertParagraphAfter();// 保存文档object fileName = filePath;doc.SaveAs2(ref fileName);Console.WriteLine("Word文档创建成功: " + filePath);}catch (Exception ex){Console.WriteLine("创建Word文档时出错: " + ex.Message);throw;}finally{// 关闭文档和应用程序if (doc != null){doc.Close();Marshal.ReleaseComObject(doc);}if (wordApp != null){wordApp.Quit();Marshal.ReleaseComObject(wordApp);}GC.Collect();GC.WaitForPendingFinalizers();}}
}

2. 读取Word文档

/// <summary>
/// 读取Word文档内容
/// </summary>
public static string ReadWordDocument(string filePath)
{Word.Application wordApp = null;Word.Document doc = null;try{wordApp = new Word.Application();wordApp.Visible = false;object fileName = filePath;object missing = System.Reflection.Missing.Value;object readOnly = true;// 打开文档doc = wordApp.Documents.Open(ref fileName, ref missing, ref readOnly,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing);// 读取文档内容string content = doc.Content.Text;// 读取段落信息Console.WriteLine("文档包含 {0} 个段落", doc.Paragraphs.Count);foreach (Word.Paragraph para in doc.Paragraphs){Console.WriteLine("段落文本: " + para.Range.Text.Trim());Console.WriteLine("字体大小: " + para.Range.Font.Size);Console.WriteLine("字体名称: " + para.Range.Font.Name);}return content;}catch (Exception ex){Console.WriteLine("读取Word文档时出错: " + ex.Message);throw;}finally{if (doc != null){doc.Close();Marshal.ReleaseComObject(doc);}if (wordApp != null){wordApp.Quit();Marshal.ReleaseComObject(wordApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

3. 在Word中插入表格

/// <summary>
/// 在Word文档中插入表格
/// </summary>
public static void InsertTableInWord(string filePath)
{Word.Application wordApp = null;Word.Document doc = null;try{wordApp = new Word.Application();wordApp.Visible = false;object missing = System.Reflection.Missing.Value;doc = wordApp.Documents.Add(ref missing, ref missing, ref missing, ref missing);// 添加标题Word.Paragraph para = doc.Paragraphs.Add(ref missing);para.Range.Text = "员工信息表";para.Range.Font.Size = 16;para.Range.Font.Bold = 1;para.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;para.Range.InsertParagraphAfter();// 插入表格 (5行3列)Word.Range range = doc.Paragraphs[doc.Paragraphs.Count].Range;Word.Table table = doc.Tables.Add(range, 5, 3, ref missing, ref missing);// 设置表格边框table.Borders.Enable = 1;table.Borders.OutsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;table.Borders.InsideLineStyle = Word.WdLineStyle.wdLineStyleSingle;// 设置表头table.Cell(1, 1).Range.Text = "姓名";table.Cell(1, 2).Range.Text = "部门";table.Cell(1, 3).Range.Text = "职位";// 设置表头样式for (int col = 1; col <= 3; col++){table.Cell(1, col).Range.Font.Bold = 1;table.Cell(1, col).Range.Font.Size = 12;table.Cell(1, col).Range.Font.Color = Word.WdColor.wdColorWhite;table.Cell(1, col).Shading.BackgroundPatternColor = Word.WdColor.wdColorBlue;table.Cell(1, col).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;}// 填充数据string[,] data = {{"张三", "技术部", "工程师"},{"李四", "市场部", "经理"},{"王五", "财务部", "会计"},{"赵六", "人事部", "主管"}};for (int row = 0; row < 4; row++){for (int col = 0; col < 3; col++){table.Cell(row + 2, col + 1).Range.Text = data[row, col];table.Cell(row + 2, col + 1).Range.Font.Size = 11;table.Cell(row + 2, col + 1).Range.ParagraphFormat.Alignment = Word.WdParagraphAlignment.wdAlignParagraphCenter;}}// 自动调整表格table.AutoFitBehavior(Word.WdAutoFitBehavior.wdAutoFitContent);// 保存文档object fileName = filePath;doc.SaveAs2(ref fileName);Console.WriteLine("带表格的Word文档创建成功: " + filePath);}catch (Exception ex){Console.WriteLine("插入表格时出错: " + ex.Message);throw;}finally{if (doc != null){doc.Close();Marshal.ReleaseComObject(doc);}if (wordApp != null){wordApp.Quit();Marshal.ReleaseComObject(wordApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

4. 删除Word中的表格

/// <summary>
/// 删除Word文档中的指定表格
/// </summary>
public static void DeleteTableInWord(string filePath, int tableIndex)
{Word.Application wordApp = null;Word.Document doc = null;try{wordApp = new Word.Application();wordApp.Visible = false;object fileName = filePath;object missing = System.Reflection.Missing.Value;doc = wordApp.Documents.Open(ref fileName, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing);// 检查表格是否存在if (doc.Tables.Count >= tableIndex){doc.Tables[tableIndex].Delete();Console.WriteLine("已删除第 {0} 个表格", tableIndex);// 保存修改doc.Save();}else{Console.WriteLine("表格索引超出范围,文档中共有 {0} 个表格", doc.Tables.Count);}}catch (Exception ex){Console.WriteLine("删除表格时出错: " + ex.Message);throw;}finally{if (doc != null){doc.Close();Marshal.ReleaseComObject(doc);}if (wordApp != null){wordApp.Quit();Marshal.ReleaseComObject(wordApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

5. 修改Word文档

/// <summary>
/// 修改Word文档内容
/// </summary>
public static void ModifyWordDocument(string filePath)
{Word.Application wordApp = null;Word.Document doc = null;try{wordApp = new Word.Application();wordApp.Visible = false;object fileName = filePath;object missing = System.Reflection.Missing.Value;doc = wordApp.Documents.Open(ref fileName, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing);// 在文档末尾添加新内容Word.Paragraph newPara = doc.Paragraphs.Add(ref missing);newPara.Range.Text = "这是新添加的内容";newPara.Range.Font.Size = 12;newPara.Range.Font.Color = Word.WdColor.wdColorGreen;newPara.Range.Font.Bold = 1;// 查找并替换文本Word.Find findObject = wordApp.Selection.Find;findObject.Text = "旧文本";findObject.Replacement.Text = "新文本";object replaceAll = Word.WdReplace.wdReplaceAll;findObject.Execute(ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref replaceAll, ref missing, ref missing, ref missing, ref missing);// 保存修改doc.Save();Console.WriteLine("Word文档修改成功");}catch (Exception ex){Console.WriteLine("修改Word文档时出错: " + ex.Message);throw;}finally{if (doc != null){doc.Close();Marshal.ReleaseComObject(doc);}if (wordApp != null){wordApp.Quit();Marshal.ReleaseComObject(wordApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

Excel文档操作

1. 创建Excel文档

public class ExcelDocumentHelper
{/// <summary>/// 创建Excel文档/// </summary>public static void CreateExcelDocument(string filePath){Excel.Application excelApp = null;Excel.Workbook workbook = null;Excel.Worksheet worksheet = null;try{excelApp = new Excel.Application();excelApp.Visible = false;excelApp.DisplayAlerts = false;// 创建新工作簿workbook = excelApp.Workbooks.Add(Type.Missing);worksheet = (Excel.Worksheet)workbook.Worksheets[1];worksheet.Name = "销售数据";// 设置标题行worksheet.Cells[1, 1] = "产品名称";worksheet.Cells[1, 2] = "销售数量";worksheet.Cells[1, 3] = "单价";worksheet.Cells[1, 4] = "总金额";// 设置标题行样式Excel.Range titleRange = worksheet.Range["A1", "D1"];titleRange.Font.Bold = true;titleRange.Font.Size = 12;titleRange.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White);titleRange.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Blue);titleRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;// 填充数据string[] products = { "笔记本电脑", "鼠标", "键盘", "显示器", "耳机" };int[] quantities = { 50, 200, 150, 80, 120 };double[] prices = { 5000.00, 50.00, 150.00, 1500.00, 200.00 };for (int i = 0; i < products.Length; i++){int row = i + 2;worksheet.Cells[row, 1] = products[i];worksheet.Cells[row, 2] = quantities[i];worksheet.Cells[row, 3] = prices[i];// 设置公式计算总金额worksheet.Cells[row, 4].Formula = string.Format("=B{0}*C{1}", row, row);// 设置数字格式worksheet.Cells[row, 3].NumberFormat = "¥#,##0.00";worksheet.Cells[row, 4].NumberFormat = "¥#,##0.00";}// 添加合计行int totalRow = products.Length + 2;worksheet.Cells[totalRow, 1] = "合计";worksheet.Cells[totalRow, 1].Font.Bold = true;worksheet.Cells[totalRow, 4].Formula = string.Format("=SUM(D2:D{0})", totalRow - 1);worksheet.Cells[totalRow, 4].Font.Bold = true;worksheet.Cells[totalRow, 4].NumberFormat = "¥#,##0.00";worksheet.Cells[totalRow, 4].Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightYellow);// 设置列宽自适应worksheet.Columns.AutoFit();// 添加边框Excel.Range dataRange = worksheet.Range["A1", string.Format("D{0}", totalRow)];dataRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;dataRange.Borders.Weight = Excel.XlBorderWeight.xlThin;// 保存文件workbook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookDefault,Type.Missing, Type.Missing, false, false,Excel.XlSaveAsAccessMode.xlNoChange,Excel.XlSaveConflictResolution.xlLocalSessionChanges,Type.Missing, Type.Missing, Type.Missing, Type.Missing);Console.WriteLine("Excel文档创建成功: " + filePath);}catch (Exception ex){Console.WriteLine("创建Excel文档时出错: " + ex.Message);throw;}finally{if (worksheet != null) Marshal.ReleaseComObject(worksheet);if (workbook != null){workbook.Close();Marshal.ReleaseComObject(workbook);}if (excelApp != null){excelApp.Quit();Marshal.ReleaseComObject(excelApp);}GC.Collect();GC.WaitForPendingFinalizers();}}
}

2. 读取Excel文档

/// <summary>
/// 读取Excel文档
/// </summary>
public static void ReadExcelDocument(string filePath)
{Excel.Application excelApp = null;Excel.Workbook workbook = null;Excel.Worksheet worksheet = null;try{excelApp = new Excel.Application();excelApp.Visible = false;excelApp.DisplayAlerts = false;// 打开工作簿workbook = excelApp.Workbooks.Open(filePath,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing);worksheet = (Excel.Worksheet)workbook.Worksheets[1];// 获取使用的范围Excel.Range usedRange = worksheet.UsedRange;int rowCount = usedRange.Rows.Count;int colCount = usedRange.Columns.Count;Console.WriteLine("工作表名称: " + worksheet.Name);Console.WriteLine("行数: {0}, 列数: {1}", rowCount, colCount);Console.WriteLine("\n数据内容:");// 读取所有数据for (int row = 1; row <= rowCount; row++){for (int col = 1; col <= colCount; col++){Excel.Range cell = (Excel.Range)worksheet.Cells[row, col];object value = cell.Value2;if (value != null){Console.Write(value.ToString() + "\t");}else{Console.Write("NULL\t");}}Console.WriteLine();}// 读取特定单元格Excel.Range specificCell = (Excel.Range)worksheet.Cells[2, 1];Console.WriteLine("\n单元格A2的值: " + specificCell.Value2);Console.WriteLine("单元格A2的字体大小: " + specificCell.Font.Size);Console.WriteLine("单元格A2的字体颜色: " + specificCell.Font.Color);}catch (Exception ex){Console.WriteLine("读取Excel文档时出错: " + ex.Message);throw;}finally{if (worksheet != null) Marshal.ReleaseComObject(worksheet);if (workbook != null){workbook.Close();Marshal.ReleaseComObject(workbook);}if (excelApp != null){excelApp.Quit();Marshal.ReleaseComObject(excelApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

3. 修改Excel文档

/// <summary>
/// 修改Excel文档
/// </summary>
public static void ModifyExcelDocument(string filePath)
{Excel.Application excelApp = null;Excel.Workbook workbook = null;Excel.Worksheet worksheet = null;try{excelApp = new Excel.Application();excelApp.Visible = false;excelApp.DisplayAlerts = false;workbook = excelApp.Workbooks.Open(filePath,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing);worksheet = (Excel.Worksheet)workbook.Worksheets[1];// 修改特定单元格worksheet.Cells[2, 2] = 250; // 修改销售数量// 添加新行int lastRow = worksheet.UsedRange.Rows.Count + 1;worksheet.Cells[lastRow, 1] = "新产品";worksheet.Cells[lastRow, 2] = 100;worksheet.Cells[lastRow, 3] = 300.00;worksheet.Cells[lastRow, 4].Formula = string.Format("=B{0}*C{1}", lastRow, lastRow);// 设置新行样式Excel.Range newRow = worksheet.Range[string.Format("A{0}", lastRow), string.Format("D{0}", lastRow)];newRow.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Green);newRow.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;// 保存修改workbook.Save();Console.WriteLine("Excel文档修改成功");}catch (Exception ex){Console.WriteLine("修改Excel文档时出错: " + ex.Message);throw;}finally{if (worksheet != null) Marshal.ReleaseComObject(worksheet);if (workbook != null){workbook.Close();Marshal.ReleaseComObject(workbook);}if (excelApp != null){excelApp.Quit();Marshal.ReleaseComObject(excelApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

4. Excel添加图表

/// <summary>
/// 在Excel中添加图表
/// </summary>
public static void AddChartToExcel(string filePath)
{Excel.Application excelApp = null;Excel.Workbook workbook = null;Excel.Worksheet worksheet = null;try{excelApp = new Excel.Application();excelApp.Visible = false;excelApp.DisplayAlerts = false;workbook = excelApp.Workbooks.Open(filePath,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing);worksheet = (Excel.Worksheet)workbook.Worksheets[1];// 创建图表Excel.ChartObjects chartObjs = (Excel.ChartObjects)worksheet.ChartObjects(Type.Missing);Excel.ChartObject chartObj = chartObjs.Add(300, 50, 400, 300);Excel.Chart chart = chartObj.Chart;// 设置数据源(假设数据在A1:D6)Excel.Range dataRange = worksheet.Range["A1", "D6"];chart.SetSourceData(dataRange, Type.Missing);// 设置图表类型为柱状图chart.ChartType = Excel.XlChartType.xlColumnClustered;// 设置图表标题chart.HasTitle = true;chart.ChartTitle.Text = "产品销售统计";chart.ChartTitle.Font.Size = 14;chart.ChartTitle.Font.Bold = true;workbook.Save();Console.WriteLine("图表添加成功");}catch (Exception ex){Console.WriteLine("添加图表时出错: " + ex.Message);throw;}finally{if (worksheet != null) Marshal.ReleaseComObject(worksheet);if (workbook != null){workbook.Close();Marshal.ReleaseComObject(workbook);}if (excelApp != null){excelApp.Quit();Marshal.ReleaseComObject(excelApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

PowerPoint文档操作

1. 创建PowerPoint文档

public class PowerPointDocumentHelper
{/// <summary>/// 创建PowerPoint文档/// </summary>public static void CreatePowerPointDocument(string filePath){PowerPoint.Application pptApp = null;PowerPoint.Presentation presentation = null;try{pptApp = new PowerPoint.Application();// 创建新演示文稿presentation = pptApp.Presentations.Add(MsoTriState.msoTrue);// 添加标题幻灯片PowerPoint.Slide slide1 = presentation.Slides.Add(1, PowerPoint.PpSlideLayout.ppLayoutTitle);PowerPoint.TextRange titleRange = slide1.Shapes[1].TextFrame.TextRange;titleRange.Text = "公司年度报告";titleRange.Font.Size = 44;titleRange.Font.Bold = MsoTriState.msoTrue;titleRange.Font.Color.RGB = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.DarkBlue);titleRange.Font.Name = "微软雅黑";PowerPoint.TextRange subtitleRange = slide1.Shapes[2].TextFrame.TextRange;subtitleRange.Text = "2024年度总结\n演示文稿";subtitleRange.Font.Size = 24;subtitleRange.Font.Color.RGB = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Gray);// 添加内容幻灯片PowerPoint.Slide slide2 = presentation.Slides.Add(2, PowerPoint.PpSlideLayout.ppLayoutText);PowerPoint.TextRange slide2Title = slide2.Shapes[1].TextFrame.TextRange;slide2Title.Text = "主要内容";slide2Title.Font.Size = 32;slide2Title.Font.Bold = MsoTriState.msoTrue;slide2Title.Font.Color.RGB = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.DarkBlue);PowerPoint.TextRange slide2Content = slide2.Shapes[2].TextFrame.TextRange;slide2Content.Text = "• 市场分析\n• 财务报告\n• 团队建设\n• 未来规划";slide2Content.Font.Size = 20;slide2Content.ParagraphFormat.Bullet.Type = PowerPoint.PpBulletType.ppBulletUnnumbered;// 添加带图片的幻灯片PowerPoint.Slide slide3 = presentation.Slides.Add(3, PowerPoint.PpSlideLayout.ppLayoutTitleOnly);PowerPoint.TextRange slide3Title = slide3.Shapes[1].TextFrame.TextRange;slide3Title.Text = "数据展示";slide3Title.Font.Size = 32;slide3Title.Font.Bold = MsoTriState.msoTrue;// 添加文本框PowerPoint.Shape textBox = slide3.Shapes.AddTextbox(MsoTextOrientation.msoTextOrientationHorizontal,100, 150, 600, 300);textBox.TextFrame.TextRange.Text = "这里可以展示重要数据和图表";textBox.TextFrame.TextRange.Font.Size = 24;textBox.TextFrame.TextRange.Font.Color.RGB = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);textBox.Fill.ForeColor.RGB = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.LightYellow);textBox.Line.Visible = MsoTriState.msoTrue;// 保存演示文稿presentation.SaveAs(filePath, PowerPoint.PpSaveAsFileType.ppSaveAsDefault, MsoTriState.msoTrue);Console.WriteLine("PowerPoint文档创建成功: " + filePath);}catch (Exception ex){Console.WriteLine("创建PowerPoint文档时出错: " + ex.Message);throw;}finally{if (presentation != null){presentation.Close();Marshal.ReleaseComObject(presentation);}if (pptApp != null){pptApp.Quit();Marshal.ReleaseComObject(pptApp);}GC.Collect();GC.WaitForPendingFinalizers();}}
}

2. 读取PowerPoint文档

/// <summary>
/// 读取PowerPoint文档
/// </summary>
public static void ReadPowerPointDocument(string filePath)
{PowerPoint.Application pptApp = null;PowerPoint.Presentation presentation = null;try{pptApp = new PowerPoint.Application();// 打开演示文稿presentation = pptApp.Presentations.Open(filePath,MsoTriState.msoTrue, // ReadOnlyMsoTriState.msoTrue, // UntitledMsoTriState.msoFalse); // WithWindowConsole.WriteLine("演示文稿名称: " + presentation.Name);Console.WriteLine("幻灯片数量: " + presentation.Slides.Count);Console.WriteLine("\n幻灯片内容:");// 遍历所有幻灯片foreach (PowerPoint.Slide slide in presentation.Slides){Console.WriteLine("\n--- 幻灯片 " + slide.SlideIndex + " ---");// 遍历幻灯片中的所有形状foreach (PowerPoint.Shape shape in slide.Shapes){if (shape.HasTextFrame == MsoTriState.msoTrue){if (shape.TextFrame.HasText == MsoTriState.msoTrue){Console.WriteLine("文本内容: " + shape.TextFrame.TextRange.Text);Console.WriteLine("字体大小: " + shape.TextFrame.TextRange.Font.Size);Console.WriteLine("字体名称: " + shape.TextFrame.TextRange.Font.Name);}}}}}catch (Exception ex){Console.WriteLine("读取PowerPoint文档时出错: " + ex.Message);throw;}finally{if (presentation != null){presentation.Close();Marshal.ReleaseComObject(presentation);}if (pptApp != null){pptApp.Quit();Marshal.ReleaseComObject(pptApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

3. 修改PowerPoint文档

/// <summary>
/// 修改PowerPoint文档
/// </summary>
public static void ModifyPowerPointDocument(string filePath)
{PowerPoint.Application pptApp = null;PowerPoint.Presentation presentation = null;try{pptApp = new PowerPoint.Application();presentation = pptApp.Presentations.Open(filePath,MsoTriState.msoFalse, // ReadOnly = falseMsoTriState.msoTrue,MsoTriState.msoFalse);// 修改第一张幻灯片的标题if (presentation.Slides.Count > 0){PowerPoint.Slide slide1 = presentation.Slides[1];if (slide1.Shapes.Count > 0){slide1.Shapes[1].TextFrame.TextRange.Text = "修改后的标题";slide1.Shapes[1].TextFrame.TextRange.Font.Color.RGB = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);}}// 添加新幻灯片PowerPoint.Slide newSlide = presentation.Slides.Add(presentation.Slides.Count + 1,PowerPoint.PpSlideLayout.ppLayoutText);newSlide.Shapes[1].TextFrame.TextRange.Text = "新添加的幻灯片";newSlide.Shapes[1].TextFrame.TextRange.Font.Size = 32;newSlide.Shapes[2].TextFrame.TextRange.Text = "这是新添加的内容";newSlide.Shapes[2].TextFrame.TextRange.Font.Size = 20;// 保存修改presentation.Save();Console.WriteLine("PowerPoint文档修改成功");}catch (Exception ex){Console.WriteLine("修改PowerPoint文档时出错: " + ex.Message);throw;}finally{if (presentation != null){presentation.Close();Marshal.ReleaseComObject(presentation);}if (pptApp != null){pptApp.Quit();Marshal.ReleaseComObject(pptApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

转换为PDF

1. Word转PDF

public class PDFConverter
{/// <summary>/// 将Word文档转换为PDF/// </summary>public static void ConvertWordToPDF(string wordFilePath, string pdfFilePath){Word.Application wordApp = null;Word.Document doc = null;try{wordApp = new Word.Application();wordApp.Visible = false;object fileName = wordFilePath;object missing = System.Reflection.Missing.Value;doc = wordApp.Documents.Open(ref fileName, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing, ref missing, ref missing,ref missing, ref missing, ref missing);// 导出为PDFdoc.ExportAsFixedFormat(pdfFilePath,Word.WdExportFormat.wdExportFormatPDF,false, // OpenAfterExportWord.WdExportOptimizeFor.wdExportOptimizeForPrint,Word.WdExportRange.wdExportAllDocument,0, // From0, // ToWord.WdExportItem.wdExportDocumentContent,true, // IncludeDocPropstrue, // KeepIRMWord.WdExportCreateBookmarks.wdExportCreateWordBookmarks,true, // DocStructureTagstrue, // BitmapMissingFontsfalse); // UseISO19005_1Console.WriteLine("Word转PDF成功: " + pdfFilePath);}catch (Exception ex){Console.WriteLine("Word转PDF时出错: " + ex.Message);throw;}finally{if (doc != null){doc.Close();Marshal.ReleaseComObject(doc);}if (wordApp != null){wordApp.Quit();Marshal.ReleaseComObject(wordApp);}GC.Collect();GC.WaitForPendingFinalizers();}}
}

2. Excel转PDF

/// <summary>
/// 将Excel文档转换为PDF
/// </summary>
public static void ConvertExcelToPDF(string excelFilePath, string pdfFilePath)
{Excel.Application excelApp = null;Excel.Workbook workbook = null;try{excelApp = new Excel.Application();excelApp.Visible = false;excelApp.DisplayAlerts = false;workbook = excelApp.Workbooks.Open(excelFilePath,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing, Type.Missing, Type.Missing,Type.Missing, Type.Missing);// 导出为PDFworkbook.ExportAsFixedFormat(Excel.XlFixedFormatType.xlTypePDF,pdfFilePath,Excel.XlFixedFormatQuality.xlQualityStandard,true, // IncludeDocPropertiesfalse, // IgnorePrintAreasType.Missing,Type.Missing,false, // OpenAfterPublishType.Missing);Console.WriteLine("Excel转PDF成功: " + pdfFilePath);}catch (Exception ex){Console.WriteLine("Excel转PDF时出错: " + ex.Message);throw;}finally{if (workbook != null){workbook.Close();Marshal.ReleaseComObject(workbook);}if (excelApp != null){excelApp.Quit();Marshal.ReleaseComObject(excelApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

3. PowerPoint转PDF

/// <summary>
/// 将PowerPoint文档转换为PDF
/// </summary>
public static void ConvertPowerPointToPDF(string pptFilePath, string pdfFilePath)
{PowerPoint.Application pptApp = null;PowerPoint.Presentation presentation = null;try{pptApp = new PowerPoint.Application();presentation = pptApp.Presentations.Open(pptFilePath,MsoTriState.msoTrue,MsoTriState.msoTrue,MsoTriState.msoFalse);// 导出为PDFpresentation.ExportAsFixedFormat(pdfFilePath,PowerPoint.PpFixedFormatType.ppFixedFormatTypePDF,PowerPoint.PpFixedFormatIntent.ppFixedFormatIntentPrint,MsoTriState.msoFalse, // FrameSlidesPowerPoint.PpPrintHandoutOrder.ppPrintHandoutVerticalFirst,PowerPoint.PpPrintOutputType.ppPrintOutputSlides,MsoTriState.msoFalse, // PrintHiddenSlidesnull,PowerPoint.PpPrintRangeType.ppPrintAll,string.Empty,true, // IncludeDocPropertiestrue, // KeepIRMSettingstrue, // DocStructureTagstrue, // BitmapMissingFontsfalse); // UseISO19005_1Console.WriteLine("PowerPoint转PDF成功: " + pdfFilePath);}catch (Exception ex){Console.WriteLine("PowerPoint转PDF时出错: " + ex.Message);throw;}finally{if (presentation != null){presentation.Close();Marshal.ReleaseComObject(presentation);}if (pptApp != null){pptApp.Quit();Marshal.ReleaseComObject(pptApp);}GC.Collect();GC.WaitForPendingFinalizers();}
}

完整示例程序

using System;
using System.IO;
using System.Runtime.InteropServices;
using Word = Microsoft.Office.Interop.Word;
using Excel = Microsoft.Office.Interop.Excel;
using PowerPoint = Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office.Core;namespace OfficeDocumentDemo
{class Program{static void Main(string[] args){try{string outputDir = @"C:\OfficeDocuments\";// 创建输出目录if (!Directory.Exists(outputDir)){Directory.CreateDirectory(outputDir);}Console.WriteLine("开始Office文档操作演示...\n");// Word操作Console.WriteLine("=== Word文档操作 ===");string wordFile = Path.Combine(outputDir, "示例文档.docx");string wordWithTable = Path.Combine(outputDir, "带表格文档.docx");WordDocumentHelper.CreateWordDocument(wordFile);WordDocumentHelper.InsertTableInWord(wordWithTable);WordDocumentHelper.ReadWordDocument(wordFile);// Excel操作Console.WriteLine("\n=== Excel文档操作 ===");string excelFile = Path.Combine(outputDir, "销售数据.xlsx");ExcelDocumentHelper.CreateExcelDocument(excelFile);ExcelDocumentHelper.ReadExcelDocument(excelFile);ExcelDocumentHelper.ModifyExcelDocument(excelFile);// PowerPoint操作Console.WriteLine("\n=== PowerPoint文档操作 ===");string pptFile = Path.Combine(outputDir, "年度报告.pptx");PowerPointDocumentHelper.CreatePowerPointDocument(pptFile);PowerPointDocumentHelper.ReadPowerPointDocument(pptFile);// PDF转换Console.WriteLine("\n=== 转换为PDF ===");PDFConverter.ConvertWordToPDF(wordFile, Path.Combine(outputDir, "示例文档.pdf"));PDFConverter.ConvertExcelToPDF(excelFile, Path.Combine(outputDir, "销售数据.pdf"));PDFConverter.ConvertPowerPointToPDF(pptFile, Path.Combine(outputDir, "年度报告.pdf"));Console.WriteLine("\n所有操作完成!");Console.WriteLine("文件保存在: " + outputDir);}catch (Exception ex){Console.WriteLine("程序执行出错: " + ex.Message);Console.WriteLine("堆栈跟踪: " + ex.StackTrace);}Console.WriteLine("\n按任意键退出...");Console.ReadKey();}}
}

注意事项

1. COM对象释放

必须正确释放COM对象,避免内存泄漏:

// 正确的释放顺序
if (worksheet != null) Marshal.ReleaseComObject(worksheet);
if (workbook != null) 
{workbook.Close();Marshal.ReleaseComObject(workbook);
}
if (excelApp != null) 
{excelApp.Quit();Marshal.ReleaseComObject(excelApp);
}
GC.Collect();
GC.WaitForPendingFinalizers();

2. Office版本兼容性

  • 代码基于Office 2010(14.0版本)
  • 不同Office版本可能有API差异
  • 建议检查目标机器的Office版本

3. 错误处理

try
{// Office操作代码
}
catch (COMException comEx)
{Console.WriteLine("COM异常: " + comEx.Message);
}
catch (Exception ex)
{Console.WriteLine("一般异常: " + ex.Message);
}
finally
{// 清理资源
}

4. 性能优化建议

  • 批量操作时关闭屏幕更新:excelApp.ScreenUpdating = false;
  • 关闭自动计算:excelApp.Calculation = Excel.XlCalculation.xlCalculationManual;
  • 完成后记得恢复设置

5. 常见问题

问题1:找不到Office库引用

  • 解决:确保安装了Office 2010
  • 在COM引用中添加Microsoft Office 14.0 Object Library

问题2:权限错误

  • 解决:以管理员身份运行程序
  • 检查文件路径的写入权限

问题3:进程未正确关闭

  • 解决:使用Task Manager检查是否有残留的Office进程
  • 确保finally块中正确调用Quit()和ReleaseComObject()

6. 部署注意事项

  • 目标机器必须安装Microsoft Office
  • 需要安装.NET Framework 4.0或更高版本
  • 某些功能需要Office激活

7. 颜色设置说明

// Word中的颜色
range.Font.Color = Word.WdColor.wdColorRed;// Excel中的颜色(使用RGB)
cell.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);// PowerPoint中的颜色
shape.TextFrame.TextRange.Font.Color.RGB = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red);

总结

本教程涵盖了C#中操作Office文档的核心功能:

Word操作:创建、读取、修改、表格操作
Excel操作:数据处理、格式设置、公式计算
PowerPoint操作:幻灯片创建、内容编辑
PDF转换:三种文档格式转PDF
样式设置:字体、颜色、大小等

代码可直接在Visual Studio 2010和.NET Framework 4.0环境下使用。

http://www.dtcms.com/a/537820.html

相关文章:

  • HTML 表单控件
  • 基于C#的文档处理
  • 免费网站制作视频教程自适应型网站建设服务电话
  • nacos集群部署配置
  • 从小咖秀到 Sora 2:AI 短视频的商业化演进逻辑
  • 织梦网站程序安装网站开发计划书范文
  • Jackson 常用注解与完整用法总结
  • 浙江江能建设有限公司网站网店怎么推广和宣传
  • 在SCNet DCU异构环境使用Ollama 0.5.7启动deepseek等大模型
  • aspnet网站模板会员可见的网站开发
  • 网站有哪几种类型微信上wordpress
  • SQL语言基础
  • 找能做网站的wordpress 读取用户信息
  • 做网站得基础阿里首个网站开发人员
  • 佛山网站上排名企业培训师资格证报考2023
  • o2o网站建设策划淄博网站建设 很乱
  • 商品网站建设实训报告专业做轴承的网站
  • GJOI 10.23 题解
  • 《HTTP 的进化史:从 1.0 到 3.0 的飞跃》
  • wordpress 首页导航神马搜索seo优化排名
  • 淄博做网站小程序的公司域名免费注册0元注册
  • Vue3 项目创建指南(Vue-CLI vs Vite 对比)
  • 为IvorySQL增添PACKAGE语法帮助
  • 软件开发公司网站模板所有网站都要备案吗
  • 牛客101:二叉树
  • LangChain最详细教程之Chains
  • 声纹识别:声音中的“指纹”重塑无感身份认证
  • RDPWD!ShareClass::UPSendOrders函数中的RDPWD!ShareClass::SC_FlushAndAllocPackage函数分析
  • 怎么建设网站容易被百度抓取app开发公司 无冬
  • 站长字体网页美工培训班