NHibernate를 사용하는 SQL Server 2008 데이터베이스에서 데이터를 읽고 있는데 개체 목록을 얻고 있습니다. 즉시 Excel 파일 .xls
을 작성하여 사용자에게 제공하고 싶습니다.Excel writer on fly
내 문제는, 어떤 임시 파일이나 폴더를 서버에 만들 수없고 blob을 사용할 수 없다는 것입니다.
모든 솔루션?
NHibernate를 사용하는 SQL Server 2008 데이터베이스에서 데이터를 읽고 있는데 개체 목록을 얻고 있습니다. 즉시 Excel 파일 .xls
을 작성하여 사용자에게 제공하고 싶습니다.Excel writer on fly
내 문제는, 어떤 임시 파일이나 폴더를 서버에 만들 수없고 blob을 사용할 수 없다는 것입니다.
모든 솔루션?
당신은 ClosedXML 라이브러리를 시도 할 수있는 메모리 스트림에 저장 (쉽게 통합 문서를 조작하는). 그런 다음 짧게 짧게 http를 통해 평소와 같이 스트림을 보냅니다. 웹 응답시
public byte[] GetExcelByteStream(string filename)
{
using (var workbook = new XLWorkbook(filename))
{
var worksheet = workbook.Worksheets.Add("Sample Sheet");
worksheet.Cell("A1").Value = "Hello World!";
using (var ms = new MemoryStream())
{
workbook.SaveAs(ms);
return ms.ToArray();
}
}
}
고전적인 방법 :
var excelStream = GetExcelByteStream("MyExcelFilename");
context.Response.Clear();
context.Response.AddHeader("Content-Disposition", "attachment;filename="+context.Request.Form["txtFileName"].ToString());
context.Response.AddHeader("Content-Length", excelStream.Length.ToString());
context.Response.ContentType = "application/octet-stream";
context.Response.BinaryWrite(excelStream);
그것이 도움이되기를 바랍니다.
네, 좋아 보이네요. 감사. 이것을 시도하고 여기에 내 답변을 게시 할 것입니다. – vishnu
.xls
이어야하나요 아니면 .xlsx
도 받아 들일 수 있습니까?
저는 파일을 거치지 않고 스트림에 쓰는 것을 지원하는 C# 용 a simple .xlsx writer 라이브러리의 저자입니다.
The documentation에는 ASP.net MVC ActionResult가 들어 있습니다.이 인스턴스를 상속 한 다음 GenerateWorkbook 메서드를 재정 의하여 데이터베이스 테이블에서 통합 문서를 생성 할 수 있습니다.
public abstract class ExcelResultBase : ActionResult
{
private readonly string _filename;
protected ExcelResultBase(string filename)
{
_filename = filename;
}
protected abstract Workbook GenerateWorkbook();
public override void ExecuteResult(ControllerContext context)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
var workbook = GenerateWorkbook();
if (workbook == null)
{
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.NotFound;
return;
}
context.HttpContext.Response.ContentType = "application/octet-stream";
context.HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
context.HttpContext.Response.AppendHeader("content-disposition", "attachment; filename=\"" + _filename + "\"");
workbook.Save(context.HttpContext.Response.OutputStream, CompressionLevel.NoCompression);
}
}
당신은 iis를 사용하여 db 테이블을 전송하여 프로세스 명령을 사용하여 db 파일을 iis로 선언 할 수 있습니다. –
좀 더 설명해 주시겠습니까? 나는 C#에 새로운 사람이다. :) – vishnu