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

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

引入必要的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.工作表不允许修改,但允许更改行高和列宽
点击单元格后,提示如下图:
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
C#中,你可以使用Spire.XLS库来读写Excel文件。以下是一个简单的示例代码,演示了如何使用Spire.XLS库读取和写入Excel文件: ```csharp using Spire.Xls; class Program { static void Main(string[] args) { // 创建一个Workbook对象 Workbook workbook = new Workbook(); // 加载Excel文件 workbook.LoadFromFile("sample.xlsx"); // 获取第一个Worksheet Worksheet worksheet = workbook.Worksheets[0]; // 读取单元格的值 object cellValue = worksheet.Range["A1"].Value; // 输出单元格的值 Console.WriteLine("A1的值为: " + cellValue.ToString()); // 修改单元格的值 worksheet.Range["A1"].Value = "Hello, World!"; // 保存修改后的Excel文件 workbook.SaveToFile("sample_modified.xlsx", ExcelVersion.Version2013); // 关闭Workbook对象 workbook.Dispose(); Console.WriteLine("Excel文件读写完成!"); Console.ReadLine(); } } ``` 在上面的示例中,我们首先创建一个Workbook对象,并使用`LoadFromFile`方法加载一个名为"sample.xlsx"的Excel文件。然后,我们获取第一个Worksheet,并读取单元格"A1"的值。接下来,我们修改了单元格"A1"的值,并使用`SaveToFile`方法将修改后的Excel文件保存为"sample_modified.xlsx"。最后,我们关闭Workbook对象。 请确保在运行示例代码之前,将Spire.XLS库添加到你的项目中。你可以从Spire官方网站下载并安装Spire.XLS库,或者使用NuGet包管理器在Visual Studio中进行安装。 这只是一个简单的示例,Spire.XLS库还提供了许多其他功能,例如合并单元格、创建图表、设置样式等。你可以查看Spire.XLS的官方文档以了解更多详细信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值