“SharpDocx” C#项目中用于创建 Word 文档的轻量级模板引擎

简介:

SharpDocx是一个轻量级的模板引擎,用于创建Word文档。它允许开发者基于视图生成Word文档,这个视图本身就是一个Word文档,可以根据需要设置简单或复杂的布局。

以下是一些主要特点:

  1. 模板引擎类似Razor:可以使用类似于Razor的语法在Word模板中插入C#代码。
  2. 支持MVC模式:支持模型-视图-控制器(MVC)设计模式,可以在模板中使用自己的C#模型。
  3. 视图中嵌入C#代码:在视图中可以插入C#代码来动态生成文本、图片或表格等内容。
  4. 易于使用:生成文档的过程分为两步,首先是在Word中创建一个包含C#代码的视图,然后基于这个视图创建文档。
  5. 功能强大:除了基本的文本插入功能,SharpDocx还支持更复杂的操作,如循环和条件语句,以适应不同的文档生成需求。

gitHub地址👇

GitHub - egonl/SharpDocx: Lightweight template engine for creating Word documents

演示: 

在c#项目中使用SharpDocx可以选择直接安装SharpDocx的NuGet包

NuGet\Install-Package SharpDocx -Version 2.4.0

因为这里创建word的数据是从pgsql中获取的,因此还需安装Dapper和Npgsql的Nuget包,用于从数据库中获取数据。

我们在数据中创建一个表

创建一条测试数据,其中photo的URL是在网上随便找的一个图片的链接

 然后我们在项目中创建与之对应的实体类

public class WordData
{public string? Title { get; set;}public string? Name { get; set; }public string? Sex { get; set; }public string? Mail { get; set; }public string? Phone { get; set; }public string? Photo { get; set; }
}

新建一个word,作为我们导出word的视图模板,在模板中,我们可以通过Model.字段名来获取实体类中字段的值。并且还可以包含 C# 代码。例如 <%= DateTime.Now %> 就是插入当前日期和时间。如下图案例中,我通过一个for循环遍历两次我的图片,稍后导出文件中我的图片就将会显示两个。

 试图模板准备好之后,我们就可以来写代码了,我们通过Dapepr获取数据库中的worddata表数据,然后通过方法Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); 获取当前项目的路径,在后面的代码中,我们读取当前项目路径下的模板.docx,即刚刚创建的视图模板(文件名可以自定义),然后我们将导出的word也保存到当前路径下,命名为结果.docx

namespace MyNamespace
{class MyClass{public static void Main(string[] args){string connectionString = "Host=localhost;Database=study;Username=postgres;Password=1qazZAQ!";using (var connection = new NpgsqlConnection(connectionString)){connection.Open();string sql = "SELECT * FROM worddata Limit 1";var model = connection.Query<WordData>(sql).FirstOrDefault();model.Title = "个人资料";var directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);var document = DocumentFactory.Create(Path.Combine(directoryName, "模板.docx"), model);document.Generate(Path.Combine(directoryName, "结果.docx"));connection.Close();}}}
}

 运行项目,出现类似下面输出,即表示word创建成功

找到创建的结果.docx,打开如下

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/454828.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单实践 spring clound 使用openfeign

1.概要 这是在前面工程基础上的一个变更。 前工程&#xff1a;检查实验 spring cloud nacos nacos-server-2.3.0-CSDN博客 2 代码 2.1 引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-open…

润唇膏市场分析:预计2029年将达到13亿美元

近年来&#xff0c;随着中国居民人均可支配收入持续增长&#xff0c;“颜值经济”的崛起&#xff0c;中国居民对化妆品的消费将持续上升。唇部是人体肌肤中最薄最娇嫩的部分之一&#xff0c;如果护理不当&#xff0c;极其容易产生唇纹、唇部黑色素沉着、干燥起皮等问题。因此对…

SpringSecurity(17)——OAuth2令牌管理策略

刷新令牌策略 注意&#xff1a;刷新令牌只有在授权码模式和密码模式中才有&#xff0c;对应的指定这两种模式时&#xff0c;在类型上加上refresh_token <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-se…

【优先级队列(大顶堆 小顶堆)】【遍历哈希表键值对】Leetcode 347 前K个高频元素

【优先级队列&#xff08;大顶堆 小顶堆&#xff09;】【排序】Leetcode 347 前K个高频元素 1.不同排序法归纳2.大顶堆和小顶堆3.PriorityQueue操作4.PriorityQueue的升序&#xff08;默认&#xff09;与降序5.问题解决&#xff1a;找前K个最大的元素 &#xff1a;踢走最小的&…

Mixed Content: The page at ‘xxx‘ was loaded over HTTPS, but requested an insecure XMLHttpRequest end

Mixed Content: The page at xxx was loaded over HTTPS, but requested an insecure XMLHttpRequest end 报错信息报错的原因出现的问题解决办法 报错信息 Mixed Content: The page at xxx was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint xxx. Th…

挑战杯 opencv 图像识别 指纹识别 - python

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于机器视觉的指纹识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;4分 该项目较为新颖&#xff0c;适…

功能测试+自动化测试代码覆盖率统计

Jacoco 是一个开源的覆盖率工具。Jacoco 可以嵌入到 Ant 、Maven 中&#xff0c;并提供了 EclEmma Eclipse 插件,也可以使用 Java Agent 技术监控 Java 程序。很多第三方的工具提供了对 Jacoco 的集成&#xff0c;如 sonar、Jenkins、IDEA。 Jacoco 包含了多种尺度的覆盖率计数…

研究表明:论文被大V宣传后,引用次数暴涨2~3倍!

随着AI领域的迅猛发展&#xff0c;学术成果的传播方式发生了显著转变。 期刊审稿周期长&#xff0c;当你还在和审稿人battle时&#xff0c;方法先过时了。而会议虽然没有期刊长&#xff0c;但也有几个月的时间差&#xff0c;为了保护成果的创新性并扩大影响力&#xff0c;很多…

npm 上传一个自己的应用(3) 在项目中导入及使用自己上传到NPM的工具

上文 npm 上传一个自己的应用(2) 创建一个JavaScript函数 并发布到NPM 我们创建了一个函数 并发上了npm 最后 我们这里 我们可以看到它的安装指令 这里 我们可以打开一个vue项目 终端输入 我们的安装指令 npm i 自己的包 如下代码 npm i grtest我们在 node_modules目录 下…

搭建自己的私服 maven 仓库

申明&#xff1a;本文章所使用docker-compose配置文件纯属学习运用&#xff0c;非商用如有雷同请联系本人协调处理。 一、配置docker-compose.yml文件 # 指定docker-compose的版本 version: 3 services: nexus: container_name: nexus_container image: sonatype/nex…

理解进程的一些知识准备

1. 认识冯诺依曼体系结构 计算机有很多的体系结构&#xff0c;但到如今&#xff0c;冯诺依曼体系结构变成了主流。 输入设备&#xff1a;话筒、键盘、摄像头、鼠标、磁盘、网卡… 输出设备&#xff1a;声卡、显示器、打印机、显卡、网卡、磁盘… 有的设备既能作为输入设备又能…

麒麟信安服务器操作系统荣获 “2023年湖南省软件和信息技术服务业名品”

12月22日&#xff0c;由中国软件行业协会、湖南省工业和信息化厅指导&#xff0c;湖南省软件行业协会、长沙市雨花区政府主办的2023年第五届湖南省软件产业高质量发展大会暨湖南省软件行业协会年会召开。会上隆重揭晓了“2023年湖南软件行业知名软件产品和服务”奖项&#xff0…