小言_互联网的博客

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

357人阅读  评论(0)

背景需求:
页面展示信息列表,需要将数据导出到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.工作表不允许修改,但允许更改行高和列宽
点击单元格后,提示如下图:


转载:https://blog.csdn.net/weixin_44084713/article/details/127966598
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场