Pas besoin de macro du tout. C# lui-même le fera pour vous. Ici, j'ai une démo pour l'importation d'un Excel (pas d'importance 2003/2007) à gridview et l'exportation de données gridview (EDITED/changed) vers un nouveau fichier EXCEL. Essayez-le. Works 100%
Ce que vous devez faire est: créer un dossier nommé "Fichiers" dans votre application Web et conserver votre fichier Excel dans le dossier "Fichiers". Si votre source de données (d'où votre grille est remplie) est autre qu'excel, alors pas besoin du dossier ci-dessus. Vous pouvez écrire votre propre code dans le btnImport_Click(). Voici votre page .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" />
<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>
Et voici votre code derrière.
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;
}
}
}
Non, je n'en ai pas. Avez-vous par hasard eu un code d'exemple pour moi s'il vous plaît? J'ai une date limite pour demain, donc mon temps est vraiment limité pour aller expérimenter maintenant. Si vous pouvez juste me donner un exemple de code, je peux probablement le prendre à partir de là. –
Voici un lien vers un exemple où j'ai utilisé NPOI pour charger un template. Ce n'est pas une correspondance directe, mais le concept général du chargement d'un modèle doit être clair. http://www.zachhunter.com/2010/05/npoi-excel-template/ – Zachary
Merci. J'ai un échantillon de comment le faire. Mais ce que je cherche, c'est comment sélectionner un élément dans la liste déroulante en fonction de l'état de mes applications. J'ai une liste de tous les états dans une liste déroulante, j'ai besoin de sélectionner l'élément de mon état d'application. Comment ferais-je cela par programme? –