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(); 
} 

The 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-таблица и пытается импортировать ее с использованием настроек по умолчанию. Это может сломаться по ряду причин.

Намного проще и дешевле создать настоящий файл Excel с библиотекой, такой как EPPlus. Для начала, вы можете заполнить лист непосредственно из DataTable:

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 методом:

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

Результатом является xlsx файл, который представляет собой пакет сжатых файлов XML , Это означает, что на самом деле меньше, чем 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.

Смежные вопросы