2017-12-08 11 views
0

私はExcelファイルを作成しています。すぐに開く必要があります。 明らかに、私はlocalhost上で作成するとファイルを取得できますが、IIS上でWebアプリケーションを公開すると、サーバー側で作成していると思われるため動作しません...EXCELを作成して開きます

したがって、サーバーにアップロードしようとすると、それをダウンロードした後、私はそれを作成することはできません、私はlocalhostの作品でこれを実行する場合は、しかし、私は公開しないときは動作しません。

アドバイスはありますか?

これは私のコードです:

私はExcelのこのライブラリを使用します。私は私のExcelファイルを開始、その後

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

を:あなたは(公式)を使用することができ

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

} 
+0

アプリをダウンロードとしてそれを送っている必要があります。 –

+2

Webサーバー上でInteropsを使用しないでください。彼らはシングルユーザーのデスクトップの外で実行されるように構築されていません。ファイルの作成に役立つライブラリが多数あります。あなたはトラブルを求めているだけです。 – krillgar

+0

私は同意します - インタラクティブなプロセスではなく、Interopを使用しないでください。代わりにこれを試してみてください。 https://stackoverflow.com/questions/151005/create-excel-xls-and-xlsx-file-from-c-sharp –

答えて

0

これは私のコードです.EEPlusを使用しています。これは完了していませんが、サーバー側で1つのファイルを作成してから、作成した同じファイルをダウンロードします。

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

} 
1

OpenXML SDKあなたのようなシナリオ用ですサーバー環境で関数を実際に計算して実行することはできませんが、ブックの作成と操作には適しています。 Download しかし、OpenXML SDKは、いくつかの簡単なことを達成するために、いくつかの学習と時には多くのコードを必要とするので、誰もが好きではありません。

は幸いにもExcelLibraryまたはその後継EEPlus、またはNPOIjohnlenielを参照)、および多くの市販のサードパーティ製のコンポーネントのようなオフィスなしXLS/Xファイルを作成することができ、他の多くのライブラリがあります。

私は、Crystal Reports(XLS/Xへのエクスポートも)のような専用のレポートコンポーネントがあなたにとって大いに役立つかもしれないと想像することができます。

+0

ご協力ありがとうございます。 私はEEPlusを使用しています。それは、そのファイルを構築するのに役立つようです。 私はそれを作成するために働いています。 最高の連絡先 –

+0

ようこそ。 upvote/acceptを自由に感じてください。 – wp78de

関連する問題