创buildEXCEL并打开它

我正在创build一个excel文件,我必须立即打开它。 显然,当我在本地创build它,我可以得到的文件,但是当我在IIS上发布我的Web应用程序这不工作,因为我想它是在服务器端创build…

所以我创build的Excel文件,并尝试上传到服务器,然后下载它,但我不能创build它,如果我在本地运行这个工作,但是当我发布不工作。

有什么build议?

这是我的代码:

我使用这个Excel的库:

using Microsoft.Office.Core; using Excelo = Microsoft.Office.Interop.Excel; using Microsoft.Office.Interop; using System.Reflection; using System.Globalization; 

然后,我开始我的Excel文件:

 private void sacConsulPend_GenRemito() { // DB string conn = ConfigurationManager.ConnectionStrings["conn"].ConnectionString; DataSet dsRemito = new DataSet(); DataTable dtCons = new DataTable(); using (SqlConnection sqlCon = new SqlConnection(conn)) { using (SqlCommand cmd = new SqlCommand()) { try { //SP for data query cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandText = "SACBUS_CONSUL_SOLICITUDEXIST"; cmd.Parameters.AddWithValue("@ID_CONSULTA", Convert.ToInt32(lblSac_ConPenDet_idCons.Text.Replace(" ", ""))); cmd.Connection = sqlCon; sqlCon.Open(); SqlDataAdapter dapC = new SqlDataAdapter(cmd); dapC.Fill(dsRemito); } catch (Exception sqlex) { throw sqlex; } } } Excelo.Application oXL; Excelo._Workbook oWB; Excelo._Worksheet oSheet; Excelo.Range oRng; try { //Start Excel oXL = new Excelo.Application(); //new blank workbook. oWB = (Excelo._Workbook)(oXL.Workbooks.Add(System.Reflection.Missing.Value)); oSheet = (Excelo._Worksheet)oWB.ActiveSheet; object misValue = System.Reflection.Missing.Value; //Text Format oSheet.get_Range("A1", "Z1000").Font.Name = "Courier New"; oSheet.get_Range("A1", "Z1000").Font.Size = 7; oSheet.get_Range("A1", "Z1000").Font.Bold = true; oSheet.get_Range("A1", "Z1000").NumberFormat = "@"; oSheet.get_Range("D1", "E1").Cells.Merge(); oSheet.get_Range("A1", "F1").Font.Bold = true; oSheet.get_Range("A1", "F1").Font.Italic = true; oSheet.get_Range("A1", "F1").VerticalAlignment = Excelo.XlVAlign.xlVAlignCenter; oSheet.get_Range("A1", "F1").HorizontalAlignment = Excelo.XlVAlign.xlVAlignCenter; oSheet.get_Range("A1", "F1").Font.Size = 9; //Logo Lockers oSheet.Shapes.AddPicture(Server.MapPath("~/images/LockersLogo.jpg"), MsoTriState.msoFalse, MsoTriState.msoCTrue, 0, 0, 60, 20); /* Excel Content */ //Save ExcelFile var filePath = Path.Combine(HttpContext.Current.Server.MapPath("~/Files/Envios/"), lblSac_ConPenDet_idCons.Text.Replace(" ", "") + ".xlsx"); oWB.SaveAs(filePath, Excelo.XlFileFormat.xlOpenXMLWorkbook, Missing.Value, Missing.Value, false, false, Excelo.XlSaveAsAccessMode.xlNoChange, Excelo.XlSaveConflictResolution.xlUserResolution, true, Missing.Value, Missing.Value, Missing.Value); } catch (Exception thex) { String errorMessage; errorMessage = "Error en la creacion del archivo Excel: "; errorMessage = String.Concat(errorMessage, thex.Message); errorMessage = String.Concat(errorMessage, " Line: "); errorMessage = String.Concat(errorMessage, thex.Source); } } 

您可以使用适用于您的场景的(官方) OpenXML SDK 。 它不允许您实际计算和运行服务器环境中的函数,但它适用于创build和操作工作簿。 下载然而,OpenXML SDK并不是每个人都喜欢的,因为它需要一些学习,有时还有很多代码来实现一些简单的事情。

幸运的是,还有许多其他库允许在没有Office的情况下创buildXLS / X文件,如ExcelLibrary或其后续的EEPlus或NPOI (请参阅johnleniel )以及许多商业第三方组件。

我可以想象,像Crystal Reports这样的专门的报表组件(也可以导出到XLS / X)对你来说也是非常有用的。

这是我的代码,使用EEPlus它没有完成,但工作,在服务器端创build一个文件,之后,我下载了相同的创build文件。

 using OfficeOpenXml; using System.IO; using System.Drawing; using OfficeOpenXml.Drawing; using System.Data; using System.Data.SqlClient; using System.Configuration; 

这是最相关的:

 public static string GenerarExcel(DirectoryInfo outputDir) { string conn = ConfigurationManager.ConnectionStrings["conn"].ConnectionString; DataSet dsRemito = new DataSet(); DataTable dtCons = new DataTable(); using (SqlConnection sqlCon = new SqlConnection(conn)) { using (SqlCommand cmd = new SqlCommand()) { try {//SP for sql query cmd.CommandType = System.Data.CommandType.StoredProcedure; cmd.CommandText = "SACBUS_CONSUL_SOLICITUDEXIST"; cmd.Parameters.AddWithValue("@ID_CONSULTA", 66); //66 wil be a variable, this is only for my tests cmd.Connection = sqlCon; sqlCon.Open(); SqlDataAdapter dapC = new SqlDataAdapter(cmd); dapC.Fill(dsRemito); } catch (Exception sqlex) { throw sqlex; } } } FileInfo newFile = new FileInfo(outputDir.FullName + @"\Sample1.xlsx"); if (newFile.Exists) { newFile.Delete(); newFile = new FileInfo(outputDir.FullName + @"\Sample1.xlsx"); //preparar nombre archivo } using (ExcelPackage package = new ExcelPackage(newFile)) { // Agregar hoja a worbook ExcelWorksheet worksheet = package.Workbook.Worksheets.Add("Envios"); // Header worksheet.Cells[1, 3].Value = "SISTEMA DE GESTIÓN DE CALIDAD ISO 9001:2008"; worksheet.Cells[2, 3].Value = "PEDIDO DE CONSULTA A BODEGA"; worksheet.Cells[1, 5].Value = "Código:"; worksheet.Cells[1, 6].Value = "FOR-PCV-COM-SAC-PEBOD-02 "; worksheet.Cells[2, 5, 2, 6].Merge = true; // Estilo del Encabezado using (var range = worksheet.Cells[1, 1, 1, 5]) // De la celda 1,1 a la 1,5 { range.Style.Font.Bold = true; // Negrita range.Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid; // Solido lleno range.Style.Fill.BackgroundColor.SetColor(Color.DarkBlue); //Background range.Style.Font.Color.SetColor(Color.White);// Font color } // Pie de Pagina // lineas en la cuadricula worksheet.Cells["A5:E5"].Style.Border.Top.Style = OfficeOpenXml.Style.ExcelBorderStyle.Thin; worksheet.Cells["A5:E5"].Style.Font.Bold = true; // estilo del pie de pagina //Formatos //Formato Numerico worksheet.Cells["C2:C5"].Style.Numberformat.Format = "#,##0"; // Formato Entero worksheet.Cells["D2:E5"].Style.Numberformat.Format = "#,##0.00"; // Formato Decimal worksheet.Cells["A2:A4"].Style.Numberformat.Format = "@"; //Formato texto worksheet.Cells.AutoFitColumns(0); //AutoAjustar celdas // Numero de pagina + total de paginas a la derecha del pie de pagina worksheet.HeaderFooter.OddFooter.RightAlignedText = string.Format("Pagina {0} of {1}", ExcelHeaderFooter.PageNumber, ExcelHeaderFooter.NumberOfPages); // Nombre de la hoja al centro del pie de pagina worksheet.HeaderFooter.OddFooter.CenteredText = ExcelHeaderFooter.SheetName; // Ruta a la izquierda del pie de pagina worksheet.HeaderFooter.OddFooter.LeftAlignedText = ExcelHeaderFooter.FilePath + ExcelHeaderFooter.FileName; //System.Drawing.Image img = System.Drawing.Image.FromFile(@"C:\temporal\asp\ExcelLibrary\LockersLogo.jpg"); System.Drawing.Image img = System.Drawing.Image.FromFile(HttpContext.Current.Server.MapPath("~/image/LockersLogo.jpg")); ExcelPicture pic = worksheet.Drawings.AddPicture("Sample", img); pic.SetPosition(0, 0, 6, 0); pic.SetSize(150, 75); //Items consultados var registros = 0; for (int i = 0; i < dsRemito.Tables[0].Rows.Count; i++) { worksheet.Cells[8 + i, 1].Value = dsRemito.Tables[0].Rows[i]["CAJA_CODIGO"]; worksheet.Cells[8 + i, 2].Value = dsRemito.Tables[0].Rows[i]["CAJA_NUMERO"]; worksheet.Cells[8 + i, 3].Value = dsRemito.Tables[0].Rows[i]["CAJA_CONTENIDO_NUMERO"]; worksheet.Cells[8 + i, 4].Value = dsRemito.Tables[0].Rows[i]["ITEM"]; registros = i; } package.Save(); //guardar workbook } return newFile.FullName; } protected void DownloadFile() { string rutaUsr = "~/" + "Files/"; string filePath = rutaUsr + "Sample1" + ".xlsx"; Response.ContentType = ContentType; Response.AppendHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(filePath)); Response.WriteFile(filePath); Response.End(); } protected void Page_Load(object sender, EventArgs e) { try { //DirectoryInfo outputDir = new DirectoryInfo(@"C:\temporal\asp\ExcelLibrary"); DirectoryInfo outputDir = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/Files/")); GenerarExcel(outputDir); DownloadFile(); } catch (Exception ex) { Console.WriteLine("Error: {0}", ex.Message); } }