使用OpenMCDF修改xls文件会导致输出损坏

时间:2014-01-21 21:46:35

标签: excel excel-vba compound-file vba

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

我已经编写了一个小代码示例来演示如下所示的问题(请注意,您需要更改文件路径)。在这种情况下,我采用一个特定的流(./_VBA_PROJECT/VBA/dir)并重新写入截断流的流的内容50个字节。为了演示损坏,如果使用7zip打开输出文件并尝试导出目录流,则会通知您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();
        }
    }
}

0 个答案:

没有答案