Excel字节[](OLE)到xls c#

时间:2018-03-13 10:30:35

标签: c# excel office-interop excel-interop hssfworkbook

我尝试使用VB for Access解析保存在SQL数据库中的.xls文档。它被保存为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上打开它时,它会给我一个灰色页面: enter image description here

但是,Windows资源管理器预览会显示文档!!!!

enter image description here

我尝试打开文件并使用Microsoft Interop保存,但我得到了相同的结果。我试图用HSSFWorkbook复制到一个新文件但是同样的ocurrs。使用.doc,.jpg,.pdf我首先尝试在文件中分配标头以获取二进制编写器的起始位置,但我无法弄清楚.xls是否有这种标头。 (大多数.pdf,.doc,.jpg文档都可以打开)

这是Interop代码:

 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);

尝试更改XLFileFormat,即使有时我也无法预览它。

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 个答案:

答案 0 :(得分:0)

所以我终于找到了一个没有使用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();