将带有图像的数据导出到 Excel
Posted
技术标签:
【中文标题】将带有图像的数据导出到 Excel【英文标题】:Export data with images to Excel 【发布时间】:2017-04-30 21:59:27 【问题描述】:我正在使用以下代码将带有图像的数据导出到Excel
。
代码
protected void ExportToExcel(对象发送者,EventArgs e) //从数据库中获取数据到数据表中 string strQuery = "select CustomerID, ContactName, City, PostalCode, display_picture" + “来自客户”; SqlCommand cmd = 新的 SqlCommand(strQuery); 数据表 dt = GetData(cmd); //创建一个虚拟的GridView GridView GridView1 = new GridView(); GridView1.AllowPaging = false; GridView1.DataSource = dt; GridView1.DataBind(); 响应。清除(); 响应缓冲区=真; Response.AddHeader("内容配置", “附件;文件名=DataTable.xls”); Response.Charset = ""; Response.ContentType = "应用程序/vnd.ms-excel"; StringWriter sw = new StringWriter(); htmlTextWriter hw = new HtmlTextWriter(sw); for (int i = 0; i .textmode mso-number-format:\@; "; Response.Write(风格); Response.Output.Write(sw.ToString()); Response.Flush(); 响应。结束();Excel
正在正确下载。但问题是当我过滤Excel
中的数据时。 Excel
中的图像位于 Move but don't size with cells
属性中。如何用Move and size with cells
属性制作图片?
【问题讨论】:
这不是 Excel,它只是一个 HTML 表格,其中包含 Excel 可能 能够使用默认设置导入的虚假内容类型。使用像 EPPlus 这样的库来创建真正的 Excel 文件。这要容易得多 @PanagiotisKanavos:谢谢,我会检查的。是否可以使用EPPlus 将图像添加为文本 EPplus 生成真实的 Excel 文件,所以是的,可以添加图片、数据透视表、连接等。SO 中有很多问题说明了如何执行此操作,包括有关定位、样式等的问题 【参考方案1】:您的代码根本不会创建 Excel 文件,它会创建一个 HTML 表格并使用伪造的内容类型发送它,即旧的二进制 Excel 格式 (xls)。 Excel 不会上当,它会检测到这是一个 HTML 表格并尝试使用默认设置将其导入。这可能由于多种原因而中断。
使用EPPlus 之类的库创建真正的 Excel 文件要容易得多,而且成本更低。对于初学者,您可以直接从 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 文件。
【讨论】:
【参考方案2】: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 以了解有关格式化数据的更多信息。
【讨论】:
以上是关于将带有图像的数据导出到 Excel的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Excel 对象将 DataGridView 数据导出到 Excel