【问题标题】:Exporting data-table to excel or word with Images将数据表导出到 excel 或带有图像的 word
【发布时间】:2016-03-24 05:09:08
【问题描述】:

我有一个包含一些图像的数据表,我正在尝试将该数据表导出到 excel 或 word,使用下面的代码它不会导出图像,如何导出带有图像的数据表?

Response.Clear();
Response.Buffer = true;
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.AddHeader("content-disposition", "attachment;filename=GridViewExport.docx");
Response.ContentEncoding = System.Text.Encoding.UTF8;
Response.Charset = "";
Response.ContentType = "application/ms-word ";
StringWriter sw = new StringWriter();
HtmlTextWriter hw = new HtmlTextWriter(sw);  
string str1 = string.Empty;      
foreach (DataColumn dtcol in dt2.Columns)
{
    Response.Write(str1 + dtcol.ColumnName);
    str1 = "\t";          
}
Response.Write("\n");
foreach (DataRow dr1 in dt2.Rows)
{
    str1 = "";
    for (int j = 0; j < dt2.Columns.Count; j++)
    {
        Response.Write(str1 + Convert.ToString(dr1[j]));
        str1 = "\t";
    }
    Response.Write("\n");           
}
Response.ContentEncoding = System.Text.Encoding.Unicode;
Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
Response.Output.Write(sw.ToString());
Response.Flush();
Response.End();

在这里我还附上了我的数据表快照

【问题讨论】:

  • 我假设 dt2 在这里是数据表。此外,您只想导出文件路径,或者想在导出中显示图像。如果要在导出的文件中显示图像,请使用gridview,将所有数据与图像绑定。并尝试导出网格的内容。你会得到图像。
  • 您好 -Piyush,我正在使用 gridvew 获取导出文件中的图像。但这里我只想要数据表。
  • 嗯,直接从数据库中,你只会得到文件路径。这意味着没有实际的图像标签,只有图像源。如果要获取实际图像,则应设置带有图像源的图像标签。
  • - Piyush ..你能参考任何链接吗?
  • 我的意思是说它不可能直接从数据库中显示图像。您应该改为使用 gridview,并将其导出到 word。

标签: c# asp.net excel datatable


【解决方案1】:

这里我提供了将数据表导出到excel的示例代码。还附上了导出后excel看起来像这样的图像。

使用以下 DLL 来执行代码。 1. ClosedXML.dll 2.WindowsCore.dll 3. DocumentFormat.OpenXML.dll 4. PresentationCore.dll

代码示例:

        try
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("Subject");
            dt.Columns.Add("Category");
            dt.Columns.Add("CPT");
            dt.Columns.Add("Modifier");
            dt.Columns.Add("Dx");
            dt.Columns.Add("GuideLine");
            dt.Columns.Add("Insurance");
            dt.Columns.Add("FilePath");

            string path = Server.MapPath("Image/stock-illustration-1977033-dandelion-in-the-wind.jpg");

            dt.Rows.Add("Billing Steps", "Billing", "NA", "NA", "Billing Steps is very easy", "NA", "NA", path);
            dt.Rows.Add("Billing Steps", "Billing", "NA", "NA", "Billing Steps is very easy", "NA", "NA", "");

            dt.AcceptChanges();
            using (XLWorkbook wb = new XLWorkbook())
            {

                string WorkSheetName = "Sheet1";
                IXLWorksheet WorkSheet = wb.Worksheets.Add(dt, WorkSheetName);
                Bitmap Image = null;


                long ImgHeight = 100;
                long ImgWidth = 100;


                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap(Convert.ToString(dt.Rows[i]["FilePath"]));

                    if (bitmap != null)
                    {
                        var stream = new System.IO.MemoryStream();
                        bitmap.Save(stream, System.Drawing.Imaging.ImageFormat.Gif);
                        if (stream != null)
                        {
                            stream.Position = 0;

                            XLPicture pic = new XLPicture
                            {
                                NoChangeAspect = true,
                                NoMove = false,
                                NoResize = false,
                                ImageStream = stream,
                                Name = "image",
                                EMUOffsetX = 4,
                                EMUOffsetY = 6,
                                MaxHeight = 100,
                                MaxWidth = 100,
                                PaddingX = 10,
                                PaddingY = 10
                            };

                            XLMarker fMark = new XLMarker
                            {
                                ColumnId = 8,
                                RowId = i +1 
                            };

                            pic.AddMarker(fMark);

                            WorkSheet.AddPicture(pic);
                        }
                    }

                    Response.Clear();
                    Response.Buffer = true;
                    Response.Charset = "";
                    Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                    Response.AddHeader("content-disposition", "attachment;filename=download.xlsx");

                    using (MemoryStream MyMemoryStream = new MemoryStream())
                    {
                        wb.SaveAs(MyMemoryStream);
                        MyMemoryStream.WriteTo(Response.OutputStream);
                        Response.Flush();
                        Response.End();
                    }
                }

            }


        }
        catch (Exception)
        {

            throw;
        }

//请使用此代码并让我们知道您的 cmets。

【讨论】:

  • 你好 Mayil...Thnq..thnq 非常...如果我尝试了上面的代码,我在 XLPicture pic = new XLPicture 上收到错误...即使我在 dlls 上面添加了 .. 什么是命名空间你为上面的 dll 写的?
  • 嗨,似乎 Closedxml.dll 没有所需的功能。请下载最新版本的封闭 xml 并从那里获取“ClosedXml.dll”并添加到您的项目中。下载最新 ClosedXml.dll 的 URL:closedxml.codeplex.com/SourceControl/network/forks/ajwhiteway/… 如果您有任何问题,请告诉我。
  • 你好.. -Mayil。 .thanq。 .它正在工作..但在这里它只导出第一张图片。
  • 在下载 excel 之前必须关闭循环。在下一行之前关闭 for 循环。 Response.Clear();
  • 你好-Mayil。它工作正常,但是,这里我有 2 个问题,一个是我无法更改图像宽度和高度(我正在尝试更改 XLPicture pic = new XLPicture),另一个是,在指南行数据中显示三次。在这里,我附上了我在下面生成的 excel 文件的快照。
猜你喜欢
  • 2017-04-30
  • 1970-01-01
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 2018-12-23
  • 2012-07-06
相关资源
最近更新 更多