C#开源组件之Word文件的操作:一

您所在的位置:网站首页 rtf如何转为word文档 C#开源组件之Word文件的操作:一

C#开源组件之Word文件的操作:一

2024-07-17 13:42:25| 来源: 网络整理| 查看: 265

经常使用C#开发,总会接触到对Word文档的编辑操作,排除开.Net自带的Office操作组件不说,之所以不说是由于其运行时需要Word环境,且其资料相较比较完善,需要了解的看客可以自行去百度或阅读MSDN。 本文过程中产出的Demo代码,会放在CSDN与Git上。 CSDN中Demo路径为:https://download.csdn.net/download/a13407142317/12176058 其中VS版本为VS2019(使用改版本是要跟上.Net的更新步幅) 使用环境如下:emmm…也就是使用【.Net Framework 4】(之所以为这个是因为专业领域导致的研究支撑环境,望各位见谅) 在这里插入图片描述

一、本段介绍的时C#中三种操作Word文档的开源组件 1.Docx 其官网网站为:[http://docx.codeplex.com/](http://docx.codeplex.com/) git访问地址为:[https://github.com/xceedsoftware/DocX](https://github.com/xceedsoftware/DocX) 作者存放CSDN地址: 2.Aspose.Words 其网站地址为:[https://www.evget.com/product/564/update?uid=12720](https://www.evget.com/product/564/update?uid=12720) 作者存放CSDN地址: 3.NPOI 是的NPOI也可以导出Word

我将尽我所知道的从以下几点来比对和使用上述两种Word开源组件 1.介绍以及功能实现(本篇文章) 2.两者能支持的异同点 3.两者操作Word文档的效率 4.两者存在什么缺陷 其次在以上的基础上使用桥接模式封装出统一的操作对象。 最后共享自我实现一个输出Word的代码组织,欢迎大家斧正。

介绍以及功能实现。

一下为准备好的Demo代码,组织结构如下,前文中已经附上了资源连接,有需要的看客老爷可以下载

1.DocX的介绍以及功能实现 1.1. 简介

DocX是一个在不需要安装word的情况下对word进行操作的开源轻量级.net组件,是由爱尔兰的一个叫Cathal Coffey的博士生开发出来的。DocX使得操作word非常轻便,有利于减轻开发负担,提升程序效率。DocX在Codeplex和Github上都有开源。

1.2.安装与获取途径

http://docx.codeplex.com/releases下载获取

NUGET获取 在vs环境下,打开包管理控制台执行 Install-Package DocX【本文采用此方法】

https://github.com/WordDocX/DocX

1.3功能实现 1.3.1创建Word文档以及在Word文档中输入字符串信息 创建Docx文件 /// /// 创建Docx /// /// 文件路径 /// public static bool CreateFile(string strFilePath) { try { DocX document = DocX.Create(strFilePath); document.Save(); return true; } catch (Exception ex) { return false; } }

效果如下: 在这里插入图片描述

创建文件并向其中输入信息 /// /// 创建文档并填充字符串信息 /// /// 文件路径 /// 字符串填充信息 /// public static bool CreateFileAndFillStringInfo(string strFilePath, string strFillInfo) { try { DocX document = DocX.Create(strFilePath); Paragraph p = document.InsertParagraph(); p.Append(strFillInfo); document.Save(); return true; } catch (Exception ex) { return false; } }

效果如下: 在这里插入图片描述

1.3.2打开Word文档并对Word文档并进行编辑 /// /// 打开文件并填充信息 /// /// /// private void btnOpenFileAndFillInfo_Click(object sender, EventArgs e) { Docx_WordHelper pDocx_WordHelper = new Docx_WordHelper(ModleFilePath); pDocx_WordHelper.AddStringInfo(FillInfo); pDocx_WordHelper.SaveAs(DocxFileOutputPath); } ------------------------------------------------------------------- public Docx_WordHelper(string strFilePath) { CurrentDocument = DocX.Load(strFilePath); } public void AddStringInfo(string strInfo) { Paragraph p = CurrentDocument.InsertParagraph(); p.Append(strInfo); } /// /// 另存文件 /// /// /// public bool SaveAs(string strFilePath) { try { CurrentDocument.SaveAs(strFilePath); return true; } catch (Exception ex) { return false; } }

效果如下: 在这里插入图片描述

1.3.2.1替换字符串

替换字符有很多重载函数,自行挖掘,此处就不一一列举了。

/// /// 替换字符 /// /// /// private void btnReplaceText_Click(object sender, EventArgs e) { CurrentDocx_WordHelper.ReplaceText("[Name]", "落霞与孤鹜齐飞,秋水共长天一色"); } ----------------------------------------------------------------- #region 替换字符信息 public void ReplaceText(string strOldInfo, string strNewInfo) { CurrentDocument.ReplaceText(strOldInfo, strNewInfo); } #endregion

效果如下: 1.模板文件 在这里插入图片描述 替换后效果如下: 在这里插入图片描述

1.3.2.2指定位置插入各类信息 字符串 在指定位置插入字符串信息,建议最好的方法便是替换字符串,一方便、二便是能够保留替换前字符串的样式。以下中通过width=0,使用最合适的宽度并同比例缩小高度。添加图片 private void btnAddImageByLocation_Click(object sender, EventArgs e) { CurrentDocx_WordHelper.FindLocationByText("[NameImage]"); CurrentDocx_WordHelper.AddImage(GoChinaFilePath); CurrentDocx_WordHelper.ReplaceText("[NameImage]",""); } ----------------------------------------------------------------------- /// /// 通过字符串定位 /// /// public void FindLocationByText(string strInfo) { CurrentParagraph = CurrentDocument.Paragraphs.First(a => a.Text == strInfo); } /// /// 添加图片 /// /// public void AddImage(string strImageFilePath, int Width = 0, int Height = 0) { Image img = CurrentDocument.AddImage(strImageFilePath); Picture pic = img.CreatePicture(); if (Width != 0) { pic.Width = Width; pic.Height = Height; } else { int dWidth = Convert.ToInt32(CurrentDocument.PageWidth - 250); int dHeigth = Convert.ToInt32(pic.Height * dWidth / pic.Width); pic.Width = dWidth; pic.Height = dHeigth; } Paragraph p1 = CurrentParagraph.InsertPicture(pic); }

效果如下: 在这里插入图片描述

表与图标 private void btnAddTableByLocation_Click(object sender, EventArgs e) { DataTable dt = new DataTable(); DataColumn dc1 = new DataColumn(); dc1.ColumnName = "字段一"; dt.Columns.Add(dc1); DataColumn dc2 = new DataColumn(); dc2.ColumnName = "字段二"; dt.Columns.Add(dc2); DataColumn dc3 = new DataColumn(); dc3.ColumnName = "字段三"; dt.Columns.Add(dc3); for (int i = 0; i dr[j] = j; } dt.Rows.Add(dr); } CurrentDocx_WordHelper.FindLocationByText("[FillTable]"); CurrentDocx_WordHelper.AddTable(dt); CurrentDocx_WordHelper.ReplaceText("[FillTable]", ""); } -------------------------------------------------------------------------------------------- /// /// 插入表 /// /// public void AddTable(DataTable dt) { Table table=CurrentParagraph.InsertTableAfterSelf(dt.Rows.Count + 1, dt.Columns.Count); table.Design = TableDesign.ColorfulGridAccent2; table.Alignment = Alignment.center; for (int i = 0; i for (int i = 0; i public class AsposeWord_WordHelper { private Document CurrentDocument = null; private DocumentBuilder CurrentDocumentBuilder = null; /// /// 当前文档文件路径 /// public string CurrentStringFilePath { get; private set; } public AsposeWord_WordHelper() { } public AsposeWord_WordHelper(string strFilePath) { OpenFile(strFilePath); } /// /// 创建文件 /// /// /// public bool CreateFile(string strFilePath) { try { OpenFile(strFilePath); return true; } catch (Exception ex) { return false; } } /// /// 打开文件 /// /// public void OpenFile(string strFilePath) { CurrentStringFilePath = strFilePath; CurrentDocument = new Document(strFilePath); CurrentDocumentBuilder = new DocumentBuilder(CurrentDocument); } public void Save() { CurrentDocument.Save(CurrentStringFilePath); } public void SaveAs(string strFilePath) { CurrentDocument.Save(strFilePath); } #region 替换字符信息 public void ReplaceText(string strOldInfo, string strNewInfo) { CurrentDocument.Range.Replace(strOldInfo, strNewInfo, new FindReplaceOptions()); } #endregion #region 指定位置添加信息 /// /// 通过字符串定位 /// /// public void FindLocationByText(string strInfo) { CurrentDocumentBuilder.MoveToBookmark(strInfo); } /// /// 添加描述信息 /// /// public void AddString(string strInfo) { CurrentDocumentBuilder.Font.Size = 18; CurrentDocumentBuilder.Font.Name = "宋体"; CurrentDocumentBuilder.Bold = true; CurrentDocumentBuilder.Writeln(strInfo); } /// /// 通过书签添加字符串信息 /// /// /// public void AddStringByBookMark(string strBookmarkName, string strInfo) { CurrentDocumentBuilder.MoveToBookmark(strInfo); CurrentDocumentBuilder.Font.Size = 18; CurrentDocumentBuilder.Font.Name = "宋体"; CurrentDocumentBuilder.Bold = true; CurrentDocumentBuilder.Writeln(strInfo); } /// /// 添加图片 /// /// public void AddImage(string strImageFilePath, int Width = 0, int Height = 0) { CurrentDocumentBuilder.InsertImage(strImageFilePath); } /// /// 通过书签添加图片 /// /// /// public void AddImageByBookMark(string strBookmarkName, string strImageFilePath, int Width = 0, int Height = 0) { CurrentDocumentBuilder.MoveToBookmark(strBookmarkName); CurrentDocumentBuilder.InsertImage(strImageFilePath); } /// /// 添加超链接 /// /// public void AddLink(string strLinkAddress, string strLinkName) { CurrentDocumentBuilder.InsertHyperlink(strLinkAddress, strLinkName, false); } /// /// 通过书签添加超链接 /// /// /// public void AddLinkByBookMark(string strBookmarkName, string strLinkName, string strLinkAddress) { CurrentDocumentBuilder.MoveToBookmark(strBookmarkName); CurrentDocumentBuilder.InsertHyperlink(strLinkAddress, strLinkName, false); } /// /// 插入表 /// /// public void AddTable(DataTable dt) { int RowIndex = 1; CurrentDocumentBuilder.StartTable(); RowFormat rowf = CurrentDocumentBuilder.RowFormat; rowf.Height = 40; //设置单元格是否水平合并,None为不合并 CurrentDocumentBuilder.CellFormat.HorizontalMerge = CellMerge.None; //设置单元格是否垂直合并,None为不合并 CurrentDocumentBuilder.CellFormat.VerticalMerge = CellMerge.None; //设置单元格宽 CurrentDocumentBuilder.CellFormat.Width = 80; //单元格垂直对齐方向 CurrentDocumentBuilder.CellFormat.VerticalAlignment = CellVerticalAlignment.Center; //单元格水平对齐方向 CurrentDocumentBuilder.ParagraphFormat.Alignment = ParagraphAlignment.Center; //单元格内文字设为多行(默认为单行,会影响单元格宽) //单元格内添加文字 CurrentDocumentBuilder.CellFormat.FitText = true; foreach (DataColumn dc in dt.Columns) { //插入一个单元格 CurrentDocumentBuilder.InsertCell(); CurrentDocumentBuilder.Write(dc.ColumnName); } CurrentDocumentBuilder.EndRow(); for (int i = 0; i //插入一个单元格 CurrentDocumentBuilder.InsertCell(); CurrentDocumentBuilder.Write(dr[dc].ToString()); } CurrentDocumentBuilder.EndRow(); //添加一行 } CurrentDocumentBuilder.EndTable(); } #endregion } }

Aspose的许可会发生什么问题,问题如下: 在这里插入图片描述

至此本片文章结束 psCSDN的代码粘贴不能有空行,不然会出现bug



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


    图片新闻

    实验室药品柜的特性有哪些
    实验室药品柜是实验室家具的重要组成部分之一,主要
    小学科学实验中有哪些教学
    计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
    实验室各种仪器原理动图讲
    1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
    高中化学常见仪器及实验装
    1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
    微生物操作主要设备和器具
    今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
    浅谈通风柜使用基本常识
     众所周知,通风柜功能中最主要的就是排气功能。在

    专题文章

      CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭