From the library NPOI for C # (downloaded from the github, NOT Nuget, since in the Nuget some DLLs are missing):
Main Code - Important to note that an XLS is different from an XLSX (it is marked in the code)
Stream stream = new MemoryStream(document.Fichero); //document.Fichero son los byte[] puros del XLS/XLSX
Stream stream2 = new MemoryStream();
stream.Position = 0;
ExcelToHtmlConverter excelToHtmlConverter = new ExcelToHtmlConverter();
excelToHtmlConverter.OutputColumnHeaders = false;
excelToHtmlConverter.OutputHiddenColumns = true;
excelToHtmlConverter.OutputHiddenRows = true;
excelToHtmlConverter.OutputLeadingSpacesAsNonBreaking = false;
excelToHtmlConverter.OutputRowNumbers = true;
excelToHtmlConverter.UseDivsToSpan = true;
if (document.Extension.ToUpper() == "XLSX")
{
//XLSX
XSSFWorkbook workbook = new XSSFWorkbook(stream);
excelToHtmlConverter.ProcessWorkbook(workbook);
}
else
{
//XLS
HSSFWorkbook workbook = new HSSFWorkbook(stream);
excelToHtmlConverter.ProcessWorkbook(workbook);
}
excelToHtmlConverter.Document.Save(stream2);
stream2.Position = 0;
var mmmm = ReadFully(stream2);
var msAux2 = ConvertDocumentToHtmlMemoryStream(mmmm, "");
var documentInfoHtml = BytesToStringConverted(msAux2.ToArray());
Define the functions ReadFully
, ConvertDocumentToHtmlMemoryStream
and BytesToStringConverted
:
ReadFully - Transform a Stream
to byte[]
:
public static byte[] ReadFully(Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
ConvertDocumentToHtmlMemoryStream - Add information for generation to HTML
private MemoryStream ConvertDocumentToHtmlMemoryStream(byte[] document, string documentInfoHtml)
{
byte[] result = null;
//Documento
var strBuilder = new System.Text.StringBuilder();
foreach (var b in document)
{
strBuilder.Append((char)b);
}
var strFinalDoc = strBuilder.ToString();
strFinalDoc = strFinalDoc.Replace("<a href=", "<br /><a href=");
strFinalDoc = strFinalDoc.Replace("</a>", "</a><br />");
//Información
if (!String.IsNullOrEmpty(documentInfoHtml))
{
strFinalDoc = strFinalDoc.Replace("<body>", "<body>" + documentInfoHtml + "<BR /><BR />");
}
//Imprimir
if (Action.ToLower() == Enumerators.ActionType.Print.ToString().ToLower())
{
var strImprime = "<script language='javascript' type='text/javascript'>";
strImprime += " window.print();";
strImprime += "</script>";
strImprime += "</html>";
strFinalDoc = strFinalDoc.Replace("</html>", strImprime);
}
var bytes = System.Text.Encoding.Default.GetBytes(strFinalDoc);
if (bytes.Length > 0)
{
return new MemoryStream(bytes);
}
else
{
return null;
}
}
BytesToStringConverted - Transforms from byte[]
to string
static string BytesToStringConverted(byte[] bytes)
{
using (var stream = new MemoryStream(bytes))
{
using (var streamReader = new StreamReader(stream))
{
return streamReader.ReadToEnd();
}
}
}