2016-10-28 5 views
1

こんにちは私はExcelレポートをdownloding午前中にサーバーから動作していない、サーバーからのダウンロードは、それがローカルマシン上で作業しているときに動作していないExcelシートは、C#

エラー:

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 CompanyStatics.btnexport_Click(Object sender, EventArgs e) in c:\inetpub\wwwroot\TestAdmin\CompanyStatics.aspx.cs:line 959

コード:

using ExcelAutoFormat = Microsoft.Office.Interop.Excel.XlRangeAutoFormat; 
using System.Globalization; 
using System.Runtime.InteropServices; 
using ClosedXML.Excel; 

c# Code on button click 
    protected void btnexport_Click(object sender, EventArgs e) 
{ 
    int companyId = Convert.ToInt32((ddlCompanyName.SelectedValue)); 

     try 
     { 
      string path = Server.MapPath("exportedfiles\\"); 
      if (!Directory.Exists(path)) 
      { 
       Directory.CreateDirectory(path); 
      } 
      File.Delete(path + "Company&VesselDetails.xlsx"); 


      var xlAppToExport = new Excel.Application(); 
      xlAppToExport.Workbooks.Add(""); 
      Excel.Worksheet xlWorkSheetToExport = default(Excel.Worksheet); 
      xlWorkSheetToExport = (Excel.Worksheet)xlAppToExport.Sheets["Sheet1"]; 

      int iRowCnt = 2; 
      int iRowCnt1 = 5; 

      // Add company Name 
      xlWorkSheetToExport.Cells[1, 1] = "Company Name"; 
      // Get the range from excel. 
      Excel.Range rangeComp = xlAppToExport.ActiveCell.Worksheet.Cells[1, 1] as Excel.Range; 
      rangeComp.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      rangeComp.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      rangeComp.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      rangeComp.ColumnWidth = 40.0; 
      //rangeComp.HorizontalAlignment =ri;; 
      //end company Name 
      // Add Token Name 
      xlWorkSheetToExport.Cells[1, 2] = "Total Tokens"; 
      // Get the range from excel. 
      Excel.Range rangeTokens = xlAppToExport.ActiveCell.Worksheet.Cells[1, 2] as Excel.Range; 
      rangeTokens.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      rangeTokens.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      rangeTokens.EntireRow.RowHeight = 30.0; 
      // Set Column Width. 
      rangeTokens.ColumnWidth = 40.0; 
      //end Token Name 
      // Add Approve Token 
      xlWorkSheetToExport.Cells[1, 3] = "Approve Tokens"; 
      // Get the range from excel. 
      Excel.Range ApproveToken = xlAppToExport.ActiveCell.Worksheet.Cells[1, 3] as Excel.Range; 
      ApproveToken.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      ApproveToken.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      ApproveToken.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      ApproveToken.ColumnWidth = 25.0; 
      //end Approve Token 
      // Add Remaining Tokens 
      xlWorkSheetToExport.Cells[1, 4] = "Remaining Tokens"; 
      // Get the range from excel. 
      Excel.Range RemainingTokens = xlAppToExport.ActiveCell.Worksheet.Cells[1, 4] as Excel.Range; 
      RemainingTokens.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      RemainingTokens.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      RemainingTokens.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      RemainingTokens.ColumnWidth = 25.0; 
      //end Remaining Tokens 
      // Add Remaining Tokens 
      xlWorkSheetToExport.Cells[4, 1] = "Vessel Name"; 
      // Get the range from excel. 
      Excel.Range VesselName = xlAppToExport.ActiveCell.Worksheet.Cells[4, 1] as Excel.Range; 
      VesselName.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      VesselName.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      VesselName.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      VesselName.ColumnWidth = 40.0; 
      // Add Remaining Tokens 
      xlWorkSheetToExport.Cells[4, 2] = " Ship Email ID"; 
      // Get the range from excel. 
      Excel.Range ShipEmailID = xlAppToExport.ActiveCell.Worksheet.Cells[4, 2] as Excel.Range; 
      ShipEmailID.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      ShipEmailID.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      ShipEmailID.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      ShipEmailID.ColumnWidth = 40.0; 
      // Add Remaining Tokens 
      xlWorkSheetToExport.Cells[4, 3] = "Total Tokens (300)"; 
      // Get the range from excel. 
      Excel.Range TotalTokens = xlAppToExport.ActiveCell.Worksheet.Cells[4, 3] as Excel.Range; 
      TotalTokens.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      TotalTokens.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      TotalTokens.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      TotalTokens.ColumnWidth = 25.0; 
      //end Remaining Tokens 
      // Add Remaining Tokens 
      xlWorkSheetToExport.Cells[4, 4] = "Assigned Tokens (99)"; 
      // Get the range from excel. 
      Excel.Range AssignedTokens = xlAppToExport.ActiveCell.Worksheet.Cells[4, 4] as Excel.Range; 
      AssignedTokens.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      AssignedTokens.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      AssignedTokens.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      AssignedTokens.ColumnWidth = 25.0; 
      //end Remaining Tokens 
      // Add Remaining Tokens 
      xlWorkSheetToExport.Cells[4, 5] = "Remaining Tokens (201)"; 
      // Get the range from excel. 
      Excel.Range Remaining = xlAppToExport.ActiveCell.Worksheet.Cells[4, 5] as Excel.Range; 
      Remaining.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      Remaining.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      Remaining.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      Remaining.ColumnWidth = 25.0; 
      //end Remaining Tokens 
      // Add Package Start 
      xlWorkSheetToExport.Cells[4, 6] = "Start Date"; 
      // Get the range from excel. 
      Excel.Range pkgstart = xlAppToExport.ActiveCell.Worksheet.Cells[4, 6] as Excel.Range; 
      pkgstart.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      pkgstart = (Excel.Range)xlAppToExport.Cells[4, 6]; 
      pkgstart.EntireColumn.NumberFormat = "dd/mm/yyyy"; 

      pkgstart = (Excel.Range)xlAppToExport.Cells[4, 6]; 
      pkgstart.HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft; 
      pkgstart.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 

      pkgstart.get_Range("F1", "G1").Cells.HorizontalAlignment = 
       Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft; 
      //string startRange = "A1"; 
      //string endRange = "A1"; 

      //Excel.Range currentRange = (Excel.Range)xlAppToExport.get_Range(startRange, endRange); 
      //currentRange.Style.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft; 

      //pkgstart.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignLeft; 
      // Set Row Height. 
      pkgstart.EntireRow.RowHeight = 50.0; 
      // Set Column Width. 
      pkgstart.ColumnWidth = 10.0; 
      //end Package Start 
      // Add Last Update 
      xlWorkSheetToExport.Cells[4, 7] = "Last Update Date"; 
      // Get the range from excel. 
      Excel.Range lastupdate = xlAppToExport.ActiveCell.Worksheet.Cells[4, 7] as Excel.Range; 
      lastupdate.Interior.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.SteelBlue); 
      // Set font color. 
      lastupdate.Font.Color = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.White); 
      // Set Row Height. 
      lastupdate.EntireRow.RowHeight = 25.0; 
      // Set Column Width. 
      lastupdate.ColumnWidth = 25.0; 
      //end Last Update Date    
      for (int i = 0; i < gvCompany.Rows.Count; i++) 
      { 
       string sid = gvCompany.Rows[i].Cells[3].Text; 
       string cmpl = gvCompany.Rows[i].Cells[4].Text; 
       string kpit = gvCompany.Rows[i].Cells[5].Text; 
       string tcs = gvCompany.Rows[i].Cells[6].Text; 

       xlWorkSheetToExport.Cells[iRowCnt, 1] = sid; 
       xlWorkSheetToExport.Cells[iRowCnt, 2] = cmpl; 
       xlWorkSheetToExport.Cells[iRowCnt, 3] = kpit; 
       xlWorkSheetToExport.Cells[iRowCnt, 4] = tcs; 
       iRowCnt = iRowCnt + 1; 

       string query = string.Empty; 
       DataTable dt = new DataTable(); 
       query = "select vesselID, vesselName,ShipEmailID, CompanyMasterId , ISNULL(AllowToken, 0) as 'AllowToken', ISNULL(AssignTokenToEmp, 0) as 'Total Assign Token',(ISNULL(AllowToken, 0) - ISNULL(AssignTokenToEmp, 0)) as 'RemainingToken' from Vessel where CompanyMasterID =" + companyId; 

       dt = SqlHelper.ReturnDataTable(query); 
       divcrew.Visible = true; 
       gvvessel.AllowPaging = false; 
       gvvessel.DataSource = dt; 
       gvvessel.DataBind(); 

       for (int j = 0; j < gvvessel.Rows.Count; j++) 
       { 
        // gvvessel.AllowPaging = false; 

        Label lblvess = (Label)gvvessel.Rows[j].FindControl("lblvesselName"); 
        string myVal = lblvess.Text; 
        Label lblShipEmail = (Label)gvvessel.Rows[j].FindControl("lblShipEmailID"); 
        string mylblShipEmail = lblShipEmail.Text; 
        Label lblAllowTo = (Label)gvvessel.Rows[j].FindControl("lblAllowToken"); 
        string mylblAllowTo = lblAllowTo.Text; 
        Label lblAssignToken = (Label)gvvessel.Rows[j].FindControl("lblAssignToken"); 
        string mylAssignToken = lblAssignToken.Text; 
        Label lblRemainingT = (Label)gvvessel.Rows[j].FindControl("lblRemainingToken"); 
        string mylRemainingT = lblRemainingT.Text; 
        Label lblpkg = (Label)gvvessel.Rows[j].FindControl("lblpackagedate"); 
        string myVal1 = lblpkg.Text; 
        Label lbllastupd = (Label)gvvessel.Rows[j].FindControl("lbllastupdate"); 
        string myVal2 = lbllastupd.Text; 
        //gvvessel.SetPageIndex(j); 

        xlWorkSheetToExport.Cells[iRowCnt1, 1] = myVal; 
        xlWorkSheetToExport.Cells[iRowCnt1, 2] = mylblShipEmail; 
        xlWorkSheetToExport.Cells[iRowCnt1, 3] = mylblAllowTo; 
        xlWorkSheetToExport.Cells[iRowCnt1, 4] = mylAssignToken; 
        xlWorkSheetToExport.Cells[iRowCnt1, 5] = mylRemainingT; 

        // string date = DateTime.Now.ToString("yyyy-MM-dd"); 
        //if (!string.IsNullOrEmpty(myVal1) && myVal1!="----") 
        //{ 
        // date = DateTime.ParseExact(myVal1,"dd-MM-yyyy", CultureInfo.InvariantCulture).ToString("yyyy-MM-dd"); 
        //} 

        //else if (myVal1 =="----") 
        //{ 
        // lblpkg.Text = "--------"; 
        //} 

        xlWorkSheetToExport.Cells[iRowCnt1, 6] = myVal1; 
        xlWorkSheetToExport.Cells[iRowCnt1, 7] = myVal2; 
        iRowCnt1 = iRowCnt1 + 1; 
       } 
       // SAVE THE FILE IN A FOLDER. 
       xlWorkSheetToExport.SaveAs(path + "Company&VesselDetails.xlsx"); 
       // CLEAR. 
       xlAppToExport.Workbooks.Close(); 
       xlAppToExport.Quit(); 
       xlAppToExport = null; 
       xlWorkSheetToExport = null; 
       //string path = Server.MapPath("exportedfiles\\"); 

       // CHECK IF THE FOLDER EXISTS. 
       if (Directory.Exists(path)) 
       { 
        // CHECK IF THE FILE EXISTS. 
        if (File.Exists(path + "Company&VesselDetails.xlsx")) 
        { 
         string sPath = Server.MapPath("exportedfiles\\"); 

         Response.AppendHeader("Content-Disposition", "attachment; filename=Company&VesselDetails.xlsx"); 
         Response.TransmitFile(sPath + "Company&VesselDetails.xlsx"); 
         Response.End(); 

        } 
       } 
      } 


     } 
     catch (Exception ex) 
     { 
      lblshowexcelerror.Text = ex.ToString(); 
     } 
     finally 
     { 


     } 
+0

Excelはサーバーにインストールされていますか? – Baldrick

+0

エクセルがサーバーにインストールされていません –

+0

このコードはExcelを自動化しようとしていますが、わかっている限り、サーバー上で実行されています。これを行うには、サーバーにExcelがインストールされている必要があります。 – Baldrick

答えて

2

COMオブジェクトを使用するには、サーバーマシンにMS Excelをインストールする必要があります。それ以外の場合は、.xlsファイルと.xlsxファイルを手動で使用するためにサードパーティのライブラリが必要になります。

このようなライブラリの1つは、新しい.xlsxファイルで動作するEPPlusです。それは私のために働いて、私は他の多くが存在することを知っています。

関連する問題