将带有图像的数据导出到 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 以了解有关格式化数据的更多信息。
我正在使用以下代码将带有图像的数据导出到 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 以了解有关格式化数据的更多信息。