既存のオフィス ファイルの内容を編集する必要があるプロジェクトに取り組んでいます。複合 ole ファイルのデータに簡単にアクセスできるオープン ソース ライブラリ 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();
}
}
}