J'ai ce code mais pour cela, vous devez inclure Excel Composant Com
Ajouter une référence de Microsoft.Office.Interop.Excel.dll dans votre projet va faire tâche pour vous.
using Excel=Microsoft.Office.Interop.Excel;publicstaticboolExportDataTableToExcel(DataTable dt,string filepath){Excel.Application oXL;Excel.Workbook oWB;Excel.Worksheet oSheet;Excel.Range oRange;try{//Start Excel and get Application object.
oXL =newExcel.Application();//Set some properties
oXL.Visible=true;
oXL.DisplayAlerts=false;//Get a new workbook.
oWB = oXL.Workbooks.Add(Missing.Value);//Get the Active sheet
oSheet =(Excel.Worksheet)oWB.ActiveSheet;
oSheet.Name="Data";int rowCount =1;foreach(DataRow dr in dt.Rows){
rowCount +=1;for(int i =1; i < dt.Columns.Count+1; i++){//Add the header the first time through if(rowCount ==2){
oSheet.Cells[1, i]= dt.Columns[i -1].ColumnName;}
oSheet.Cells[rowCount, i]= dr[i -1].ToString();}}//Resize the columns
oRange = oSheet.get_Range(oSheet.Cells[1,1],
oSheet.Cells[rowCount, dt.Columns.Count]);
oRange.EntireColumn.AutoFit();//Save the sheet and close
oSheet =null;
oRange =null;
oWB.SaveAs(filepath,Excel.XlFileFormat.xlWorkbookNormal,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Excel.XlSaveAsAccessMode.xlExclusive,Missing.Value,Missing.Value,Missing.Value,Missing.Value,Missing.Value);
oWB.Close(Missing.Value,Missing.Value,Missing.Value);
oWB =null;
oXL.Quit();}catch{throw;}finally{//Clean up //NOTE: When in release mode, this does the trick
GC.WaitForPendingFinalizers();
GC.Collect();
GC.WaitForPendingFinalizers();
GC.Collect();}returntrue;}
Au lieu d'appeler la GC explicitement, peut-on disposer de la datatable et autres objets excel manuellement ? en appelant respectifs de disposer de la fonction ? En appelant dispose de fonctions, cela va envoyer les objets à la GC de la File d'attente, au lieu de laisser GC trouver l'objet qui est admissible à éliminer. À l'aide de COM est lente et nécessite Excel doit être installé sur le serveur. Chaque fois que vous générez une feuille de calcul Excel processus doit commencer. Vous pouvez vous retrouver avec de multiples Excel processus en cours d'exécution sur votre serveur web. De Plus, vous avez besoin d'une licence. d'accord sur ce point, le moyen le plus rapide est de faire usage de la grille de données de l'exportation vers excel Cela a fait le tour. Mais maintenant, je reçois ce message d'erreur "objet" ne contient pas une définition pour 'get_Range'" j'ai essayé de définir la plage et j'ai également essayé de le faire stackoverflow.com/questions/6546785/... Mais j'ai toujours cant enregistrer le fichier. u avez des idées ?
privatevoidDumpExcel(DataTable tbl){
using (ExcelPackage pck =newExcelPackage()){//Create the worksheetExcelWorksheet ws = pck.Workbook.Worksheets.Add("Demo");//Load the datatable into the sheet, starting from cell A1. Print the column names on row 1
ws.Cells["A1"].LoadFromDataTable(tbl,true);//Format the header for column 1-3
using (ExcelRange rng = ws.Cells["A1:C1"]){
rng.Style.Font.Bold=true;
rng.Style.Fill.PatternType=ExcelFillStyle.Solid;//Set Pattern for the background to Solid
rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(79,129,189));//Set color to dark blue
rng.Style.Font.Color.SetColor(Color.White);}//Example how to Format Column 1 as numeric
using (ExcelRange col = ws.Cells[2,1,2+ tbl.Rows.Count,1]){
col.Style.Numberformat.Format="#,##0.00";
col.Style.HorizontalAlignment=ExcelHorizontalAlignment.Right;}//Write it back to the clientResponse.ContentType="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";Response.AddHeader("content-disposition","attachment; filename=ExcelDemo.xlsx");Response.BinaryWrite(pck.GetAsByteArray());}}}}
Mais la plupart de la commune Générateur de rapports/les Concepteurs peuvent facilement exporter vers excel
vérifiez également que les Reporting Services si vous utilisez SQL SERVER
Juste au cas où quelqu'un d'autre a utilisé la solution choisie et courir dans la "objet ne contient pas une définition pour get_Range" l'exception". J'ai trouvé la solution ici: Feuille de calcul get_Range throws exception. J'espère que cela permettra d'économiser votre temps.
Obtenir de plusieurs façons : 9 Solutions pour Exporter les Données vers Excel pour ASP.NET
J'ai ce code mais pour cela, vous devez inclure Excel Composant Com
Ajouter une référence de
Microsoft.Office.Interop.Excel.dll
dans votre projet va faire tâche pour vous.En appelant dispose de fonctions, cela va envoyer les objets à la GC de la File d'attente, au lieu de laisser GC trouver l'objet qui est admissible à éliminer.
À l'aide de COM est lente et nécessite Excel doit être installé sur le serveur. Chaque fois que vous générez une feuille de calcul Excel processus doit commencer. Vous pouvez vous retrouver avec de multiples Excel processus en cours d'exécution sur votre serveur web. De Plus, vous avez besoin d'une licence.
d'accord sur ce point, le moyen le plus rapide est de faire usage de la grille de données de l'exportation vers excel
Cela a fait le tour. Mais maintenant, je reçois ce message d'erreur "objet" ne contient pas une définition pour 'get_Range'" j'ai essayé de définir la plage et j'ai également essayé de le faire stackoverflow.com/questions/6546785/... Mais j'ai toujours cant enregistrer le fichier. u avez des idées ?
OriginalL'auteur Pranay Rana
Je recommanderais EPPlus - cette solution ne nécessite pas de COM ni interop dll et est très rapide. Parfaitement adapté pour les scénarios de web.
http://epplus.codeplex.com/
http://nuget.org/packages/EPPlus
OriginalL'auteur Jakub Konecki
vous pouvez utiliser
de travailler avec des documents excel "natif"...
À l'aide de C# pour Créer un Document Excel
http://www.codeproject.com/Articles/20228/Using-C-to-Create-an-Excel-Document
Mais la plupart de la commune Générateur de rapports/les Concepteurs peuvent facilement exporter vers excel
vérifiez également que les Reporting Services si vous utilisez SQL SERVER
OriginalL'auteur silverfighter
Juste au cas où quelqu'un d'autre a utilisé la solution choisie et courir dans la "objet ne contient pas une définition pour get_Range" l'exception". J'ai trouvé la solution ici: Feuille de calcul get_Range throws exception. J'espère que cela permettra d'économiser votre temps.
OriginalL'auteur Oliver