将带有图像的数据导出到 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 到一个工作表中

如何使用 Excel 对象将 DataGridView 数据导出到 Excel

使用 jasper 将日期导出到 Excel

如何使用 checkListBox 将数据导出到 Excel

php 数据导出到excel 2种带有合并单元格的导出

如何将带有中文字符的 Excel 文件导出为 CSV?