Программа записи файла Excel 2007 в C # приводит к повреждению файла - PullRequest
1 голос
/ 07 апреля 2010

Я использую BinaryReader для чтения файла Excel 2007 из почтового ящика Exchange с помощью OWA, затем файл записывается на диск с помощью BinaryWriter. Моя проблема в том, что два файла не совпадают, когда писатель заканчивает работу. Хуже того, Excel 2007 не откроет записанный файл.

Ранее в Excel 2003 не было проблем с приведенным ниже решением. И Excel 2007 не имеет проблемы, если файл является файлом формата Excel 2003, только если формат файла - 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();

Предложения с благодарностью приняты.

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Эта проблема была вызвана значением, возвращаемым attachFiles [k] .Size, которое намного превышало фактический размер файла. Похоже, что на файлы Excel 2003 это не влияет, но файлы Excel 2007 уязвимы из-за своей сжатой природы (процедура распаковки, очевидно, видит файл по-другому).

Как только я исправил размер буфера, файлы в порядке.

Спасибо за предложения

0 голосов
/ 07 апреля 2010

Существует проблема с IE8 и OWA, но я не уверен, применимо ли это в вашем случае.

Оформить заказ этот сайт , который также имеет ссылку на этот сайт .Они в основном объясняют, как обойти проблему загрузки файлов xmlx и docx с помощью OWA.

...