2010-11-11 67 views
1

我仍然在努力與我的方案。我到處尋找解決方案並找不到解決方案。我使用C#和ASP.NET,我需要將數據導出到Excel電子表格。導出/導入到組合框Excel

我有一個包含應用程序對象的應用程序的列表。每個應用程序對象都有一個狀態ID。當我將這些應用程序導出到Excel時,我需要一個包含下拉/組合框的列。在這個下拉/組合框中應該是數據庫中所有狀態的列表。然後我需要將狀態選擇爲應用程序狀態ID的狀態。

另一個問題是關於上述情況。當用戶下載Excel文檔時,用戶可以通過在下拉列表中選擇不同的值來更改每個應用程序的狀態。我需要上傳這個電子表格並循環遍歷行,並在下拉/組合框中獲取列的值和所選項目的值。你會如何做到這一點?這可能嗎?

我可能不會使用COM組件,因此我嘗試使用EPPlus或NPOI(它不一定是這兩個),但它似乎不支持我的場景。我將如何能夠實現我的方案?再一次,它不必使用EPPlus和NPOI。工作的例子,將不勝感激:)

感謝

布倫丹

回答

2

您是否嘗試過使用NPOI模板?當我想用NPOI導出複雜的Spreasheets時,我創建一個XLS文檔作爲模板,並通過C#填充數據。

+0

不,我沒有。請你有機會爲我提供一些示例代碼嗎?我有明天的截止日期,所以我的時間真的很有限,現在就去實驗吧。如果你可以給我一些示例代碼,那麼我可以從那裏拿走它。 – 2010-11-11 05:33:10

+0

這裏是一個鏈接到我使用NPOI加載模板的例子。這不是直接匹配,但加載模板時的一般概念應該清楚。 http://www.zachhunter.com/2010/05/npoi-excel-template/ – Zachary 2010-11-11 05:37:56

+0

謝謝。我有一個如何去做的例子。但是我正在尋找的是如何根據我的應用程序狀態從下拉列表中選擇一個項目。我有一個下拉列表中的所有狀態,我需要選擇我的apllication狀態的項目。我將如何以編程方式執行此操作? – 2010-11-11 06:14:41

2

根本不需要宏。 C#本身會爲你做。 在這裏,我有一個演示從excel導入(無論是2003/2007)到gridview並將gridview(EDITED/changed)數據導出到新的EXCEL文件。嘗試一下。 Works 100%

您需要做的是:在您的Web應用程序內創建一個名爲「Files」的文件夾,並將您的Excel文件保存在「Files」文件夾中。如果您的數據源(從您的網格填充的位置)不是excel,那麼不需要上述文件夾。您可以在btnImport_Click()中編寫自己的代碼。 這裏是你的.aspx頁面中:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="ImportFromExcelToDatasetAndGridviewAndExport.aspx.cs" Inherits="ImportFromExcelToGridViewWebApp.ImportFromExcelToDatasetAndGridviewAndExport" %> 
<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server"> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

    <div> 
     <b>Please Select Excel File : </b> 
     <asp:FileUpload ID="fileuploadExcel" runat="server" />&nbsp;&nbsp; 
     <asp:Button ID="btnImport" runat="server" Text="Import From Excel" OnClick="btnImport_Click" /> 
     <br /> 
     <asp:Label ID="lblMessage" runat="server" Visible="False" Font-Bold="True" ForeColor="#009933"></asp:Label><br /> 

     <asp:GridView ID="grvExcelData" runat="server" AutoGenerateColumns="false" 
      onrowdatabound="GridView2_RowDataBound"> 
      <HeaderStyle BackColor="#df5015" Font-Bold="true" ForeColor="White" /> 
      <Columns> 
       <asp:TemplateField ItemStyle-Width = "150px" HeaderText = "UserName"> 
        <ItemTemplate> 
         <asp:TextBox ID="txtUserName" runat="server" 
            CssClass="css2" Text='<%# Eval("UserName")%>'></asp:TextBox> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtUserName" runat="server" 
            CssClass="css2" Text='<%# Eval("UserName")%>'> 
         </asp:TextBox> 
        </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField ItemStyle-Width = "150px" HeaderText = "Education"> 
        <ItemTemplate> 
         <asp:TextBox ID="txtEducation" runat="server" 
            CssClass="css2" Text='<%# Eval("Education")%>'></asp:TextBox> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtEducation" runat="server" 
            CssClass="css2" Text='<%# Eval("Education")%>'> 
         </asp:TextBox> 
        </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField ItemStyle-Width = "150px" HeaderText = "Location"> 
        <ItemTemplate> 
         <asp:TextBox ID="txtLocation" runat="server" 
            CssClass="css2" Text='<%# Eval("Location")%>'></asp:TextBox> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:TextBox ID="txtLocation" runat="server" 
            CssClass="css2" Text='<%# Eval("Location")%>'> 
         </asp:TextBox> 
        </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Select"> 
        <ItemTemplate> 
         <asp:DropDownList ID="DrdDatabase" Width="100px" runat="server"> 
         </asp:DropDownList> 
        </ItemTemplate> 
        <EditItemTemplate> 
         <asp:DropDownList ID="DrdDatabase" Width="100px" runat="server"> 
         </asp:DropDownList> 
        </EditItemTemplate> 
       </asp:TemplateField> 
      </Columns> 
     </asp:GridView> 
     <asp:Button ID="btnExport" runat="server" Text="Export To Excel" OnClick="btnExport_Click" /> 
    </div> 
</asp:Content> 

這裏是你的代碼後面。

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Data; 
    using System.IO; 
    using System.Data.OleDb; 
    using System.Collections; 

namespace ImportFromExcelToGridViewWebApp 
{ 
    public partial class ImportFromExcelToDatasetAndGridviewAndExport : System.Web.UI.Page 
    { 
     private ArrayList ExcelData 
     { 
      get 
      { 
       object excel = Session["dropdownvalue"]; 
       if (excel == null) Session["dropdownvalue"] = new ArrayList(); 
       return (ArrayList)Session["dropdownvalue"]; 
      } 
      set 
      { 
       Session["dropdownvalue"] = value; 
      } 
     } 

     protected void GridView2_RowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      if (e.Row.RowType == DataControlRowType.DataRow) 
      { 
       DropDownList ddl = (DropDownList)e.Row.FindControl("DrdDatabase"); 
       foreach (string colName in ExcelData) 
        ddl.Items.Add(new ListItem(colName)); 
      } 
     } 

     protected void btnImport_Click(object sender, EventArgs e) 
     { 
      ArrayList alist = new ArrayList(); 
      string connString = ""; 
      string strFileType = Path.GetExtension(fileuploadExcel.FileName).ToLower(); 
      string fileBasePath = Server.MapPath("~/Files/"); 
      string fileName = Path.GetFileName(this.fileuploadExcel.FileName); 
      string fullFilePath = fileBasePath + fileName; 

      //Connection String to Excel Workbook 
      if (strFileType.Trim() == ".xls") 
      { 
       connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fullFilePath + 
           ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\""; 
      } 
      else if (strFileType.Trim() == ".xlsx") 
      { 
       connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fullFilePath + 
          ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=1\""; 
      } 
      if (fileuploadExcel.HasFile) 
      { 
       string query = "SELECT [UserName],[Education],[Location] FROM [Sheet1$]"; 
       OleDbConnection conn = new OleDbConnection(connString); 
       if (conn.State == ConnectionState.Closed) 
        conn.Open(); 
       OleDbCommand cmd = new OleDbCommand(query, conn); 
       OleDbDataAdapter da = new OleDbDataAdapter(cmd); 
       DataSet ds = new DataSet(); 
       da.Fill(ds); 
       //Assigning dataset table data to GridView Control 
       Session["griddata"] = ds.Tables[0]; 

       System.Data.DataTable dtt = (System.Data.DataTable)Session["griddata"]; //griddata is the gridview data from another page   
       var res = (from f in dtt.AsEnumerable() 
          select f.Field<string>("Location") 
        ); 


       foreach (string s in res.AsEnumerable()) 
       { 
        alist.Add(s); 
       } 

       Session["dropdownvalue"] = alist; 

       grvExcelData.DataSource = Session["griddata"]; 
       grvExcelData.DataBind(); 

       da.Dispose(); 
       conn.Close(); 
       conn.Dispose(); 
      } 
     } 

     protected void btnExport_Click(object sender, EventArgs e) 
     { 
      System.Data.DataTable dtExcel = new DataTable(); 

      dtExcel.Columns.Add("UserName", typeof(string)); 
      dtExcel.Columns.Add("Education", typeof(string)); 
      dtExcel.Columns.Add("Location", typeof(string)); 
      dtExcel.Columns.Add("Select", typeof(string)); 
      foreach (GridViewRow row in grvExcelData.Rows) 
      { 
       string UserName = ((TextBox)row.FindControl("txtUserName")).Text; 
       string Education = ((TextBox)row.FindControl("txtEducation")).Text; 
       string Location = ((TextBox)row.FindControl("txtLocation")).Text; 
       string Location2 = ((DropDownList)row.FindControl("DrdDatabase")).Text; 
       DataRow dr = dtExcel.NewRow(); 
       dr["UserName"] = UserName; 
       dr["Education"] = Education; 
       dr["Location"] = Location; 
       dr["Select"] = Location2; 
       dtExcel.Rows.Add(dr); 
      } 

      CreateWorkbook(dtExcel, Server.MapPath("~/DownlodedFiles/Excel.xls")); 
     } 

     public static void CreateWorkbook(System.Data.DataTable dtExcelData, String path) 
     { 
      int rowindex = 0; 
      int columnindex = 1; 

      Microsoft.Office.Interop.Excel.Application app; 
      Microsoft.Office.Interop.Excel.Worksheet wksheet; 
      Microsoft.Office.Interop.Excel.Workbook wkbook; 
      app = new Microsoft.Office.Interop.Excel.Application(); 
      app.Visible = false; 
      wkbook = app.Workbooks.Add(true); 
      wksheet = (Microsoft.Office.Interop.Excel.Worksheet)wkbook.ActiveSheet; 
      try 
      { 
       for (int i = 0; i < dtExcelData.Columns.Count; i++) 
       { 
        wksheet.Cells[1, i + 1] = dtExcelData.Columns[i].ColumnName; 
       } 

       foreach (DataRow row in dtExcelData.Rows) 
       { 
        rowindex++; 
        columnindex = 0; 
        foreach (DataColumn col in dtExcelData.Columns) 
        { 
         columnindex++; 
         wksheet.Cells[rowindex + 1, columnindex] = row[col.ColumnName]; 
        } 
       } 

       app.Visible = true; 
      } 
      catch (Exception ex1) 
      { 

      } 
      app.UserControl = true; 
     } 
    } 
}