public byte[] ExportXLS() { NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook(); NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("sheet1"); // 第一列 NPOI.SS.UserModel.IRow row = sheet.CreateRow(0); row.CreateCell(0).SetCellValue("第一列第一行"); // 第二列 NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(1); row2.CreateCell(0).SetCellValue("第二列第一行"); //设置一个合并单元格区域,使用上下左右定义CellRangeAddress区域 //CellRangeAddress四个参数为:起始行,结束行,起始列,结束列 sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 0, 10)); //通过Cell的CellFormula向单元格中写入公式 //注:直接写公式内容即可,不需要在最前加'=' //NPOI.SS.UserModel.ICell cell2 = sheet.CreateRow(1).CreateCell(0); //cell2.CellFormula = "HYPERLINK(\"测试图片.jpg\",\"测试图片.jpg\")"; //将图片文件读入一个字符串 byte[] bytes = System.IO.File.ReadAllBytes(@"c:\ceshi.jpg"); int pictureIdx = book.AddPicture(bytes, NPOI.SS.UserModel.PictureType.JPEG); NPOI.HSSF.UserModel.HSSFPatriarch patriarch = (NPOI.HSSF.UserModel.HSSFPatriarch)sheet.CreateDrawingPatriarch(); // 插图片的位置 HSSFClientAnchor(dx1,dy1,dx2,dy2,col1,row1,col2,row2) 后面再作解释 //dx1:图片左边相对excel格的位置(x偏移) 范围值为:0~1023;即输100 偏移的位置大概是相对于整个单元格的宽度的100除以1023大概是10分之一 //dy1:图片上方相对excel格的位置(y偏移) 范围值为:0~256 原理同上。 //dx2:图片右边相对excel格的位置(x偏移) 范围值为:0~1023; 原理同上。 //dy2:图片下方相对excel格的位置(y偏移) 范围值为:0~256 原理同上。 //col1和row1 :图片左上角的位置,以excel单元格为参考,比喻这两个值为(1,1),那么图片左上角的位置就是excel表(1,1)单元格的右下角的点(A,1)右下角的点。 //col2和row2:图片右下角的位置,以excel单元格为参考,比喻这两个值为(2,2),那么图片右下角的位置就是excel表(2,2)单元格的右下角的点(B,2)右下角的点。 NPOI.HSSF.UserModel.HSSFClientAnchor anchor = new NPOI.HSSF.UserModel.HSSFClientAnchor(70, 10, 0, 0, 2, 2, 4, 4); //把图片插到相应的位置 NPOI.HSSF.UserModel.HSSFPicture pict = (NPOI.HSSF.UserModel.HSSFPicture)patriarch.CreatePicture(anchor, pictureIdx); // 写入到客户端 System.IO.MemoryStream ms = new System.IO.MemoryStream(); book.Write(ms); //Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff"))); //Response.BinaryWrite(ms.ToArray()); byte[] excel = ms.ToArray(); book = null; ms.Close(); ms.Dispose(); return(excel); }
/// <summary> /// 读取excel2003的图片 /// </summary> /// <param name="sheet">当前sheet对象</param> /// <returns></returns> private Dictionary <string, Byte[]> getSheetPictrues03(NPOI.HSSF.UserModel.HSSFSheet sheet) { Dictionary <string, Byte[]> sheetIndexPicMap = new Dictionary <string, Byte[]>(); System.Collections.IList pictures = sheet.Workbook.GetAllPictures(); if (pictures.Count > 0) { NPOI.HSSF.UserModel.HSSFPatriarch hp = (NPOI.HSSF.UserModel.HSSFPatriarch)sheet.DrawingPatriarch; foreach (NPOI.HSSF.UserModel.HSSFShape hs in hp.Children) { NPOI.HSSF.UserModel.HSSFClientAnchor anchor = (NPOI.HSSF.UserModel.HSSFClientAnchor)hs.Anchor; NPOI.HSSF.UserModel.HSSFPicture pic = (NPOI.HSSF.UserModel.HSSFPicture)hs; NPOI.HSSF.UserModel.HSSFPictureData picData = (NPOI.HSSF.UserModel.HSSFPictureData)pic.PictureData; string pciname = anchor.Row1.ToString() + "." + picData.SuggestFileExtension(); sheetIndexPicMap.Add(pciname, picData.Data); } } return(sheetIndexPicMap); }