2016-12-15 3 views
1

다음 코드를 사용하여 이미지가 포함 된 데이터를 Excel으로 내보내고 있습니다.이미지가있는 데이터를 Excel로 내보내기

코드

 
protected void ExportToExcel(object sender, EventArgs e) 
{ 
    //Get the data from database into datatable 
    string strQuery = "select CustomerID, ContactName, City, PostalCode, display_picture" + 
     " from customers"; 
    SqlCommand cmd = new SqlCommand(strQuery); 
    DataTable dt = GetData(cmd); 

    //Create a dummy GridView 
    GridView GridView1 = new GridView(); 
    GridView1.AllowPaging = false; 
    GridView1.DataSource = dt; 
    GridView1.DataBind(); 

    Response.Clear(); 
    Response.Buffer = true; 
    Response.AddHeader("content-disposition", 
    "attachment;filename=DataTable.xls"); 
    Response.Charset = ""; 
    Response.ContentType = "application/vnd.ms-excel"; 
    StringWriter sw = new StringWriter(); 
    HtmlTextWriter hw = new HtmlTextWriter(sw); 

    for (int i = 0; i .textmode { mso-number-format:\@; } "; 
    Response.Write(style); 
    Response.Output.Write(sw.ToString()); 
    Response.Flush(); 
    Response.End(); 
} 

Excel이 제대로 다운로드됩니다. 그러나 문제는 내가 Excel의 데이터를 필터링 할 때입니다. Excel의 이미지는 Move but don't size with cells 속성에 있습니다. 속성을 가진 이미지를 만드는 방법, Move and size with cells?

+0

이것은 Excel이 아니며, Excel *이 기본 설정을 사용하여 가져올 수있는 가짜 컨텐트 유형의 HTML 테이블 일뿐입니다. 실제 Excel 파일을 만들려면 EPPlus와 같은 라이브러리를 사용하십시오. –

+0

@PanagiotisKanavos : 감사합니다. 나는 그것을 점검 할 것입니다. 그리고 [EPPlus] (http://epplus.codeplex.com/)와 같은 텍스트로 이미지를 추가 할 수 있습니까? – Wanderer

+0

EPplus는 실제 Excel 파일을 생성하므로 이미지, 피벗 테이블, 연결 등을 추가 할 수 있습니다. 위치, 스타일링 등에 관한 질문을 포함하여 SO를 수행하는 방법을 보여주는 많은 질문이 있습니다. –

답변

2

코드는 Excel 파일을 전혀 만들지 않으며, HTML 테이블을 생성하고 이전 바이너리 Excel 형식 (xls)의 가짜 컨텐트 유형으로 보냅니다. Excel이 속지 않으므로 HTML 테이블임을 감지하고 기본 설정을 사용하여 가져옵니다. 이는 여러 가지 이유 때문에 중단 될 수 있습니다.

EPPlus과 같은 라이브러리로 실제 Excel 파일을 만드는 것이 훨씬 쉽고 저렴합니다. 우선, 당신은 DataTable을 직접 시트를 채울 수 :

ExcelPicture pic = ws.Drawings.AddPicture("pic1", new FileInfo("PathToMyImage.png")); 

결과는 압축 된 XML 파일의 패키지 인 xlsx 파일은 다음과 같습니다

protected void ExportToExcel(object sender, EventArgs e) 
{ 
    ///... 
    DataTable dt = GetData(cmd); 

    using (ExcelPackage pck = new ExcelPackage()) 
    { 
     //Create the worksheet 
     var ws = pck.Workbook.Worksheets.Add("Demo"); 
     //Load the datatable into the sheet, starting from cell A1. 
     //Print the column names on row 1 
     ws.Cells["A1"].LoadFromDataTable(dt, true); 
     //That's it! 

     //Write it back to the client 
     Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; 
     Response.AddHeader("content-disposition", "attachment; filename=ExcelDemo.xlsx"); 
     Response.BinaryWrite(pck.GetAsByteArray()); 
    } 
} 

당신은 Drawings.AddPicture 방법으로 사진을 추가 할 수 있습니다 . 즉, 실제 Excel 파일 대신 생성되는 HTML 표 또는 CSV 파일보다 실제로는 입니다.

1

EasyXLS은 이미지가있는 xlsx 및 xls 파일도 내보내는 라이브러리입니다. 이미지 바이트가 데이터베이스에서로드하는 경우 시스템에서 로컬 이미지를 임시 저장해야합니다

http://www.easyxls.com/manual/basics/excel-image-import-export.html

: 이미지를 삽입하는 방법에 대한

//Create a workbook 
ExcelDocument workbook = new ExcelDocument(); 

//Add a worksheet 
ExcelWorksheet worksheet = new ExcelWorksheet("Gridview"); 
workbook.easy_addWorksheet(worksheet); 

//Add the gridview to the worksheet 
DataSet dataSet = new DataSet(); 
dataSet.Tables.Add((DataTable)GridView1.DataSource); 
worksheet.easy_insertDataSet(dataSet); 

//Add an image 
worksheet.easy_addImage("image.jpg", "A10"); 

//Exporting gridview with image 
workbook.easy_WriteXLSXFile("DataTable.xlsx"); 

더, 당신은에서 찾을 수 있습니다.

how to export gridview to excel을 선택하여 데이터 서식 지정에 대해 자세히 볼 수도 있습니다.

관련 문제