Créer un fichier excel et de le télécharger sans l'enregistrer dans le serveur, est-il possible?
j'ai réussi à créer un fichier excel avec l'interopérabilité, et maintenant, je veux que excel fichier à télécharger
dans un navigateur web au lieu de les enregistrer dans le dans le lecteur.
var xlApp = new Excel.Application();
Excel.Workbook xlWorkBook = xlApp.Workbooks.Add();
Excel.Worksheet xlWorkSheet = xlWorkBook.Sheets[1];
Excel.Range chartRange;
var attendance_list = CTX.schedules.Where(s => s.event_id == Convert.ToInt32(param));
if (attendance_list.Count() > 0)
{
xlWorkSheet.Cells[1, 1] = "PIC : ";
xlWorkSheet.Cells[2, 1] = "Tempat : ";
xlWorkSheet.Cells[1, 2] = attendance_list.FirstOrDefault().calendar_event.PIC;
xlWorkSheet.Cells[2, 2] = attendance_list.FirstOrDefault().calendar_event.sched_loc;
xlWorkSheet.Shapes.AddPicture(@Server.MapPath("~/Images/" + "oto_group2.png"), MsoTriState.msoFalse, MsoTriState.msoCTrue, 50, 50, 100, 45);
xlWorkSheet.Shapes.AddPicture(@Server.MapPath("~/Images/" + "oto_group3.png"), MsoTriState.msoFalse, MsoTriState.msoCTrue, 280, 50, 100, 45);
int row = 10;
int idx = 0;
xlWorkSheet.Cells[9, 1] = "No";
xlWorkSheet.Cells[9, 2] = "Name";
xlWorkSheet.Cells[9, 3] = "Phone";
xlWorkSheet.Cells[9, 4] = "Time";
xlWorkSheet.Cells[9, 5] = "Branch";
xlWorkSheet.Cells[9, 6] = "Sign";
xlWorkSheet.Cells[9, 7] = "Note";
chartRange = (xlWorkSheet.get_Range("b9"));
chartRange.ColumnWidth = 40;
chartRange = (xlWorkSheet.get_Range("c9"));
chartRange.ColumnWidth = 20;
chartRange = (xlWorkSheet.get_Range("g9"));
chartRange.ColumnWidth = 20;
var key = CTX.translate_value_ms.Where(t => t.PSF_type == "HRS_PHONE_TYPE"
&& t.value == "CELL").FirstOrDefault().translate_value_id;
foreach (var item in attendance_list)
{
idx++;
var hp = item.user_list.user_phones.Where(p => p.phone_type_id == key).FirstOrDefault();
xlWorkSheet.Cells[row, 1] = idx;
xlWorkSheet.Cells[row, 2] = displayFullName(item.user_list.fname, item.user_list.mname, item.user_list.lname);
xlWorkSheet.Cells[row, 3] = hp.phone_number;
xlWorkSheet.Cells[row, 4] = item.calendar_event.time_range;
xlWorkSheet.Cells[row, 5] = item.calendar_event.branch;
xlWorkSheet.Cells[row, 6] = "";
xlWorkSheet.Cells[row, 7] = "";
row++;
}
chartRange = xlWorkSheet.get_Range("a9", "g9");
chartRange.Font.Bold = true;
chartRange.Interior.Color = System.Drawing.Color.Gray;
chartRange = xlWorkSheet.get_Range("a9", "g" + (row - 1));
chartRange.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlMedium, Excel.XlColorIndex.xlColorIndexAutomatic, Excel.XlColorIndex.xlColorIndexAutomatic);
xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal);
xlWorkBook.Close(true);
xlApp.Quit();
Marshal.ReleaseComObject(xlApp);
}
c'est ce que j'ai essayé jusqu'à présent de créer un fichier excel. besoin de quelques englightment. "ce code d'enregistrer le fichier excel à conduire, ce qui n'est pas le résultat que je souhaite obtenir."
c'est mon excel généré :
Vous devez vous connecter pour publier un commentaire.
Vous aurez besoin pour enregistrer le fichier sur le serveur temporairement afin de le servir au client.
Vous pouvez l'enregistrer dans un chemin d'accès temporaire à l'aide d'utilitaires en
System.IO.Path
comme GetTempPath() de placer le fichier dans un endroit de l'OS permettra de nettoyer le fichier automatiquement lorsqu'il n'est pas nécessaire.Je ne sais pas quel serveur web que vous utilisez, mais si vous êtes en utilisant MVC vous feriez quelque chose de ce genre pour desservir le fichier dans votre contrôleur
J'ai utilisé https://npoi.codeplex.com/ créer excel et est retourné FileStereamResult sur mon contrôleur de l'action.
Je pense que vous ne pouvez pas le faire avec Excel bibliothèque que vous utilisez
Comment écrire un classeur Excel dans un MemoryStream dans .NET?
Mais de vérifier npoi est vraiment simple et ils ont même un exemple sur ce que vous cherchez, ce qui était quelque chose comme ceci
Comme cela, vous n'avez pas sauver quoi que ce soit pour le système de fichiers.
À l'aide d'un mélange de votre travail et de l'exemple que j'ai fait à l'aide de NPOI vous pouvez faire quelque chose comme ceci
En résumé, créer le fichier comme vous le faites maintenant, enregistrer, charger en mémoire, de les supprimer et renvoyer le flux
Coller cet extrait de code propre projet sous
Marshal.ReleaseComObject(xlApp);
cette ligne.Après ce chemin où votre fichier enregistrer dans le système.
J'espère que ce code fonctionne.