저는 며칠 동안이 일에 매달 렸습니다. 모든 도움이 있었지만,이 솔루션들 중 아무 것도 저에게 효과가 없었습니다. 내가하고 싶은 일은 EPPlus 라이브러리를 사용하여 저장 프로 시저에서 가져 오는 몇 가지 기본 데이터가있는 Excel 파일을 만드는 것입니다.EPPlus에 Excel 파일 작성하기
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;
}
}
모든 주석 코드는 내가하려고 인터넷에서 발견 한 여러 가지이다 : 이것은 내 ExportDocument.cs 파일에있는 코드입니다. 이것은 학교 조직이며 MVC를 사용하지 않습니다. 나는 다음과 같이이 방법을 끌어 파일 뒤에 코드를 사용하고 있습니다 :
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();*/
}
가 다시 모든 주석 코드가 내가 근무 한 적이없는 다양한 소스에서 발견 한 것들 있습니다.
그래서 오류가 발생하지 않지만 응용 프로그램에서 코드 숨김 메서드를 실행하기 위해 단추를 클릭해도 아무 일도 일어나지 않습니다. 로드 중이고 실행되지만 생성 된 파일이 없으며 아무것도 열리지 않습니다. EPPlus를 처음 사용하는 것은 이번이 처음이며 프로그래밍 방식으로 Excel을 내보내는 데 익숙하지 않아서 여기에서 길을 잃은 느낌이 듭니다.
의견이 있으십니까? 나는 내가 완전히 쳤지 않은 점을 분명히 밝혀 줄 것이다.
당신은'path'를 선언했지만 코드에서 사용 된 것을 볼 수 없습니다 (주석 처리 된 비트는 무시함). 어떻게 그것을 excel 패키지에 저장하라는 말입니까? –
경로 변수가 현재 사용되지 않습니다. 지금 작성되는 방식은 ExcelPackage 패키지 객체가 save 메서드를 사용하고 나서 Response.BinaryWrite (byte [] arr)를 사용하여 코드 비헤이비어 파일에서 ExcelPackage를 호출하는 것입니다. 그것은 어쨌든 시도한 마지막 방법이었습니다. 이를 사용하면 경로가 필요 없습니다. – Rahlord
또한 경로에 파일을 저장 한 다음 거기에서 열어 보았지만 지금은 동일한 문제가 발생했습니다. 파일이 만들어지지 않았고 코드가 폭탄이나 오류가 없었습니다. – Rahlord