Erstellen von excel-Datei und laden Sie es, ohne es zu speichern in den server, ist es möglich?
ich es geschafft haben, erstellen Sie eine excel-Datei mit interop, und jetzt möchte ich, dass excel Datei heruntergeladen werden
im web-browser statt des speichern im in-Laufwerk.
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);
}
dies ist, was ich bisher versucht habe zu erstellen, die excel-Datei. müssen einige englightment. "dieser code speichern von excel-Datei zu fahren, das ist nicht das Ergebnis, das ich erreichen will."
dies ist meine generierten excel :
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie Sie speichern die Datei auf den server vorübergehend, um zu dienen, an den client.
Können Sie es speichern in einer temp-Pfad mithilfe der Dienstprogramme im
System.IO.Path
wie GetTempPath(), um die Datei an einem Ort, der OS wird die Datei zu bereinigen automatisch, wenn es nicht benötigt wird.Ich weiß nicht, welchen web-server du verwendest, aber wenn du mit MVC, du würdest so etwas tun, um die Datei in Ihrer Steuerung
Ich verwendet https://npoi.codeplex.com/ zu erstellen, excel-und kehrte ein FileStereamResult auf meine controller-action.
Ich denke, man kann das nicht mit der Excel-Bibliothek, die Sie verwenden
Wie schreibt man eine Excel-Arbeitsmappe in ein MemoryStream-in .NET?
Aber schauen Sie sich npoi ist wirklich einfach und Sie haben sogar ein Beispiel auf, was Sie suchen, das war etwas wie
Wie diese Sie nicht speichern änderungen an der Datei system.
Mit einem mix Ihrer Arbeit und das Beispiel habe ich mit NPOI können Sie so etwas tun
In der übersicht, erstellen Sie die Datei wie Sie jetzt tun, speichern Sie, und laden Sie es in den Speicher, löschen und wieder den stream
Fügen Sie diesen Codeausschnitt eigenes Projekt unter
Marshal.ReleaseComObject(xlApp);
diese Zeile.Danach stellen Sie den Pfad ein, wo Sie Ihre Datei speichern im system.
Ich hoffe, dieser code funktioniert.