使用NPOI导出包含图片数据的EXCEL文件打不开,帮忙看下代码
高洛峰
高洛峰 2016-11-12 11:37:37
0
2
856

要建立一个三列的excel表格,最后一列是个二维码,使用NPOI写完之后,导出的死活打不开,不知道代码哪里错了,麻烦各位帮忙看看代码哪里错了,不甚感激。

public static void CreateImageExcel(List<string> links)
        {
            //创建工作薄  
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = (HSSFSheet)workbook.CreateSheet("Sheet1");
            //填充列标题以及样式  
            int rowsNum = 0;  //行号  
            HSSFRow headerRow = (HSSFRow)sheet.CreateRow(rowsNum);
            string strQrCodePath = "";

            headerRow.CreateCell(0, CellType.String).SetCellValue("编号");
            headerRow.CreateCell(1, CellType.String).SetCellValue("链接");
            headerRow.CreateCell(2, CellType.String).SetCellValue("二维码");
            HSSFRow row = null;
            rowsNum = 1;  //行号,从第2行开始  
            foreach (var link in Links)
            {
                //写入字段值  
                row = (HSSFRow)sheet.CreateRow(rowsNum);
                row.CreateCell(0, CellType.String).SetCellValue(rowsNum);
                row.CreateCell(1, CellType.String).SetCellValue(Link);
                row.CreateCell(2, CellType.Blank).SetCellValue("");
                strQrCodePath = CommonHelper.CreateQRCode(Configer.GetAppSetting<string>("siteUrl") + "/p/" + item.Link, 8, 4);
                byte[] bytes = System.IO.File.ReadAllBytes(strQrCodePath);
                int pictureIdx = workbook.AddPicture(bytes, PictureType.PNG);
                HSSFPatriarch patriarch = (HSSFPatriarch)sheet.CreateDrawingPatriarch();

                HSSFClientAnchor anchor = new HSSFClientAnchor(0, 10, 1023, 0, 2, rowsNum, 2, rowsNum);

                HSSFPicture pict = (HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx);
                pict.Resize();
                rowsNum++;
                //删除二维码
                if (System.IO.File.Exists(strQrCodePath))
                {
                    System.IO.File.Delete(strQrCodePath);
                }

            }

            using (MemoryStream ms = new MemoryStream())
            {
                workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;

                // 设置编码和附件格式  
                
                string fileName = model.Channel.Name + "_" + DateTime.Now.ToString("yyyy-MM-dd-HHmmss") + ".xlsx";//客户端保存的文件名
                System.Web.HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
                System.Web.HttpContext.Current.Response.ContentEncoding = Encoding.UTF8;
                System.Web.HttpContext.Current.Response.Charset = "";
                System.Web.HttpContext.Current.Response.AppendHeader("Content-Disposition",
                     "attachment;filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8));
                System.Web.HttpContext.Current.Response.BinaryWrite(ms.GetBuffer());
                ms.Close();
                ms.Dispose();
                System.Web.HttpContext.Current.Response.End();
            }

        }


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(2)
学霸

//创建工作薄 
HSSFWorkbook workbook = new HSSFWorkbook(); 
应该是这句代码的问题HSSFWorkbook创建的工作簿只支持2003格式的,即xls
要想导出xlsx的格式,应该用XSSFWorkbook对象,例如IWorkbook workbook = new XSSFWorkbook();
我今天在做导入也遇到这个问题,通过上面的方式解决的

三叔

改完了,只能导出.xls文件,不知道是不是其中有图片的原因,导出的.xlsx文件无法查看。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!