在這篇文章中,我將分享如何使用 C# 和 Aspose.Cells 移除 Excel (.xlsx) 文件的數位簽名,並且在文件中刪除特定工作表(例如 “Evaluation Warning”)。這段程式碼不僅展示了如何移除簽名,還演示了如何操作 Excel 文件以刪除特定名稱的工作表,這在處理 Excel 文件的自動化操作時非常有用。
程式碼介紹
以下是完整的程式碼,包括兩個主要功能:
- 移除數位簽名。
- 刪除特定名稱的工作表。
主程式碼:btnRemove_Click
此程式碼處理簽名的移除並儲存無簽名的新文件。
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using System.Windows.Forms;
using Aspose.Cells.DigitalSignatures;
using Workbook = Aspose.Cells.Workbook;
...
private void btnRemove_Click(object sender, EventArgs e)
{
// 获取文件路径
string filePath = txtFolderPath.Text;
// 检查文件路径是否有效
if (string.IsNullOrEmpty(filePath))
{
MessageBox.Show("请先选择一个文件路径。");
return;
}
try
{
// 加载包含数字签名的 Excel 文件
Workbook workbook = new Workbook(filePath);
// 移除数字签名
workbook.RemoveDigitalSignature();
// 另存为没有签名的文件
string unsignedFilePath = System.IO.Path.Combine(System.IO.Path.GetDirectoryName(filePath), "unsigned_" + System.IO.Path.GetFileName(filePath));
workbook.Save(unsignedFilePath);
#region myRegion
DeleteSheet(unsignedFilePath, "Evaluation Warning");
#endregion
MessageBox.Show("数字签名已移除并保存到:" + unsignedFilePath);
}
catch (Exception ex)
{
MessageBox.Show("移除签名时出错:" + ex.Message);
}
}
public void DeleteSheet(string path, string sheetName)
{
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.Workbook workbook = null;
try
{
if (string.IsNullOrEmpty(path))
{
Console.WriteLine("文件路径为空,请提供有效的文件路径。");
return;
}
// 打开Excel文件
workbook = excelApp.Workbooks.Open(path);
// 禁用提示,避免删除工作表时的确认对话框
excelApp.DisplayAlerts = false;
// 查找并删除指定名称的工作表
bool sheetFound = false;
foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in workbook.Sheets)
{
if (sheet.Name == sheetName)
{
sheet.Delete();
Console.WriteLine($"工作表 '{sheetName}' 已成功删除。");
sheetFound = true;
break;
}
}
if (!sheetFound)
{
Console.WriteLine($"未找到名称为 '{sheetName}' 的工作表。");
}
// 保存并关闭工作簿
workbook.Save();
}
catch (Exception ex)
{
Console.WriteLine($"删除工作表时出错: {ex.Message}");
}
finally
{
// 恢复提示
excelApp.DisplayAlerts = true;
// 关闭工作簿和Excel应用
workbook?.Close(false);
excelApp.Quit();
System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
excelApp = null;
workbook = null;
GC.Collect();
}
}
myRegion裏面的内容其實可寫可不寫。
因爲這裏用的Aspose.Cells是評價版,不管用這個作什么操作都必然會生成水印。
所有region裏面的操作只是個去掉水印的操作。
這對去掉簽名的文件有效。
反過來,要是利用Aspose.Cells進行操作簽名。簽名一旦完成,則不可修改,那麽水印也會一同保留。
那麽則需要付費修改了。