您的位置:首页 > 编程语言 > C#

C# 实现Excel导出图片

2017-07-17 16:34 507 查看
1.导出Excle表格,表格内嵌套图片功能:

2.封装导出文件方法

  public bool ExportExcel(DataTable dt, string notile,string title)

        {

            CreatePic cp = new CreatePic();

            //创建工作簿

            NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();

            //创建表

            NPOI.SS.UserModel.ISheet sheet = book.CreateSheet(notile);

            //自适应列宽

            //  sheet.AutoSizeColumn(1, true);

            //标题行合并单元格

            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, dt.Columns.Count - 1));

            NPOI.SS.UserModel.IRow firstrow = sheet.CreateRow(0);

            NPOI.SS.UserModel.ICell firstcell = firstrow.CreateCell(0);

            //表名样式

            NPOI.SS.UserModel.ICellStyle styleHeader = book.CreateCellStyle();

            NPOI.SS.UserModel.IFont fontHeader = book.CreateFont();

            styleHeader.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Left;

            styleHeader.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;

            fontHeader.FontHeightInPoints = 15;

            styleHeader.SetFont(fontHeader);

            firstcell.CellStyle = styleHeader;

            firstcell.SetCellValue(title);

            try

            {

                //列名样式

                NPOI.SS.UserModel.ICellStyle styleColName = book.CreateCellStyle();

                NPOI.SS.UserModel.IFont fontColName = book.CreateFont();

                styleColName.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;

                styleColName.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;

                fontColName.FontHeightInPoints = 14;

                styleColName.SetFont(fontColName);

                //数据的样式、字体大小

                NPOI.SS.UserModel.ICellStyle styleBody = book.CreateCellStyle();

                NPOI.SS.UserModel.IFont fontBody = book.CreateFont();

                styleBody.Alignment = NPOI.SS.UserModel.HorizontalAlignment.Center;

                styleBody.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;

                fontBody.FontHeightInPoints = 12;

                styleBody.SetFont(fontBody);

                //创建具体单元格数据

                int rowCount = dt.Rows.Count;

                int colCount = dt.Columns.Count;

                NPOI.SS.UserModel.IRow colNameRow = sheet.CreateRow(1);

                for (int x = 0; x < colCount; x++)

                { //将列名写入单元格

                    NPOI.SS.UserModel.ICell colNameCell = colNameRow.CreateCell(x);

                    colNameCell.SetCellValue(dt.Columns[x].ColumnName);

                    colNameCell.CellStyle = styleColName;

                }

                for (int i = 0; i < rowCount; i++)

                {

                    NPOI.SS.UserModel.IRow row = sheet.CreateRow(i + 2);//数据从第三行开始 第一行表名 第二行列名

                    for (int j = 0; j < colCount; j++)

                    {

                        //填充数据

                        NPOI.SS.UserModel.ICell cell = row.CreateCell(j);

                        if (dt.Rows[i][j] != null)

                        {

                            cell.SetCellValue(dt.Rows[i][j].ToString() + "               ");

                            if (dt.Rows[i][j].ToString().Contains("www"))

                            {

                                cell.Row.Height = 4000;

                                

                                cp.AddPic(sheet, book, dt.Rows[i][j].ToString(), i+2, j);

                            }

                            

                        }

                        else

                        {

                            cell.SetCellValue("");

                        }

                        cell.CellStyle = styleBody;

                    }

                }

                //自适应列宽

                for (int x = 0; x < colCount; x++)

                {

                    sheet.AutoSizeColumn(x, true);

                }

                //最后插入图片

                

                //设置宽高

              //  sheet.SetColumnWidth(4,2000);

                

                //此处代码是将 xls文件发到页面通过浏览器直接下
98dc
载到本地  可以放到 界面调用的地方

                System.IO.MemoryStream ms = new System.IO.MemoryStream();

                book.Write(ms);

                //Response.AddHeader("Content-Disposition", string.Format("attachment; filename=ccc.xls"));

                Response.AddHeader("Content-Disposition", "attachment;filename=" + Server.UrlEncode(notile + ".xls"));//注意

                Response.BinaryWrite(ms.ToArray());

                book = null;

                ms.Close();

                ms.Dispose();

                return true;

            }

            catch

            {

                throw new Exception();

            }

            finally

            {

                book = null;

            }

        }

3.具体的引用

using NPOI.HSSF.UserModel;

using NPOI.SS.UserModel;

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

3.封装成方法,使用NOPI插件导出Excel时候调用改方法即可

  /// <summary>

        /// 封装方法,用于表格内渲染图片

        /// </summary>

        /// <param name="sheet"></param>

        /// <param name="workbook">工作簿</param>

        /// <param name="fileurl">图片地址</param>

        /// <param name="row">行</param>

        /// <param name="col">列</param>

        public void AddPic(ISheet sheet, HSSFWorkbook workbook, string fileurl, int row, int col)

        {

            byte[] bytes = System.IO.File.ReadAllBytes(fileurl);

            int picindex = workbook.AddPicture(bytes, NPOI.SS.UserModel.PictureType.JPEG);

            HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();

            HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,48,48,col,row,col+1,row+1);

            HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor,picindex);

            

        }

文章为原创作品
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: