将带有图像的数据导出到 Excel

Export data with images to Excel

我正在使用以下代码将带有图像的数据导出到 Excel

代码

protected void ExportToExcel(对象发送者,EventArgs e)
{
    //从数据库中获取数据到数据表中
    字符串 strQuery = "select CustomerID, ContactName, City, PostalCode, display_picture" +
        “来自客户”;
    SqlCommand cmd = new SqlCommand(strQuery);
    数据表 dt = GetData(cmd);

    //创建一个虚拟的GridView
    GridView GridView1 = new GridView();
    GridView1.AllowPaging = 假;
    GridView1.DataSource = dt;
    GridView1.DataBind();

    Response.Clear();
    Response.Buffer = 真;
    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(风格);
    Response.Output.Write(sw.ToString());
    Response.Flush();
    Response.End();
}

Excel 正在正确下载。但问题是当我过滤 Excel 中的数据时。 Excel 中的图像在 Move but don't size with cells 属性 中。 属性,Move and size with cells?

如何制作图片

您的代码根本不会创建 Excel 文件,它会创建一个 HTML table 并使用伪造的内容类型发送它,即旧二进制文件 Excel 格式 (xls)。 Excel 没有被愚弄,它检测到这是一个 HTML table 并尝试使用默认设置导入它。这可能会因多种原因而中断。

使用像 EPPlus 这样的库创建一个真正的 Excel 文件要容易得多,成本也要低得多。对于初学者,您可以直接从数据表中填充 sheet :

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 table 或 CSV 文件小,而不是实际 Excel 文件。

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 以了解有关格式化数据的更多信息。