我正在开展一个项目,我需要编辑现有办公文件的内容。我正在使用开源库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();
}
}
}