EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

使用 C# 和 Aspose.Cells 移除 Excel 數位簽名並刪除特定工作表的完整範例

在這篇文章中,我將分享如何使用 C# 和 Aspose.Cells 移除 Excel (.xlsx) 文件的數位簽名,並且在文件中刪除特定工作表(例如 “Evaluation Warning”)。這段程式碼不僅展示了如何移除簽名,還演示了如何操作 Excel 文件以刪除特定名稱的工作表,這在處理 Excel 文件的自動化操作時非常有用。

 

程式碼介紹

以下是完整的程式碼,包括兩個主要功能:

  1. 移除數位簽名。
  2. 刪除特定名稱的工作表。

主程式碼: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進行操作簽名。簽名一旦完成,則不可修改,那麽水印也會一同保留。

那麽則需要付費修改了。

This article was last edited at 2024-11-11 11:13:40

* *