Использование OpenMCDF для изменения файла xls приводит к повреждению вывода
Я работаю над проектом, где мне нужно редактировать содержимое существующих офисных файлов. Я использую библиотеку OpenMCDF с открытым исходным кодом ( https://sourceforge.net/p/openmcdf), которая обеспечивает легкий доступ к данным в составных файлах. Я нашел это отлично для чтения данных, но у меня проблемы с записью в них.
Я написал небольшой пример кода, чтобы продемонстрировать проблему, как показано ниже (обратите внимание, вам нужно изменить путь к файлу). В этом случае я беру определенный поток (./_VBA_PROJECT/VBA/dir) и перезаписываю содержимое потока, обрезая поток на 50 байтов. Чтобы продемонстрировать повреждение, если вы откроете выходной файл с помощью 7zip и попытаетесь экспортировать поток dir, вам сообщат, что поток dir поврежден.
Проблема только кажется проблемой, когда вы пишете поток короче, чем оригинал. Добавление большего количества байтов, похоже, не вызывает проблем.
Любая помощь здесь будет высоко ценится.
using OpenMcdf;
namespace OpenMcdfTest
{
class Program
{
static void Main(string[] args)
{
const string FILE_PATH = @"c:\users\ross\desktop\temp.xls";
CompoundFile cf = new CompoundFile(FILE_PATH);
CFStream dirStream = cf.RootStorage.GetStorage("_VBA_PROJECT_CUR").GetStorage("VBA").GetStream("dir");
byte[] currentData = dirStream.GetData();
Array.Resize(ref currentData, currentData.Length - 50);
dirStream.SetData(currentData);
cf.Save(FILE_PATH + ".edited");
cf.Close();
}
}
}