使用NPOI导出包含图片数据的EXCEL文件打不开,帮忙看下代码
问题描述
要建立一个三列的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(); }}
问题解答
回答1://创建工作薄 HSSFWorkbook workbook = new HSSFWorkbook(); 应该是这句代码的问题HSSFWorkbook创建的工作簿只支持2003格式的,即xls要想导出xlsx的格式,应该用XSSFWorkbook对象,例如IWorkbook workbook = new XSSFWorkbook();我今天在做导入也遇到这个问题,通过上面的方式解决的
回答2:改完了,只能导出.xls文件,不知道是不是其中有图片的原因,导出的.xlsx文件无法查看。