2012-01-25 5 views
2

シリアライズ例外:Assembly 'Microsoft.Officeに' Microsoft.Office.Interop.Excel.WorkbookClass 'と入力してください.Interop.Excel、Version = 11.0.0.0、Culture =ニュートラル、PublicKeyToken = 71e9bce111e9429c 'はシリアル化可能とマークされていません。Microsoft.Office.Interop.Excel.WorkbookClass 'in Assembly' Microsoft.Office.Interop.Excelは、シリアル化可能とマークされていません

私は上記のexception..hereコード

unsafe public void Save(IStream stream, bool clearDirty, Excel.Workbook xlbook) 
{ 
    try 
    { 
     //if (stream == null) 
     //{ 
     // return; 
     //} 
     //object data = xlbook; 
     if (xlbook == null) 
     { 
      return; 
     } 
     // convert data to byteArray 


     MemoryStream memoryStream = new MemoryStream(); 
     BinaryFormatter binaryFormatter = new BinaryFormatter();   

     //below line im getting the Exception 
     **binaryFormatter.Serialize(memoryStream, xlbook);**    
     byte[] bytes = memoryStream.ToArray(); 
     memoryStream.Close(); 
     //get memory pointer 
     int cb; 
     int* pcb = &cb; 
     //save data 
     byte[] arrayLen = BitConverter.GetBytes(bytes.Length); 
     stream.Write(arrayLen, arrayLen.Length, new IntPtr(pcb)); 
     stream.Write(bytes, bytes.Length, new IntPtr(pcb)); 
     //currentDomain.AssemblyResolve -= new ResolveEventHandler(currentDomain_AssemblyResolve); 
    } 
    catch 
    { 

    } 
} 
+0

私は[シリアル化可能]属性のクラスにマークしましたが、運はありません – ani

+0

Excelのドキュメントを保存するためのポインタが必要な場合は、何かが間違っていました。 –

答えて

0

すべてが特定のシリアル化エンジンを直列化するのに適していません取得しています。このケースではCOM相互運用が必要なので、特に驚いていません。基本的には、これを行うことはできません。通常の保存メソッドを使用してファイルに書き込むだけで、ファイルからBLOBをロードする必要があります。

また、これもASP.NETでタグ付けしているため、Office interop はASP.NETのには対応していません。

1

シリアル化を使用してExcelワークブックを保存することはできません。 Saveメソッドを使用してブックを保存する必要があります。

あなたはクラスをシリアライズ可能とマークしましたが、間違ったクラスをマークしたはずです。シリアライズ可能とマークする必要があるクラスはWorkbookClassであり、そのクラスを制御することはできません。

+0

私はブラウザからファイルをダウンロードできるように、私はmemorystreamに作業本を保存する必要があります。 – ani

+1

ブックをディスクに保存し、結果のファイルをFileStreamとして開き、それをMemoryStreamにコピーします。または、MemoryStreamを完全にバイパスし、FileStreamをNetworkStreamに直接コピーします。 – phoog

関連する問題