2016-12-15 80 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,它只是一個帶有虛假內容類型的HTML表格,Excel *可能使用默認設置導入該表格。使用像EPPlus這樣的庫來創建真正的Excel文件。這是一個很容易 –

+0

@PanagiotisKanavos:謝謝,我會檢查。是否有可能像[EPPlus](http://epplus.codeplex.com/) – Wanderer

+0

這樣的文本添加圖像EPplus生成真正的Excel文件,所以是的,它可以添加圖片,數據透視表,連接等。 SO中有許多問題展示瞭如何做到這一點,包括關於定位,造型等問題 –

回答

2

您的代碼根本不會創建Excel文件,它會創建一個HTML表並使用舊的二進制Excel格式(xls)的假內容類型發送它。 Excel未被愚弄,它檢測到這是一個HTML表格,並嘗試使用默認設置導入它。這可能因任何原因而中斷。

使用庫如EPPlus創建一個真正的Excel文件更容易,更便宜。首先,你可以直接從數據表中填寫一個表:

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

結果是xlsx文件,該文件是壓縮XML文件的包:

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方法添加圖片。這意味着它實際上是較小的,而不是通常生成的HTML表格或CSV文件,而不是實際的Excel文件。

1

EasyXLS是一個庫,它還可以將圖像導出爲xlsx和xls文件。

//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"); 

更多有關插入圖片,你可以找到:

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

如果圖像字節從數據庫中加載,則需要暫時​​保存在本地機上的圖像。

您還可以檢查how to export gridview to excel以查看有關格式化數據的更多信息。