Байт Excel [] (OLE) в xls C#

Я пытаюсь проанализировать документ.xls, который сохраняется в базе данных SQL с помощью VB для доступа. Он сохраняется как документ OLE.

Что я делаю, это пишу документ с использованием бинарной записи

FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.ReadWrite);
BinaryWriter bw = new BinaryWriter(fs, document.GetTextEncoding());
bw.Write(document);
bw.Close();
fs.Close();

Итак, файл сохранен, но когда я открываю его в Office365, он дает мне серую страницу:

Но предварительный просмотр проводника Windows показывает документ!!!!

Я пытался открыть файл и сохранить с помощью Microsoft Interop, но получил те же результаты. Я попытался скопировать в новый файл с HSSFWorkbook, но те же события. С помощью.doc, .jpg, .pdf я сначала пытаюсь выделить заголовок в файле, чтобы получить начальную позицию для двоичного устройства записи, но я не могу понять, есть ли у.xls такой заголовок. (Большинство из этих документов.pdf, .doc, .jpg могут быть открыты)

Это код взаимодействия:

 excel.Workbooks.Open(filePath, Notify: false, CorruptLoad: Microsoft.Office.Interop.Excel.XlCorruptLoad.xlRepairFile).
                           SaveAs(filePath, Microsoft.Office.Interop.Excel.XlFileFormat.xlExcel5, Type.Missing, Type.Missing, true, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing);

Попытался изменить формат XLFile, даже иногда я не могу его предварительно просмотреть.

Код HSSF:

HSSFWorkbook hssfwb;

using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
   {
          hssfwb = new HSSFWorkbook(file);
          file.Close();
   }

 FileStream file2 = new FileStream(filePath+ "_mod", FileMode.Create, FileAccess.Write);

           hssfwb.Write(file2);
           file2.Close();

Бывает то же самое, может просмотреть, но не может открыть.

РЕДАКТИРОВАТЬ

документ:

byte[] doc = (byte[])reader["DEX_Documento"];

Он читается из базы данных, это шестнадцатеричная строка, проанализированная в байтах. К сожалению, трудно найти документ, который я могу дать вам строку из-за юридических условий.

Кроме того, я могу прочитать строки с помощью решения HSSF, но проблема сохраняется.

1 ответ

Решение

Итак, я наконец-то нашел библиотеку без использования Office, которая работает.

Spire.Xls.Workbook wbFromStream = new Spire.Xls.Workbook();
FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read);
wbFromStream.LoadFromStream(file);
wbFromStream.SaveToFile(filePath+".xls", Spire.Xls.ExcelVersion.Version2013);
file.Close();
Другие вопросы по тегам