Ben Excel dosyalarını (PDF gibi diğer dosya türleriyle birlikte) ikili veri olarak depolayan bir SQL DB ile çalışıyorum. Bu dosyaları dosya sistemine ayıklamak için aşağıdaki kodu kullanıyorum.
Sorun:
PDF dosyaları iyi çıktı. Ancak Excel için dosyalar oluşturulur ve onları açmaya çalıştığımda çökerler veya sadece çöp metinleri verirler.
Bu kodu dosyaları almak için bu uygulamayı yazan önceki adamdan kullanıyorum. Bu kod, tam anlamıyla anlamadığım OpenMcdf'yi kullanmaktadır çünkü ben bunun için yararlı çevrimiçi belgeler bulamadım.
//execution starts here
public override void SaveToDisk()
{
byte[] keys = { (byte)0xd0, (byte)0xcf };
//Searches through m_RawOleObject for combination of 'keys'
int offset = Utils.SearchBytes(m_RawOleObject, keys); //returns '60' in case of Excel and '66' in case of Pdf
//m_RawOleOjbect contains the data from the sqlDataReader (the binary data from the column.)
m_RawOleObject = strip(m_RawOleObject, offset);
MemoryStream ms = new MemoryStream(m_RawOleObject);
CompoundFile cf = new CompoundFile(ms);
GetStorageByName(cf.RootStorage, m_StorageName);
if (Storage != null)
{
if (Storage is CFStream)
{
m_RawOleObject = (Storage as CFStream).GetData();
}
m_filename = System.IO.Path.Combine(STOREPATH, Utils.CombineFilenameWithExtension(Filename, m_extension));
WriteToFile(m_filename, m_RawOleObject);
}
}
protected void WriteToFile(string fn, byte[] obj)
{
fn = GetNextAvailableFilename(fn, 0);
FileStream fs = new FileStream(fn, FileMode.Create);
BinaryWriter writer = new BinaryWriter(fs);
writer.Write(obj);
writer.Close();
fs.Close();
fs.Dispose();
}
protected void GetStorageByName(CFStorage cfs, string name)
{
VisitedEntryAction va = delegate(CFItem target)
{
if (target is CFStorage)
{
GetStorageByName((CFStorage)target, name);
}
else
{
if (target.Name == name)
Storage = target;
}
};
//Visit NON-recursively (first level only)
cfs.VisitEntries(va, false);
}
Burada neler olduğu hakkında bir fikrin var mı? excel neden bozuk? Arama saatlerine rağmen çok fazla İnternet bulamadım!
herhangi bir fikir, öneri veya çözüm takdir edilecektir.
Teşekkürler