Erro na criação de Excel baseado num html através DO Interop Excel ?

alfinete

Power Member
bom dia estou a criar um excel baseado num ficheiro html
na minha maquina de dev funciona perfeitamente

quando faço publicação o servidor da o erro descrito abaixo

a minha duvida é, na maquina de dev tenho office instalado , logo tenho o runtime do excel

no servidor não existe excel instalado, acho que seja necessário o runrime para excel, correcto ?

USing
__________________________________________________________________________________________________
Código:
using Excel = Microsoft.Office.Interop.Excel;




Criação de excel
__________________________________________________________________________________________________

Código:
 // criação do focheiro excel
                    var app = new Excel.Application();
 
                    var wb = app.Workbooks.Open(Filename: TxtFile);
 
                    wb.SaveAs(Filename: ExcelFile, FileFormat: XlFileFormat.xlOpenXMLWorkbook);
 
                    wb.Close();


Erro
__________________________________________________________________________________________________

Código:
System.Runtime.InteropServices.COMException (0x80040154): Retrieving the COM class factory for component with CLSID {00024500-0000-0000-C000-000000000046} failed due to the following error: 80040154 Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
   at System.RuntimeTypeHandle.CreateInstance(RuntimeType type, Boolean publicOnly, Boolean noCheck, Boolean& canBeCached, RuntimeMethodHandleInternal& ctor, Boolean& bNeedSecurityCheck)
 
Não tens o Excel instalado no servidor. Vê aqui.

Uma alternativa grátis onde não tens que instalar o Excel no servidor, é utilizares o NuGet Epplus.
Mas na versão 4.5.3.3, que é a última free. Depois passou a ser paga.
 
essa versão do Nuget ja esta depricated

em relação ao excel instalado não existe nunhum runtime que faça o mesmo ?
Pois está deprecated, mas funciona! E é grátis. Serve perfeitamente para o que vais fazer. E garanto-te que é muito mais fácil de trabalhar do que o Interop.Excel. Pesquisa sobre isso, que vais ver.

Não sei se alguma runtime consegue resolver o teu problema. Interop.Excel é para fugir disso. Não perco tempo.
 
Pois está deprecated, mas funciona! E é grátis. Serve perfeitamente para o que vais fazer. E garanto-te que é muito mais fácil de trabalhar do que o Interop.Excel. Pesquisa sobre isso, que vais ver.

Não sei se alguma runtime consegue resolver o teu problema. Interop.Excel é para fugir disso. Não perco tempo.

aqui a questão é que o cliente para o qual estou a realizar o projecto não aceita versões depricated
 
Se é um cliente, o objectivo é comercial! Eles podem comprar uma licença! Digo-te que é um valor muito bom para o que faz!
Mas tens outras alternativas como o ClosedXML, ExcelDataReader que são open source. (nunca trabalhei com estas)

Obrigado na mesma pela ajuda , vou ver o que posso fazer

sendo o FileContent - uma string com uma table html.

Código:
                using (var package = new ExcelPackage())
                {
                    string ExcelSheetName = ExcelFileName.Split('.')[0];

                    var worksheet = package.Workbook.Worksheets.Add(ExcelSheetName);


                    worksheet.Cells["A1"].LoadFromText(FileContent);
  FileInfo excelFile = new FileInfo(ExcelFile);
                    package.SaveAs(excelFile);
                    package.Save();
                    package.Dispose();
}

ele esta a gravar bem o file mas põe o meu html table todo numa celula em vez de o por nas colunas respectivas com a formatação correcta

não sei se é possivel transformar um html table string directamente num xls

podias dar uma ajuda

essa versão do Nuget ja esta depricated

em relação ao excel instalado não existe nunhum runtime que faça o mesmo ?


Não tens o Excel instalado no servidor. Vê aqui.

Uma alternativa grátis onde não tens que instalar o Excel no servidor, é utilizares o NuGet Epplus.
Mas na versão 4.5.3.3, que é a última free. Depois passou a ser paga.
tentei com o epplus

chamar a seguinte string
e so a consigo por numa celula

não consigo gerar a table no excel

Código:
string HTML = "<table style=\"border:1px solid #5dade2 ;max-width:3000px;width:auto;min-width:700px;\"><tr style=\"border: 1px solid  #5dade2 ;background-color: #5dade2;color:#FFFFFF;\"><td style=\"max-width:150px;width:auto;min-width:10px;\">Number</td><td style=\"max-width:150px;width:auto;min-width:10px;\">Name</td><td style=\"max-width:150px;width:auto;min-width:10px;">ID Number</td><td style="max-width:150px;width:auto;min-width:10px;">NIF</td><td style="max-width:150px;width:auto;min-width:10px;">Entidade Legal</td><td style="max-width:150px;width:auto;min-width:10px;">Morada</td><td style="max-width:150px;width:auto;min-width:10px;">Local</td><td style="max-width:150px;width:auto;min-width:10px;\">Cod. Postal</td></tr><tr style=\"border: 1px solid  #5dade2;height:40px;\"><td>T00</td><td>Jo&#227;o </td><td>106</td><td>197</td><td>Services SA</td><td>Rua Prista</td><td>Lisboa</td><td>1600</td></tr></table>";



                using (var package = new ExcelPackage())
                {
                    string ExcelSheetName = ExcelFileName.Split('.')[0];

                    var worksheet = package.Workbook.Worksheets.Add(ExcelSheetName);


                    worksheet.Cells["A1"].LoadFromText(HTML);
  FileInfo excelFile = new FileInfo(ExcelFile);
                    package.SaveAs(excelFile);
                    package.Save();
                    package.Dispose();
}

seria possivel uma ajuda
 
Não é com o código HTML que vais fazer o Excel.
Tens de ser tu a gerir as colunas e linhas e a colocar lá o conteúdo.

se for assim não vale a pena por enquanto

mas acho que dá , só ainda não esperimentei


Convert HTML Table to .xlsx file using EPPlus. EPPlus library only supports .xlsx(Office 2007 and above).
The TableToExcel class uses EPPlus and Windows.Form. It can convert HTML to bytes array.



Código:
//Stream  
TableToExcel temp = new TableToExcel();  
Response.BinaryWrite(temp.process(html));  
  
//File  
TableToExcel temp = new TableToExcel();  
using (StreamWriter file = new StreamWriter("C:\\temp.xlsx"))  
{  
    file.Write(temp.process(html));  
}
 
Back
Topo