Байт 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();