0

我正在做一个需要编辑现有办公文件内容的项目。我正在使用开源库 OpenMCDF ( https://sourceforge.net/p/openmcdf ),它可以轻松访问复合 ole 文件中的数据。我发现它非常适合读取数据,但在写入数据时遇到问题。

我编写了一个小代码示例来演示以下问题(请注意,您需要更改文件路径)。在这种情况下,我采用一个特定的流 (./_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();
        }
    }
}
4

0 回答 0