2010-04-06 21 views
1

J'utilise un BinaryReader pour lire un fichier Excel 2007 à partir d'une boîte aux lettres Exchange à l'aide d'un OWA, le fichier est ensuite écrit sur le disque à l'aide d'un BinaryWriter. Mon problème est que les deux fichiers ne correspondent pas lorsque l'écrivain se termine. Pire encore Excel 2007 n'ouvrira pas le fichier writen.Excel 2007 L'auteur de fichier dans C# résultats dans un fichier corrompu

Auparavant, Excel 2003 n'avait aucun problème avec la solution ci-dessous. Et Excel 2007 n'a pas de problème si le fichier est un fichier au format Excel 2003, uniquement si le format de fichier est Excel 2007 (* .xlsx).

BinaryReader:

using(System.IO.Stream stream = resource.GetInputStream(attachedFiles[k].Address)) 
{ 
    using(System.IO.BinaryReader br = new System.IO.BinaryReader(stream)) 
    { 
     attachment.Data = new byte[attachedFiles[k].Size]; 
     int bufPosn=0, len=0; 
     while ((len = br.Read(attachment.Data, bufPosn, attachment.Data.Length-bufPosn)) > 0) 
     { 
      bufPosn += len; 
     } 
     br.Close(); 
    } 
} 

BinaryWriter:

FileStream fs = new FileStream(fileName, FileMode.Create); 
BinaryWriter binWriter = new BinaryWriter(fs); 
binWriter.Write(content, 0, content.Length); 
binWriter.Close(); 
fs.Close(); 

Suggestions gratfully reçues.

+0

Qu'est-ce que la variable 'content'? Le format de xlsx est différent, donc la façon dont vous créez 'content' est significative. – AaronLS

+0

Juste deviner, peut-être votre .xlsx est Unicode, et vous devez construire votre BinaryWriter avec le constructeur BinaryWriter (Stream, Encoding). –

+0

xlsx est essentiellement un fichier XML compressé. – Asher

Répondre

0

Il y a un problème avec IE8 et OWA mais je ne suis pas sûr si elle applique dans votre cas.

Commander this site qui a également un lien vers this site. Ils expliquent essentiellement comment contourner le problème de téléchargement de fichiers xmlx et docx avec un OWA.

+1

J'ai essayé d'ajuster le codage utilisé pour écrire le fichier, essayé en utilisant Unicode, UTF8, UTF7, ANSI, ASCII, ainsi que quelques pages de code suggérées dans d'autres réponses fournies à des questions vaguement simellar. Le contenu est généré par l'utilisateur à partir d'une grande variété d'utilisateurs, il est donc totalement imprévisible. Le OWA Office 2007 numéro référencé par Asher affecte le système que je utilise, mais la question ne concerne pas le contenu du fichier (par exemple une fois enregistré sur le disque Excel ouvrira sans problème). – Martin

2

Ce problème a été causé par la valeur renvoyés par attachedFiles [k] .Size qui était loin inexcess de la taille réelle du fichier. Les fichiers Excel 2003 ne semblent pas affectés par cela, mais les fichiers Excel 2007 sont vulnérables en raison de leur nature compressée (la routine de décompression voit évidemment le fichier différemment).

Une fois que j'ai corrigé la taille de la mémoire tampon, les fichiers sont corrects. Merci pour les suggestions

+0

belle trouvaille merci de partager le pourboire. Btw, quelle formule avez-vous utilisé pour obtenir la taille correcte du tampon? Puisque vous ne pouvez pas utiliser la propriété de taille de fichiers attachée directement? –