После некоторого поиска в интернете, который не увенчался успехом, я спрошу здесь.
В некоторых публикациях в Интернете говорится, что невозможно применить цифровую подпись к макросу VBA в приложении Excel. Но все статьи, которые я нашел, довольно старые, поэтому я надеюсь, что теперь возможно сделать это с помощью кода.
Моя цель - открыть документ Excel и применить цифровую подпись к макросам vba, если этот документ предполагается, что макросы существуют.
У меня есть следующий код, чтобы определить, есть ли в Excel-документе VBMacros:
string filePath = @"E:\OfficeDocuments\Sample1.xlsm";
object isReadonly = true;
object missing = Missing.Value;
_Application application = new Microsoft.Office.Interop.Excel.Application();
workbook = application.Workbooks.Open(
filePath, missing, isReadonly, missing, missing, missing,
missing, missing, missing, missing, missing, missing,
missing, missing, missing);
bool workbookHasVbProject = workbook.HasVBProject;
Это просто отлично работает.
Теперь я получаю сертификат, который хочу использовать для подписи макросов:
X509Store store = new X509Store(StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly);
X509Certificate2Collection x509Certificate2Collection = store.Certificates;
X509Certificate2Collection certificate2Collection = x509Certificate2Collection.Find(X509FindType.FindBySubjectName, "MyCertificate 01", true);
if (certificate2Collection.Count > 0)
{
X509Certificate2 certificate = certificate2Collection[0];
}
А теперь я понятия не имею, как продолжить ...
Я пробовал:
VBE vbe = application.VBE;
VBProject vbProject = vbe.VBProjects.Item(1);
Но я не вижу возможности подписать макросы.
Неужели нет способа подписать макросы с помощью c # -кода?