После экспорта данных в книгу Excel с макросами (xlsm) я запускаю макрос, а затем удаляю макрос, чтобы иметь возможность сохранить книгу как xlsx. Для удаления макросов я открываю xlsm в виде zip-архива (через класс C # ZipFile), удаляю запись «xl / vbaProject.bin» и удаляю отношение в «xl / _rels / workbook.xml.rels». Затем я переименовываю файл из xlsm в xlsx. Пока это работает нормально, но когда я открываю файл xlsx в Excel, я получаю «Excel не может открыть файл, потому что формат файла или расширение файла недопустимо. Убедитесь, что файл не был поврежден и что расширение файла соответствует формату файла », так что, кажется, чего-то не хватает, чтобы полностью удалить код VBA в книге. Может ли кто-нибудь помочь мне здесь?
const string vbaProjectEntryName = "xl/vbaProject.bin"; // Contains the VBA code
const string relationsEntryName = "xl/_rels/workbook.xml.rels"; // Relation/Link to the vba project
using (var zip = ZipFile.Open(fileName, ZipArchiveMode.Update))
{
var entry = zip.GetEntry(vbaProjectEntryName);
if (entry != null)
{
entry.Delete();
entry = zip.GetEntry(relationsEntryName);
if (entry != null)
{
var contents = string.Empty;
using (var streamReader = new StreamReader(entry.Open()))
{
contents = streamReader.ReadToEnd();
}
var relationText = "<Relationship Id=\"rId6\" Type=\"http://schemas.microsoft.com/office/2006/relationships/vbaProject\" Target=\"vbaProject.bin\"/>";
contents = contents.Replace(relationText, string.Empty);
entry.Delete();
entry = zip.CreateEntry(relationsEntryName);
using (var streamWriter = new StreamWriter(entry.Open()))
{
streamWriter.Write(contents);
}
}
}
}