C# Spire.Xls将DataTable导出到Excel并加密

news2024/11/27 22:33:45

背景需求:
页面展示信息列表,需要将数据导出到Excel并加密sheet文件和工作簿结构。
代码思路:1.将数据转换为dataTable,2.将dataTable导出到Excel,3.处理加密。

文章目录

  • 引入必要的dll文件
  • 1.将数据转换为DataTable
  • 2.将dataTable转换为excel
  • 3. 加密excel

引入必要的dll文件

引用Spire.Xls。可以在类库节点右击引用,在管理NuGet程序包中找到并添加。
在这里插入图片描述
在这里插入图片描述

1.将数据转换为DataTable

DataTable newTable = new DataTable("Table_New");
DataColumn dc = new DataColumn();
newTable.Columns.Add("userName", Type.GetType("System.String"));
newTable.Columns.Add("Sex", Type.GetType("System.String"));
DataRow newRow;
//第一行的文字
newRow = newTable.NewRow();
//根据实际情况,填充单元格的值
newRow["userName"] = "你猜";
newRow["Sex"] = "男";
newTable.Rows.Add(newRow);

2.将dataTable转换为excel

  Workbook workBook = new Workbook();
  //Worksheet sheet = workBook.CreateEmptySheet("sheet名");//不知为何会生成3个控sheet,待研究
   //创建空sheet
	workBook.CreateEmptySheets(1);
	Worksheet sheet = workBook.Worksheets[0];
	sheet.Name = "sheet名";
	//给A1单元格赋值
	sheet.Range["A1"].Value = "我是A1单元格的内容";
	//合并单元格合并A1:B1
	sheet.Range["A1:B1"].Merge();
	//合并单元格合并A1到B2的数据
	//sheet.Range["A1:B2"].Merge();
	//将dataTable中的数据插入Excel
    sheet.InsertDataTable(table, false, 2, 1, -1, -1);
    //动态合并单元格
    //start为列名编码,count为行号
    string start = GetColumnName(10);//假定取第十列的列名
    int count =2;//假定,根据实际需求处理
    sheet.Range[$"{start}{count}:F2"].Merge();
/// <summary>
/// 获取Excel列名
/// </summary>
/// <param name="dividend"></param>
/// <returns></returns>
private string GetColumnName(int dividend)
{
	var columnName = string.Empty;
	
	while (dividend > 0)
	{
	var modulo = (dividend - 1) % 26;
	columnName = Convert.ToChar(65 + modulo) + columnName;
	dividend = (dividend - modulo) / 26;
	}
	return columnName;
}

2.1设置单元格格式

//将单元格设置为文本形式
sheet.Range[$"A1:E{table.Rows.Count + 1}"].NumberFormat = "@";
  //文字居中
sheet.Range[$"A2:C2"].Style.HorizontalAlignment = HorizontalAlignType.Center;//水平居中
sheet.Range[$"A2:C2"].Style.VerticalAlignment = VerticalAlignType.Center;//垂直居中
 //设置文字大小
sheet.Range[$"A1:C2"].Style.Font.FontName = "Calibri";//字体名称
sheet.Range[$"A1:C2"].Style.Font.Size = 11;//字体大小
  //内边框
sheet.AllocatedRange[$"A1:E24"].BorderInside(LineStyleType.Thin, borderColor: ExcelColors.Black);
//外边框
sheet.AllocatedRange[$"A1:E24"].BorderAround(LineStyleType.Thin, borderColor: ExcelColors.Black);
//自适应宽度
sheet.AllocatedRange.AutoFitColumns();
//固定宽度
sheet.Range[$"A1:A5"].ColumnWidth = 10;

3. 加密excel

//加密工作簿结构
workBook.ProtectWorkbook(false, true, password);
//加密工作表,且允许调整列宽和行高
sheet.Protect(password, SheetProtectionType.FormattingColumns | SheetProtectionType.FormattingRows);
//保存excel文件
workBook.SaveToFile("Excel名称.xlsx", ExcelVersion.Version2010);

3.1加密后实现的效果:
a.工作薄的结构不允许更改,如图:
在这里插入图片描述
b.工作表不允许修改,但允许更改行高和列宽
点击单元格后,提示如下图:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python英文词频统计(哈姆雷特)程序示例

今天继续给大家介绍Python相关知识&#xff0c;本文主要内容是Python英文词频统计程序示例&#xff0c;主要是对英文文本——《哈姆雷特》进行分词。 一、英文文本词频统计思路 想要对《哈姆雷特》进行英文单词词频统计&#xff0c;那么我们首先需要拿到《哈姆雷特》的原文&a…

“笨鸟”逆风飞:一场荣耀的高端越峰征程

2020年的11月17日&#xff0c;荣耀被迫“成年”。 “那一天都是在忙碌过程中度过的&#xff0c;有很多人要去沟通&#xff0c;有很多资产的分割……”&#xff0c;在12月12日央视网财经的访谈节目《云顶对话》中&#xff0c;荣耀CEO赵明首次向外袒露心迹&#xff0c;转身成为对…

C++11标准模板(STL)- 算法(std::max)

定义于头文件 <algorithm> 算法库提供大量用途的函数&#xff08;例如查找、排序、计数、操作&#xff09;&#xff0c;它们在元素范围上操作。注意范围定义为 [first, last) &#xff0c;其中 last 指代要查询或修改的最后元素的后一个元素。 返回各给定值中的较大者 …

构建供销一体化电商交易体系,数商云S2B2B系统实现锂电池企业全面转型升级

近年来&#xff0c;得益于新能源汽车和储能产业的快速发展&#xff0c;相关支撑技术和产业也得到空前关注&#xff0c;锂电池就是其中一员。我国动力电池装机量达到92GWH&#xff0c;同比增长169%&#xff0c;超过全球平均增速&#xff0c;占据着全球近一半的电池装机量。 新能…

Qt 蓝牙库基础

1.目的 使用QT自带的蓝牙功能库进行学习开发&#xff0c;了解蓝牙设备的工作原理和使用流程&#xff0c;目的搭建可以自由控制的蓝牙app&#xff0c;为以后的学习生活做基础。 2.本地设备 采用自己vivo Y53的手机作为实验对象。 使用到的QT蓝牙库的类名&#xff1a; QBlue…

PIC 16F18系列单片机开发 IO口配置与stm32的区别

目录 前言 PIC单片机配置字 电路需要IO口来发挥作用 寄存器和特殊功能寄存器 I/O口 I/O口和单片机内部寄存器之间的对应关系 前言 由于在之前学习嵌入式IDE时候都是直接接触到的是STM32 ARM内核的32位看偏激&#xff0c;现在开发使用的是美国微芯公司推出的PIC系列的单片…

【云原生】kubeadm部署k8s集群

内容预知 架构说明 1.环境准备 2.所有节点安装docker 3. 所有节点安装kubeadm&#xff0c;kubelet和kubectl 4. 部署 Dashboard 5. 安装 部署与k8s集群对接的Harbor仓库 内核参数优化方案 架构说明 前面的文章中&#xff0c;我们采用了二进制包搭建出的k8s集群&#xff…

[附源码]计算机毕业设计动漫电影网站Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

电子采购软件如何提高企业效率?

企业采购致力于提高生产力和效率&#xff0c;并实现更高的职能和跨职能支出的可见性。电子采购软件解决方案帮助企业实现其目标并做得更多&#xff0c;因此成为了具有前瞻性的采购领导人的明智选择。 以下是使用电子采购软件的四个主要优势&#xff1a;1、降低成本 降低成本是电…

python包管理pip常见操作

一、pip安装 暂略 二、pip常用命令 1、显示版本和路径 pip --version 2、获取帮助 pip --help 3.升级 pip pip install -U pip 4.安装资源包 pip install SomePackage # 最新版本 pip install SomePackage1.0.4 # 指定版本 pip install SomePackage&g…

微服务框架 SpringCloud微服务架构 分布式事务 38 动手实践 38.8 案例实现TCC 模式【实现】

微服务框架 【SpringCloudRabbitMQDockerRedis搜索分布式&#xff0c;系统详解springcloud微服务技术栈课程|黑马程序员Java微服务】 分布式事务 文章目录微服务框架分布式事务38 动手实践38.8 案例实现TCC 模式【实现】38.8.1 声明TCC 接口38 动手实践 38.8 案例实现TCC 模…

第34篇 网络(四)FTP(二)

导语 前面讲述了一个最简单的FTP客户端程序的编写&#xff0c;这一节我们将这个程序进行扩展&#xff0c;使其可以浏览并能下载服务器上的所有文件。 环境&#xff1a;Windows Xp Qt 4.8.5QtCreator 2.8.0 目录 一、修改界面二、功能实现 正文 一、修改界面 我们删除了T…

当vivo领先后,该学着“快”起来了

文|智能相对论 作者|佘凯文 随着一个个大热球队的爆冷&#xff0c;今年世界杯赛事正在渐入高潮。就目前的形势来看&#xff0c;世界杯最大的悬念在于究竟是“老王”圆梦&#xff0c;还是“新王”登基&#xff0c;又或者是摩洛哥这只黑马一黑到底。 新老球星的更迭&#xff0…

Selenium浏览器自动化测试框架

selenium简介 介绍 Selenium [1] 是一个用于Web应用程序测试的工具。Selenium测试直接运行在浏览器中&#xff0c;就像真正的用户在操作一样。支持的浏览器包括IE&#xff08;7, 8, 9, 10, 11&#xff09;&#xff0c;Mozilla Firefox&#xff0c;Safari&#xff0c;Google C…

设计模式概述(一)

很多小伙伴&#xff0c;不知道设计模式是什么&#xff1f; 通常我们所说的设计模式是一种设计方案&#xff0c;是前人留下的经验及最佳实践。 想要学习设计模式&#xff0c;至少要把面向对象的基本结构全部了解。 设计模式&#xff0c;是建立在一定基础上的思维训练。 学习设…

macos12.6安装配置opencv4.6.0+opencv contrib4.6.0

1.系统准备好&#xff0c;安装依赖python版本高一点的&#xff0c;并且安装上numpy。 brew install cmake gui及cmake&#xff0c;可能装cmake gui的时候有点问题&#xff0c;先装gui再装cmake。 2.提前下载源码&#xff0c;Releases - OpenCV要求opencv与opencv contrib版本一…

Metal每日分享,UV去雾滤镜效果

本案例的目的是理解如何用Metal实现去雾效果滤镜&#xff0c;类似于UV过滤器&#xff1b; Demo HarbethDemo地址 实操代码 // 去雾效果滤镜 let filter C7Haze.init(distance: 0.5, slope: 0.5)// 方案1: ImageView.image try? BoxxIO(element: originImage, filters: [f…

MyBatis ---- MyBatis的逆向工程

MyBatis ---- MyBatis的逆向工程1. 创建逆向工程的步骤a>添加依赖和插件b>创建MyBatis的核心配置文件c>创建逆向工程的配置文件d>执行MBG插件的generate目标2. QBC查询正向工程&#xff1a;先创建 Java 实体类&#xff0c;由框架负责根据实体类生成数据库表。Hiber…

Spring源码深度解析:十五、@Aspect方式的AOP中篇 - getAdvicesAndAdvisorsForBean

一、前言 文章目录&#xff1a;Spring源码深度解析&#xff1a;文章目录 在上篇中我们概述了Aop 实现的逻辑&#xff0c;但是由于篇幅原因&#xff0c;我们将一部分内容拆成了中篇和下篇内容。本篇即中篇&#xff0c;内容主要是讲述 在 Bean创建过程中Aop 挑选适用于当前Bean…

尚医通-MyBatistPlus:修改和自动填充-乐观锁(三)

目录&#xff1a; &#xff08;1&#xff09;MyBatistPlus&#xff1a;修改和自动填充 &#xff08;2&#xff09;MyBatis-Plus-乐观锁 &#xff08;1&#xff09;MyBatistPlus&#xff1a;修改和自动填充 1、更新操作 注意&#xff1a;update时生成的sql自动是动态sql&…