Tôi đã bị mắc kẹt trong điều này trong nhiều ngày và mặc dù tất cả các trợ giúp trên mạng, không có giải pháp nào trong số này đã làm việc cho tôi. Những gì tôi muốn làm là tạo ra một tập tin excel bằng cách sử dụng thư viện EPPlus với một số dữ liệu cơ bản trong nó mà tôi đang kéo từ một thủ tục được lưu trữ. Đây là mã mà tôi có trong tệp ExportDocument.cs của mình:Viết một tệp Excel trong EPPlus
public static ExcelPackage CreateExcelDocument(int [] arr)
{
String path = @"D:\temp\testsheet3.xlsx";
//FileInfo newFile = null;
/*if (!File.Exists(path + "\\testsheet2.xlsx"))
newFile = new FileInfo(path + "\\testsheet2.xlsx");
else
return newFile;*/
using (ExcelPackage package = new ExcelPackage())
{
ExcelWorksheet ws = package.Workbook.Worksheets.Add("testsheet");
ws.Cells["B1"].Value = "Number of Used Agencies";
ws.Cells["C1"].Value = "Active Agencies";
ws.Cells["D1"].Value = "Inactive Agencies";
ws.Cells["E1"].Value = "Total Hours Volunteered";
ws.Cells["B1:E1"].Style.Font.Bold = true;
int x = 2;
char pos = 'B';
foreach (object o in arr)
{
String str = pos + x.ToString();
ws.Cells[str].Value = o.ToString();
if (pos > 'E')
{
pos = 'B';
x++;
}
pos++;
}
//newFile.Create();
//newFile.MoveTo(@"C:/testSheet.xlsx");
//package.SaveAs(newFile);
package.Save();
/*Stream stream = File.Create(path);
package.SaveAs(stream);
stream.Close();*/
//byte[] data = File.ReadAllBytes(path);
//byte[] bin = package.GetAsByteArray();
//String path = Path.GetTempPath();
//File.WriteAllBytes(path, bin);
//File.WriteAllBytes(path + "testsheet.xlsx", bin);
//HttpContext.Current.Response.Write("<script>alert('"+ temp + "');</script>");
//System.Diagnostics.Process.Start(path + "\\testsheet.xlsx");
return package;
}
}
Tất cả mã nhận xét là những thứ khác nhau mà tôi đã tìm thấy trên internet để thử. Lưu ý rằng đây là một tổ chức trường học và chúng tôi không sử dụng MVC. Sau đó tôi sử dụng mã phía sau tệp để kéo phương thức này như sau:
protected void GenerateReport(Object o, EventArgs e)
{
//NamingContainer.FindControl("ReportsControl").Visible = false;
//NamingContainer.FindControl("ReportsGenerateControl").Visible = true;
Session["reportSession"] = ddReport.SelectedItem.Value.ToString();
int [] arr = new int [ReportRepository.GetAgencyCounts().Count];
ReportRepository.GetAgencyCounts().CopyTo(arr, 0);
ExcelPackage pck = ExportDocument.CreateExcelDocument(arr);
/*try
{
byte [] data = ExportDocument.CreateExcelDocument(arr).GetAsByteArray();
Response.Clear();
Response.Buffer = true;
Response.BinaryWrite(data);
Response.AddHeader("content-length", data.Length.ToString());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.Flush();
Response.Close();
Response.End();
}
catch (Exception ex) { }*/
/*var stream = new MemoryStream();
pck.SaveAs(stream);
String filename = "myfile.xlsx";
String contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
var cd = new System.Net.Mime.ContentDisposition
{
Inline = false,
FileName = filename
};
Response.AppendHeader("Content-Disposition", cd.ToString());
stream.Position = 0;
return File(stream, contentType, filename);*/
/*Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AppendHeader("Content-Disposition", "attachment; filename=" + file.Name);
Response.TransmitFile(Path.GetFullPath(file.Name));
Response.Flush();
Response.Close();*/
/*Response.ClearHeaders();
Response.BinaryWrite(pck.GetAsByteArray());
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment; filename=Sample2.xlsx");
Response.Flush();
Response.Close();*/
}
Một lần nữa lưu ý rằng tất cả mã nhận xét là những thứ tôi đã tìm thấy từ nhiều nguồn khác nhau.
Vì vậy, tôi không nhận được bất kỳ lỗi nào nhưng khi tôi nhấp vào nút trên ứng dụng của tôi để thực thi mã đằng sau phương pháp, không có gì đang xảy ra. Nó đang tải và nó chạy qua nhưng không có tệp nào được tạo, không có gì đang mở ra. Đây là lần đầu tiên tôi sử dụng EPPlus và tôi không hoàn toàn quen thuộc với việc xuất khẩu những thứ để xuất sắc để tôi cảm thấy bị lạc ở đây.
Có đề xuất nào cho các bạn không? Tôi sẽ vui lòng làm rõ bất kỳ điểm nào mà tôi chưa đạt được.
bạn đã khai báo một 'đường dẫn', nhưng tôi không thấy nó được sử dụng trong mã (bỏ qua các bit nhận xét). Làm thế nào bạn nói excelpackage để lưu nó vào một vị trí? –
biến đường dẫn hiện không được sử dụng. Cách nó được viết bây giờ, nó là đối tượng gói ExcelPackage đang sử dụng phương pháp lưu của nó và sau đó tôi gọi ExcelPackage trong tệp codebehind nơi tôi đang viết nó ra bằng cách sử dụng Response.BinaryWrite (byte [] arr). Đó là phương pháp cuối cùng tôi đã thử anyway. Bằng cách đó, không cần một con đường. – Rahlord
Ngoài ra, tôi cũng đã thử lưu tệp vào một đường dẫn và sau đó mở nó từ đó nhưng tôi đã nhận được cùng một vấn đề tôi đang có bây giờ. Tệp không bao giờ được tạo và mã của tôi không bị đánh bom hoặc lỗi ra – Rahlord