Esempio n. 1
0
        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);
        }