예제 #1
0
        public static void FullSheet(NPOI.SS.UserModel.ISheet iSheet, System.Data.DataTable dataTable, bool firstRowIsColumnHead)
        {
            if (iSheet == null)
            {
                throw new AggregateException("参数NPOI.SS.UserModel.ISheet对象为null。");
            }
            NPOI.SS.UserModel.IRow iRow = iSheet.CreateRow(0);
            for (int dataTableColumnIndex = 0; dataTableColumnIndex < dataTable.Columns.Count; dataTableColumnIndex++)
            {
                NPOI.SS.UserModel.ICell iCell = iRow.CreateCell(dataTableColumnIndex);
                iCell.SetCellValue(dataTable.Columns[dataTableColumnIndex].ColumnName);
            }
            int startRowIndex = 0;

            if (firstRowIsColumnHead)
            {
                startRowIndex = 1;
            }
            for (int dataTableRowIndex = 0; dataTableRowIndex < dataTable.Rows.Count; dataTableRowIndex++)
            {
                iRow = iSheet.CreateRow(dataTableRowIndex + startRowIndex);
                for (int dataTableColumnIndex = 0; dataTableColumnIndex < dataTable.Columns.Count; dataTableColumnIndex++)
                {
                    NPOI.SS.UserModel.ICell iCell = iRow.CreateCell(dataTableColumnIndex);
                    SetCellValue(iCell, dataTable.Rows[dataTableRowIndex][dataTableColumnIndex]);
                }
            }
        }
        /// <summary>
        /// 合并单元格
        /// </summary>
        /// <param name="fromCell">起始单元格</param>
        /// <param name="toCell">终止单元格</param>
        /// <param name="isExpand">扩充模式</param>
        public static void Merge(this NPOI.SS.UserModel.ICell fromCell, NPOI.SS.UserModel.ICell toCell,
                                 bool isExpand = false)
        {
            if (!fromCell.Sheet.Equals(toCell.Sheet))
            {
                throw new OfficeException("单元格不在同一个工作表上");
            }
            var sheet          = fromCell.Sheet;
            var fromRange      = fromCell.GetRangeInfo();
            var toRange        = toCell.GetRangeInfo();
            var firstRowIndex  = Math.Min(fromRange.FirstRow, toRange.FirstRow);
            var firstColIndex  = Math.Min(fromRange.FirstCol, toRange.FirstCol);
            var lastRowIndex   = Math.Max(fromRange.LastRow, toRange.LastRow);
            var lastColIndex   = Math.Max(fromRange.LastCol, toRange.LastCol);
            var regionInfoList = sheet.GetMergedRegionInfos(firstRowIndex, lastRowIndex, firstColIndex, lastColIndex, false);

            foreach (var regionInfo in regionInfoList)
            {
                if (isExpand)
                {
                    firstRowIndex = Math.Min(firstRowIndex, regionInfo.FirstRow);
                    firstColIndex = Math.Min(firstColIndex, regionInfo.FirstCol);
                    lastRowIndex  = Math.Max(lastRowIndex, regionInfo.LastRow);
                    lastColIndex  = Math.Max(lastColIndex, regionInfo.LastCol);
                }
                sheet.RemoveMergedRegion(regionInfo.Index);
            }
            var region = new CellRangeAddress(firstRowIndex, lastRowIndex, firstColIndex, lastColIndex);

            fromCell.Sheet.AddMergedRegion(region);
        }
예제 #3
0
 public void OnRender(NPOI.SS.UserModel.ICell exCell)
 {
     foreach (var render in renders)
     {
         render.Render(exCell);
     }
 }
예제 #4
0
 static void DoMergeExcelSheet(NPOI.SS.UserModel.ISheet sheet)
 {
     string[] heads = new string[] { "姓名", "复训带教", "复训检查", "复训翻译" };
     //增加列头
     //设置列头直接进行单元格合并
     NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
     row.Height = 1024;
     for (int i = 0; i < heads.Length; i++)
     {
         int cellIndex = i > 0 ? 2 * i - 1 : i;
         NPOI.SS.UserModel.ICell cell = row.CreateCell(cellIndex);
         cell.SetCellValue(heads[i]);
     }
     for (int i = 0; i < heads.Length; i++)
     {
         if (i == 0)
         {
             sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 1, 0, 0));
         }
         else
         {
             sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(0, 0, 2 * i - 1, 2 * i));
         }
     }
 }
예제 #5
0
        void WriteExcel(ref NPOI.SS.UserModel.IWorkbook book, DataTable dt)
        {
            NPOI.SS.UserModel.ISheet sheet = book.CreateSheet("Sheet1");

            // 添加表头
            NPOI.SS.UserModel.IRow row = sheet.CreateRow(0);
            int index = 0;

            foreach (DataColumn item in dt.Columns)
            {
                NPOI.SS.UserModel.ICell cell = row.CreateCell(index);
                cell.SetCellType(NPOI.SS.UserModel.CellType.String);
                cell.SetCellValue(item.Caption);
                index++;
            }

            // 添加数据
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                index = 0;
                row   = sheet.CreateRow(i + 1);
                foreach (DataColumn item in dt.Columns)
                {
                    NPOI.SS.UserModel.ICell cell = row.CreateCell(index);
                    cell.SetCellType(NPOI.SS.UserModel.CellType.String);
                    cell.SetCellValue(dt.Rows[i][item].ToString());
                    index++;
                }
            }
        }
예제 #6
0
 public override bool Equals(Object obj)
 {
     NPOI.SS.UserModel.ICell cellb = ((HSSFEvaluationCell)obj)._cell;
     return(_cell.RowIndex == cellb.RowIndex &&
            _cell.ColumnIndex == cellb.ColumnIndex &&
            _cell.CellFormula == cellb.CellFormula &&
            _cell.Sheet == cellb.Sheet);
 }
예제 #7
0
 public static Cell GetAdapter(this NpoiCell cell)
 {
     if (null == cell)
     {
         return(null);
     }
     return(new Cell(cell));
 }
예제 #8
0
 //ExcelHelper excle = new ExcelHelper();
 //Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyyMMddHHmmssfff")));
 //Response.BinaryWrite(excle.ExportXLS());
 public static DataTable Excel2DataTable(string filePath)
 {
     NPOI.SS.UserModel.ISheet sheet = null;
     #region//初始化信息
     try
     {
         string fileExt = Path.GetExtension(filePath).ToLower();
         using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
         {
             if (fileExt == ".xls")
             {
                 sheet = new NPOI.HSSF.UserModel.HSSFWorkbook(file).GetSheetAt(0);
             }
             else if (fileExt == ".xlsx")
             {
                 sheet = new NPOI.XSSF.UserModel.XSSFWorkbook(file).GetSheetAt(0);
             }
             else
             {
                 sheet = null;
             }
         }
     }
     catch (Exception e)
     {
         throw e;
     }
     #endregion
     if (sheet == null)
     {
         return(null);
     }
     System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
     DataTable dt = new DataTable();
     for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
     {
         dt.Columns.Add(Convert.ToChar(((int)'A') + j).ToString());
     }
     while (rows.MoveNext())
     {
         NPOI.HSSF.UserModel.HSSFRow row = (NPOI.HSSF.UserModel.HSSFRow)rows.Current;
         DataRow dr = dt.NewRow();
         for (int i = 0; i < row.LastCellNum; i++)
         {
             NPOI.SS.UserModel.ICell cell = row.GetCell(i);
             if (cell == null)
             {
                 dr[i] = null;
             }
             else
             {
                 dr[i] = cell.ToString();
             }
         }
         dt.Rows.Add(dr);
     }
     return(dt);
 }
        /// <summary>
        /// 添加条件格式规则
        /// </summary>
        /// <param name="cell">单元格</param>
        /// <param name="cfrs">条件格式规则</param>
        public static void AddConditionalFormattingRules(this NPOI.SS.UserModel.ICell cell, NPOI.SS.UserModel.IConditionalFormattingRule[] cfrs)
        {
            var regions = new[]
            {
                new CellRangeAddress(cell.RowIndex, cell.RowIndex, cell.ColumnIndex, cell.ColumnIndex),
            };

            cell.Sheet.SheetConditionalFormatting.AddConditionalFormatting(regions, cfrs);
        }
예제 #10
0
        public static DataTable ImportExcelXlsFile(string filePath, string extension, int sheetnum = 0, int columnnum = 0)
        {
            try
            {
                using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    hssfworkbook = new HSSFWorkbook(file);
                }
            }
            catch (Exception e)
            {
                throw e;
            }
            NPOI.SS.UserModel.ISheet sheet;
            sheet = hssfworkbook.GetSheetAt(0);
            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
            DataTable dt = new DataTable();

            //给DdataTable添加表头
            if (sheet.GetRow(sheetnum) != null)
            {
                for (int j = 0; j < (sheet.GetRow(columnnum).LastCellNum); j++)
                {
                    dt.Columns.Add(sheet.GetRow(columnnum).Cells[j].ToString());
                }
                //读取数据
                while (rows.MoveNext())
                {
                    HSSFRow row1 = null;

                    row1 = (HSSFRow)rows.Current;
                    int j = row1.LastCellNum;

                    DataRow dr = dt.NewRow();
                    if (j > dt.Columns.Count)
                    {
                        j = dt.Columns.Count;
                    }
                    for (int i = 0; i < j; i++)
                    {
                        NPOI.SS.UserModel.ICell cell = row1.GetCell(i);

                        if (cell == null)
                        {
                            dr[i] = null;
                        }
                        else
                        {
                            dr[i] = cell.ToString();
                        }
                    }
                    dt.Rows.Add(dr);
                }
            }
            return(dt);
        }
예제 #11
0
 private NPOI.SS.UserModel.ICell SetBorder(NPOI.SS.UserModel.ICell cell)
 {
     cell.CellStyle.BorderLeft        = BorderStyle.Thin;
     cell.CellStyle.BorderRight       = BorderStyle.Thin;
     cell.CellStyle.BorderTop         = BorderStyle.Thin;
     cell.CellStyle.BorderBottom      = BorderStyle.Thin;
     cell.CellStyle.Alignment         = HorizontalAlignment.Center;
     cell.CellStyle.VerticalAlignment = VerticalAlignment.Center;
     return(cell);
 }
예제 #12
0
        /// <summary>
        /// 读取模板,根据List(list(string))"创建一个Excel的WorkBook并返回
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="columnName">表头</param>
        /// <param name="columnWidth">列宽度*256</param>
        /// <param name="ModUrl">模板地址</param>
        /// <param name="startRowIndex">起始行,首行=0,默认0</param>
        /// <param name="RemoveOtherRows">是否移除起始行后的数据,默认=是</param>
        /// <param name="SheetName">表名称</param>
        /// <returns>XSSFWorkbook对象</returns>
        public XSSFWorkbook CreateExcelByList_Mod(System.Collections.Generic.List <System.Collections.Generic.List <object> > dt, string[] columnName, int[] columnWidth, string ModUrl, int startRowIndex = 0, bool RemoveOtherRows = true, string SheetName = "Sheet1")
        {
            startRowIndex = startRowIndex >= 0?startRowIndex:0;

            string ExcelModePath = NodeBase + ModUrl;

            if (!File.Exists(ExcelModePath))
            {
                return(null);
            }

            //创建一个工作博
            XSSFWorkbook wk = new XSSFWorkbook();

            using (FileStream fileExcelMod = new FileStream(ExcelModePath, FileMode.Open, FileAccess.Read))
            {
                wk = new XSSFWorkbook(fileExcelMod);
                fileExcelMod.Close();
            }
            if (wk == null)
            {
                return(null);
            }

            //创建一个Sheet
            ISheet tb = wk.GetSheetAt(0);

            #region 移除起始行后的所有行
            if (RemoveOtherRows && tb.LastRowNum > startRowIndex + 1)
            {
                for (int rmr = tb.LastRowNum - 1; rmr > startRowIndex; rmr--)
                {
                    tb.ShiftRows(rmr, rmr + 1, -1);
                }
            }
            #endregion

            //设置单元格宽度

            //创建表头(在第0行)

            #region 根据List<List<object>>内容创建Excel内容
            for (int i = 0; i < dt.Count; i++)
            {
                IRow rows = tb.CreateRow(i + startRowIndex);
                for (int j = 0; j < dt[i].Count; j++)
                {
                    NPOI.SS.UserModel.ICell cell = rows.CreateCell(j);
                    cell.SetCellValue(dt[i][j].ToStr());
                    SetBorder(cell);
                }
            }
            #endregion
            return(wk);
        }
예제 #13
0
        /// <summary>
        /// 导出excel
        /// </summary>
        /// <param name="response"></param>
        /// <param name="dt"></param>
        /// <param name="fileName"></param>
        /// <param name="sheetname"></param>
        public static void ExportExcel(HttpResponse response, DataTable dt, string fileName, string sheetname)
        {
            NPOI.HSSF.UserModel.HSSFWorkbook book  = new NPOI.HSSF.UserModel.HSSFWorkbook();
            NPOI.SS.UserModel.ISheet         sheet = book.CreateSheet(sheetname);
            NPOI.SS.UserModel.IRow           row   = sheet.CreateRow(0);
            NPOI.SS.UserModel.ICell          cell  = null;
            NPOI.SS.UserModel.IFont          font  = book.CreateFont();
            NPOI.SS.UserModel.ICellStyle     style = book.CreateCellStyle();
            font.Boldweight = (short)NPOI.SS.UserModel.FontBoldWeight.Bold;
            font.FontName   = "微软雅黑";

            style.SetFont(font);

            for (int i = 0; i < dt.Columns.Count; i++)
            {
                cell           = row.CreateCell(i);
                cell.CellStyle = style;
                cell.SetCellValue(dt.Columns[i].ColumnName);
            }

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    string strColDataType = dt.Columns[j].DataType.ToString();
                    if (strColDataType.Equals("System.Int32"))
                    {
                        int intValue = 0;
                        int.TryParse(dt.Rows[i][j].ToString(), out intValue);
                        row2.CreateCell(j).SetCellValue(intValue);
                    }
                    else if (strColDataType.Equals("System.String"))
                    {
                        row2.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                    }
                    else if (strColDataType.Equals("System.Double"))
                    {
                        double dblValue = 0;
                        double.TryParse(dt.Rows[i][j].ToString(), out dblValue);
                        row2.CreateCell(j).SetCellValue(dblValue);
                    }
                }
            }
            //写入到客户端
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            book.Write(ms);
            response.AddHeader("Content-Disposition", string.Format("attachment; filename=" + HttpUtility.UrlEncode(fileName, Encoding.UTF8) + DateTime.Now.ToShortDateString() + ".xls"));
            response.ContentType = "application/vnd.ms-excel";
            //response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
            response.BinaryWrite(ms.ToArray());
            book = null;
            ms.Close();
            ms.Dispose();
        }
예제 #14
0
        public static DataTable ImportExcelFile(string filePath)

        {
            HSSFWorkbook hssfworkbook;

            #region//初始化信息

            try

            {
                using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))

                {
                    hssfworkbook = new HSSFWorkbook(file);
                }
            }

            catch (Exception e)

            {
                throw e;
            }

            #endregion
            NPOI.SS.UserModel.ISheet       sheet = hssfworkbook.GetSheetAt(0);
            System.Collections.IEnumerator rows  = sheet.GetRowEnumerator();
            DataTable dt = new DataTable();
            for (int j = 0; j < (sheet.GetRow(0).LastCellNum); j++)
            {
                dt.Columns.Add(sheet.GetRow(0).GetCell(j).ToString());
            }
            //sheet.cu
            while (rows.MoveNext())
            {
                HSSFRow row = (HSSFRow)rows.Current;
                if (row.RowNum != 0)
                {
                    DataRow dr = dt.NewRow();
                    for (int i = 0; i < row.LastCellNum; i++)
                    {
                        NPOI.SS.UserModel.ICell cell = row.GetCell(i);
                        if (cell == null)
                        {
                            dr[i] = null;
                        }
                        else
                        {
                            dr[i] = cell.ToString();
                        }
                    }
                    dt.Rows.Add(dr);
                }
            }
            return(dt);
        }
예제 #15
0
 /// <summary>
 /// 获取单元格的值。
 /// </summary>
 /// <param name="iCell">NPOI.SS.UserModel.ICell对象。</param>
 /// <returns>单元格的值。</returns>
 public static object GetCellValue(NPOI.SS.UserModel.ICell iCell)
 {
     if (iCell == null)
     {
         return(null);
     }
     else
     {
         if (iCell.CellType == NPOI.SS.UserModel.CellType.Blank)
         {
             return("");
         }
         else if (iCell.CellType == NPOI.SS.UserModel.CellType.Boolean)
         {
             return(iCell.BooleanCellValue);
         }
         else if (iCell.CellType == NPOI.SS.UserModel.CellType.Error)
         {
             return(iCell.ErrorCellValue.ToString(System.Globalization.CultureInfo.InvariantCulture));
         }
         else if (iCell.CellType == NPOI.SS.UserModel.CellType.Formula)
         {
             if (iCell.CachedFormulaResultType == NPOI.SS.UserModel.CellType.Error)
             {
                 return("");
             }
             else
             {
                 return(iCell.NumericCellValue);
             }
         }
         else if (iCell.CellType == NPOI.SS.UserModel.CellType.Numeric)
         {
             if (NPOI.SS.UserModel.DateUtil.IsCellDateFormatted(iCell))
             {
                 return(iCell.DateCellValue);
             }
             else
             {
                 return(iCell.NumericCellValue);
             }
         }
         else if (iCell.CellType == NPOI.SS.UserModel.CellType.String)
         {
             return(iCell.StringCellValue);
         }
         else
         {
             return(iCell.ToString());
         }
     }
 }
예제 #16
0
 private void SetNewCell(NPOI.SS.UserModel.IRow row, int iIdx, string strValue, NPOI.SS.UserModel.ICellStyle style = null)
 {
     NPOI.SS.UserModel.ICell cell = row.CreateCell(iIdx, NPOI.SS.UserModel.CellType.String);
     cell.SetCellValue(strValue);
     if (style != null)
     {
         cell.CellStyle = style;
     }
     else
     {
         cell.CellStyle.BorderBottom = 0;
     }
 }
예제 #17
0
        /// <summary>
        /// 设置样式
        /// </summary>
        private static void SetExcelValue(DataTable dt, string sheetname, NPOI.HSSF.UserModel.HSSFWorkbook book, NPOI.SS.UserModel.ICellStyle style)
        {
            NPOI.SS.UserModel.ISheet sheet   = book.CreateSheet(sheetname);
            NPOI.SS.UserModel.IRow   row     = sheet.CreateRow(0);
            NPOI.SS.UserModel.ICell  cell    = null;
            NPOI.SS.UserModel.ICell  newCell = null;
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                cell           = row.CreateCell(i);
                cell.CellStyle = style;
                cell.SetCellValue(dt.Columns[i].ColumnName);
            }

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                NPOI.SS.UserModel.IRow row2 = sheet.CreateRow(i + 1);
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    string strColDataType = dt.Columns[j].DataType.ToString();
                    if (strColDataType.Equals("System.Int32"))
                    {
                        int intValue = 0;
                        int.TryParse(dt.Rows[i][j].ToString(), out intValue);
                        row2.CreateCell(j).SetCellValue(intValue);
                    }
                    else if (strColDataType.Equals("System.String"))
                    {
                        row2.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString());
                    }
                    else if (strColDataType.Equals("System.Double"))
                    {
                        double dblValue = 0;
                        double.TryParse(dt.Rows[i][j].ToString(), out dblValue);
                        row2.CreateCell(j).SetCellValue(dblValue);
                    }
                    else if (strColDataType.Equals("System.DateTime"))
                    {
                        DateTime dateV;
                        DateTime.TryParse(dt.Rows[i][j].ToString(), out dateV);
                        newCell = row2.CreateCell(j);
                        newCell.SetCellValue(dateV);

                        //格式化显示
                        HSSFCellStyle  cellStyle = (HSSFCellStyle)book.CreateCellStyle();
                        HSSFDataFormat format    = (HSSFDataFormat)book.CreateDataFormat();
                        cellStyle.DataFormat = format.GetFormat("yyyy-m-d");
                        newCell.CellStyle    = cellStyle;
                    }
                }
            }
        }
        /// <summary>
        /// 获取合并区域信息
        /// </summary>
        /// <param name="cell">NPOI单元格</param>
        private static MergedRegionInfo GetRangeInfo(this NPOI.SS.UserModel.ICell cell)
        {
            var sheet = cell.Sheet;

            for (var i = 0; i < sheet.NumMergedRegions; i++)
            {
                var range = sheet.GetMergedRegion(i);
                if (range.IsInRange(cell.RowIndex, cell.ColumnIndex))
                {
                    return(new MergedRegionInfo(i, range.FirstRow, range.LastRow, range.FirstColumn, range.LastColumn));
                }
            }
            return(new MergedRegionInfo(-1, cell.RowIndex, cell.RowIndex, cell.ColumnIndex, cell.ColumnIndex));
        }
예제 #19
0
        /// <summary>
        /// 根据List(list(string))"创建一个Excel的WorkBook并返回
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="columnName">表头</param>
        /// <param name="columnWidth">列宽度*256</param>
        /// <param name="SheetName">表名称</param>
        /// <returns>XSSFWorkbook对象</returns>
        public XSSFWorkbook CreateExcelByList(System.Collections.Generic.List <System.Collections.Generic.List <object> > dt, string[] columnName, int[] columnWidth, string SheetName = "Sheet1")
        {
            //创建一个工作博
            XSSFWorkbook wk = new XSSFWorkbook();
            //创建以个Sheet
            ISheet tb = wk.CreateSheet(SheetName);

            //设置单元格宽度
            for (int i = 0; i < columnWidth.Length; i++)
            {
                tb.SetColumnWidth(i, columnWidth[i] * 256);
            }
            //创建表头(在第0行)
            IRow row = tb.CreateRow(0);

            #region 表头根据参数
            for (int i = 0; i < columnName.Length; i++)
            {
                //创建单元格
                NPOI.SS.UserModel.ICell cell = row.CreateCell(i);
                cell.SetCellValue(columnName[i]);
                //背景
                //cell.CellStyle.FillForegroundColor = NPOI.XSSF.Util.XSSFColor.DarkTeal.Index;
                //cell.CellStyle.FillPattern = FillPattern.SolidForeground;
                //边框颜色
                //cell.CellStyle.TopBorderColor = NPOI.XSSF.Util.XSSFColor.OliveGreen.Index;
                //cell.CellStyle.LeftBorderColor = NPOI.XSSF.Util.XSSFColor.OliveGreen.Index;
                //cell.CellStyle.BottomBorderColor = NPOI.XSSF.Util.XSSFColor.OliveGreen.Index;
                //cell.CellStyle.RightBorderColor = NPOI.XSSF.Util.XSSFColor.OliveGreen.Index;

                cell.CellStyle.IsLocked = true;
                SetBorder(cell);
            }
            #endregion
            #region 根据List<List<object>>内容创建Excel内容
            for (int i = 0; i < dt.Count; i++)
            {
                IRow rows = tb.CreateRow(i + 1);
                for (int j = 0; j < dt[i].Count; j++)
                {
                    NPOI.SS.UserModel.ICell cell = rows.CreateCell(j);
                    cell.SetCellValue(dt[i][j].ToStr());
                    SetBorder(cell);
                }
            }
            #endregion
            return(wk);
        }
예제 #20
0
        public void TestExtraSheetRefs_bug45978()
        {
            HSSFWorkbook wb = HSSFTestDataSamples.OpenSampleWorkbook("ex45978-extraLinkTableSheets.xls");

            /*
             * ex45978-extraLinkTableSheets.xls is a cut-down version of attachment 22561.
             * The original file produces the same error.
             *
             * This bug was caused by a combination of invalid sheet indexes in the EXTERNSHEET
             * record, and eager initialisation of the extern sheet references. Note - the worbook
             * has 2 sheets, but the EXTERNSHEET record refers to sheet indexes 0, 1 and 2.
             *
             * Offset 0x3954 (14676)
             * recordid = 0x17, size = 32
             * [EXTERNSHEET]
             * numOfRefs	 = 5
             * refrec		 #0: extBook=0 firstSheet=0 lastSheet=0
             * refrec		 #1: extBook=1 firstSheet=2 lastSheet=2
             * refrec		 #2: extBook=2 firstSheet=1 lastSheet=1
             * refrec		 #3: extBook=0 firstSheet=-1 lastSheet=-1
             * refrec		 #4: extBook=0 firstSheet=1 lastSheet=1
             * [/EXTERNSHEET]
             *
             * As it turns out, the formula in question doesn't even use externSheetIndex #1 - it
             * uses #4, which resolves to sheetIndex 1 -> 'Data'.
             *
             * It is not Clear exactly what externSheetIndex #4 would refer to.  Excel seems to
             * display such a formula as "''!$A2", but then complains of broken link errors.
             */

            NPOI.SS.UserModel.ICell cell = wb.GetSheetAt(0).GetRow(1).GetCell(1);
            String cellFormula;

            try
            {
                cellFormula = cell.CellFormula;
            }
            catch (IndexOutOfRangeException e)
            {
                if (e.Message.Equals("Index: 2, Size: 2"))
                {
                    throw new AssertionException("Identified bug 45798");
                }
                throw e;
            }
            Assert.AreEqual("Data!$A2", cellFormula);
        }
예제 #21
0
        protected void btnExport_Click(object sender, EventArgs e)
        {
            DateTime start = Common.St.ToDateTime(txtStart.Value + " 00:00:00");
            DateTime end   = Common.St.ToDateTime(txtEnd.Value + " 23:59:59");
            var      list  = DAL.WorkPlanRule.Get(start, end);

            NPOI.HSSF.UserModel.HSSFWorkbook book  = new NPOI.HSSF.UserModel.HSSFWorkbook(new System.IO.FileStream(Server.MapPath("~/template/template_statistics_2.xls"), System.IO.FileMode.Open, System.IO.FileAccess.Read));
            NPOI.SS.UserModel.ISheet         sheet = book.GetSheet("周上线记录");

            NPOI.SS.UserModel.ICellStyle style = book.CreateCellStyle();
            style.BorderBottom      = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderTop         = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderLeft        = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderRight       = NPOI.SS.UserModel.BorderStyle.Thin;
            style.WrapText          = true;
            style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;

            NPOI.SS.UserModel.IRow  row  = sheet.GetRow(0);
            NPOI.SS.UserModel.ICell cell = row.GetCell(0);
            cell.SetCellValue("技术测试周上线记录(" + start.ToString("yyyy年MM月dd日") + "-" + end.ToString("yyyy年MM月dd日") + ")");
            // 内容
            int i = 2;

            foreach (var o in list)
            {
                NPOI.SS.UserModel.IRow  row2  = sheet.CreateRow(i);
                NPOI.SS.UserModel.ICell cell0 = row2.CreateCell(0);
                cell0.CellStyle = style;
                cell0.SetCellValue(o.SheepNo);
                NPOI.SS.UserModel.ICell cell1 = row2.CreateCell(1);
                cell1.CellStyle = style;
                cell1.SetCellValue(o.Project.Name);
                NPOI.SS.UserModel.ICell cell2 = row2.CreateCell(2);
                cell2.CellStyle = style;
                cell2.SetCellValue(Common.St.ToDateTimeString(o.PublishTime, "yyyy-MM-dd"));
                i++;
            }

            // 写入到客户端
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            book.Write(ms);
            Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", System.Web.HttpUtility.UrlEncode("每周项目上线记录", System.Text.Encoding.UTF8)));
            Response.BinaryWrite(ms.ToArray());
            book = null;
            ms.Close();
            ms.Dispose();
        }
예제 #22
0
        public static dynamic GetCellValue(NPOI.SS.UserModel.ICell cell)
        {
            if (cell == null)
            {
                return(null);
            }
            else
            {
                switch (cell.CellType)
                {
                case NPOI.SS.UserModel.CellType.Blank:
                    return("");

                case NPOI.SS.UserModel.CellType.Boolean:
                    return(cell.BooleanCellValue);

                case NPOI.SS.UserModel.CellType.Error:
                    return(cell.ErrorCellValue.ToString(System.Globalization.CultureInfo.InvariantCulture));

                case NPOI.SS.UserModel.CellType.Formula:
                    if (cell.CachedFormulaResultType == NPOI.SS.UserModel.CellType.Error)
                    {
                        return("#NUM!");
                    }
                    else
                    {
                        return(cell.NumericCellValue);
                    }

                case NPOI.SS.UserModel.CellType.Numeric:
                    if (NPOI.SS.UserModel.DateUtil.IsCellDateFormatted(cell))
                    {
                        return(cell.DateCellValue);
                    }
                    else
                    {
                        return(cell.NumericCellValue);
                    }

                case NPOI.SS.UserModel.CellType.String:
                    return(cell.StringCellValue);

                default:
                    return(cell.ToString());
                }
            }
        }
예제 #23
0
 public static void SetCellValue(NPOI.SS.UserModel.ICell iCell, object cellValue)
 {
     if (iCell == null)
     {
         return;
     }
     if (cellValue != null)
     {
         if (cellValue.GetType() == typeof(DBNull))
         {
             iCell.SetCellType(NPOI.SS.UserModel.CellType.Blank);
         }
         else if (cellValue.GetType() == typeof(bool))
         {
             iCell.SetCellValue((bool)cellValue);
         }
         else if (cellValue.GetType() == typeof(string))
         {
             if (cellValue.ToString() == "#NUM!")
             {
                 iCell.SetCellType(NPOI.SS.UserModel.CellType.Blank);
             }
             else
             {
                 iCell.SetCellValue((string)cellValue);
             }
         }
         else if (cellValue.GetType() == typeof(DateTime))
         {
             NPOI.SS.UserModel.ICellStyle  iCellStyle  = iCell.Sheet.Workbook.CreateCellStyle();
             NPOI.SS.UserModel.IDataFormat iDataFormat = iCell.Sheet.Workbook.CreateDataFormat();
             iCellStyle.DataFormat = iDataFormat.GetFormat("yyyy/MM/dd HH:mm:ss");
             iCell.CellStyle       = iCellStyle;
             iCell.SetCellValue((DateTime)cellValue);
         }
         else if (cellValue.GetType() == typeof(int) || cellValue.GetType() == typeof(double) || cellValue.GetType() == typeof(float))
         {
             iCell.SetCellValue((double)cellValue);
         }
         else
         {
             iCell.SetCellValue(cellValue.ToString());
         }
     }
 }
예제 #24
0
        public static DataTable ImportExcelFile(string filePath)
        {
            try
            {
                using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                {
                    hssworkbook = new HSSFWorkbook(file);
                }
            }
            catch (Exception)
            {
            }
            NPOI.SS.UserModel.ISheet sheet = hssworkbook.GetSheetAt(0);
            IEnumerator rows = sheet.GetRowEnumerator();
            DataTable   dt   = new DataTable();

            for (int i = 0; i < sheet.GetRow(0).LastCellNum; i++)
            {
                dt.Columns.Add(Convert.ToChar((int)'A' + i) + "");
            }
            while (rows.MoveNext())
            {
                HSSFRow row = (HSSFRow)rows.Current;
                DataRow dr  = dt.NewRow();
                for (int j = 0; j < row.LastCellNum; j++)
                {
                    NPOI.SS.UserModel.ICell cell = row.GetCell(j);
                    if (cell == null)
                    {
                        dr[j] = null;
                    }
                    else
                    {
                        dr[j] = cell + "";
                    }
                }
                dt.Rows.Add(dr);
            }

            return(dt);
        }
예제 #25
0
        protected void btnExport_Click(object sender, EventArgs e)
        {
            var list = GetList().AsEnumerable().Select(a => new { Name = GetBugzillaUserName(a.Field <int>("reporter")), CC = a.Field <Int64>("cc") }).Where(a => a.Name != "");

            NPOI.HSSF.UserModel.HSSFWorkbook book  = new NPOI.HSSF.UserModel.HSSFWorkbook(new System.IO.FileStream(Server.MapPath("~/template/template_statistics_5.xls"), System.IO.FileMode.Open, System.IO.FileAccess.Read));
            NPOI.SS.UserModel.ISheet         sheet = book.GetSheet("bug统计");

            NPOI.SS.UserModel.ICellStyle style = book.CreateCellStyle();
            style.BorderBottom      = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderTop         = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderLeft        = NPOI.SS.UserModel.BorderStyle.Thin;
            style.BorderRight       = NPOI.SS.UserModel.BorderStyle.Thin;
            style.WrapText          = true;
            style.VerticalAlignment = NPOI.SS.UserModel.VerticalAlignment.Center;

            // 内容
            int i = 2;

            foreach (var o in list)
            {
                NPOI.SS.UserModel.IRow  row2  = sheet.CreateRow(i);
                NPOI.SS.UserModel.ICell cell0 = row2.CreateCell(0);
                cell0.CellStyle = style;
                cell0.SetCellValue(o.Name);
                NPOI.SS.UserModel.ICell cell1 = row2.CreateCell(1);
                cell1.CellStyle = style;
                cell1.SetCellValue(o.CC.ToString());
                i++;
            }

            // 写入到客户端
            System.IO.MemoryStream ms = new System.IO.MemoryStream();
            book.Write(ms);
            Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", System.Web.HttpUtility.UrlEncode("Bug数统计", System.Text.Encoding.UTF8)));
            Response.BinaryWrite(ms.ToArray());
            book = null;
            ms.Close();
            ms.Dispose();
        }
예제 #26
0
파일: Misc.cs 프로젝트: jlovenpk1/LOJ
 static void CopyStyleFromCell(NPOI.SS.UserModel.ICellStyle To, NPOI.SS.UserModel.ICell Cell)
 {
     To.Alignment           = Cell.CellStyle.Alignment;
     To.BorderBottom        = Cell.CellStyle.BorderBottom;
     To.BorderLeft          = Cell.CellStyle.BorderLeft;
     To.BorderRight         = Cell.CellStyle.BorderRight;
     To.BorderTop           = Cell.CellStyle.BorderTop;
     To.BottomBorderColor   = Cell.CellStyle.BottomBorderColor;
     To.FillBackgroundColor = Cell.CellStyle.FillBackgroundColor;
     To.FillForegroundColor = Cell.CellStyle.FillForegroundColor;
     To.FillPattern         = Cell.CellStyle.FillPattern;
     To.SetFont(Cell.CellStyle.GetFont(Cell.Row.Sheet.Workbook));
     To.IsHidden          = Cell.CellStyle.IsHidden;
     To.IsLocked          = Cell.CellStyle.IsLocked;
     To.LeftBorderColor   = Cell.CellStyle.LeftBorderColor;
     To.RightBorderColor  = Cell.CellStyle.RightBorderColor;
     To.Rotation          = Cell.CellStyle.Rotation;
     To.ShrinkToFit       = Cell.CellStyle.ShrinkToFit;
     To.TopBorderColor    = Cell.CellStyle.TopBorderColor;
     To.VerticalAlignment = Cell.CellStyle.VerticalAlignment;
     To.WrapText          = Cell.CellStyle.WrapText;
     To.DataFormat        = Cell.CellStyle.DataFormat;
 }
예제 #27
0
        /// <summary>
        /// 根据DataTable创建一个Excel的WorkBook并返回
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <param name="columnName">表头</param>
        /// <param name="SheetName">表名称</param>
        /// <returns>XSSFWorkbook对象</returns>
        public XSSFWorkbook CreateExcelByDataTable(DataTable dt, string[] columnName, string SheetName = "Sheet1")
        {
            //创建一个工作博
            XSSFWorkbook wk = new XSSFWorkbook();
            //创建以个Sheet
            ISheet tb = wk.CreateSheet(SheetName);
            //创建表头(在第0行)
            IRow row = tb.CreateRow(0);

            #region 表头根据参数
            for (int i = 0; i < columnName.Length; i++)
            {
                //创建单元格
                NPOI.SS.UserModel.ICell cell = row.CreateCell(i);
                cell.SetCellValue(columnName[i]);
                cell.CellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.DarkBlue.Index;
                SetBorder(cell);
            }
            #endregion
            #region 根据DataTable内容创建Excel内容
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                IRow rows = tb.CreateRow(i);
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    if (j >= columnName.Length)
                    {
                        break;
                    }
                    NPOI.SS.UserModel.ICell cell = rows.CreateCell(j);
                    cell.SetCellValue(dt.Rows[i][j].ToString());
                    SetBorder(cell);
                }
            }
            #endregion
            return(wk);
        }
예제 #28
0
        /// <summary>
        /// 根据DataTable创建一个Excel的WorkBook并返回
        /// </summary>
        /// <param name="dt">数据表</param>
        /// <returns>XSSFWorkbook对象</returns>
        public XSSFWorkbook CreateExcelByDataTable(DataTable dt)
        {
            //创建一个工作博
            XSSFWorkbook wk = new XSSFWorkbook();
            //创建以个Sheet
            ISheet tb = wk.CreateSheet("Sheet1");

            //创建表头(在第0行)
            IRow row = tb.CreateRow(0);

            #region 根据Datable表头创建Excel表头
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                //创建单元格
                NPOI.SS.UserModel.ICell cell = row.CreateCell(i);
                //cell.CellStyle.FillBackgroundColor = NPOI.HSSF.Util.HSSFColor.DarkRed.Index;
                //cell.CellStyle.FillForegroundColor= NPOI.HSSF.Util.HSSFColor.Yellow.Index;
                cell.SetCellValue(dt.Columns[i].ColumnName);
                tb.AutoSizeColumn(i);//自动调整宽度,貌似对中文支持不好
                SetBorder(cell);
            }
            #endregion
            #region 根据DataTable内容创建Excel内容
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                IRow rows = tb.CreateRow(i + 1);
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    NPOI.SS.UserModel.ICell cell = rows.CreateCell(j);
                    cell.SetCellValue(dt.Rows[i][j].ToString());
                    SetBorder(cell);
                }
            }
            #endregion
            return(wk);
        }
예제 #29
0
        public object Cell2Object(NPOI.SS.UserModel.ICell cell, System.Type type, out bool doSet)
        {
            if (cell.Hyperlink != null)
            {
                var segs = cell.Hyperlink.Address.Split('!');
                if (segs.Length != 2)
                {
                    doSet = false;
                    EngineNS.Profiler.Log.WriteLine(EngineNS.Profiler.ELogTag.Warning, "Excel", $"HyperLink({cell.Hyperlink}) is invalid");
                    return(null);
                }
                var tab      = segs[0];
                var linkCell = segs[1];
                var sheet    = Workbook.GetSheet(tab);
                if (sheet == null)
                {
                    doSet = false;
                    return(null);
                }

                int col, row;
                GetCellPosition(linkCell, out col, out row);
                var rowObj = sheet.GetRow(row);
                if (rowObj == null)
                {
                    doSet = false;
                    return(null);
                }

                var linker = rowObj.GetCell(col);
                if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(List <>))
                {//是一个数组
                    var obj = System.Activator.CreateInstance(type) as System.Collections.IList;
                    if (linker != null)
                    {
                        FillObjectList(obj, type.GenericTypeArguments[0], linker.Row);
                    }
                    doSet = true;
                    return(obj);
                }
                else
                {//是一个对象
                    if (linker == null)
                    {
                        doSet = false;
                        return(null);
                    }

                    var atts = type.GetCustomAttributes(typeof(EngineNS.IO.Serializer.ExcelSheetAttribute), true);
                    if (atts == null || atts.Length == 0)
                    {
                        doSet = false;
                        return(null);
                    }

                    var obj = System.Activator.CreateInstance(type);
                    if (obj != null)
                    {
                        FillObject(obj, linker.Row);
                    }
                    doSet = true;
                    return(obj);
                }
            }
            else
            {
                doSet = true;
                if (type == typeof(sbyte))
                {
                    return(System.Convert.ToSByte(cell.ToString()));
                }
                else if (type == typeof(Int16))
                {
                    return(System.Convert.ToInt16(cell.ToString()));
                }
                else if (type == typeof(Int32))
                {
                    return(System.Convert.ToInt32(cell.ToString()));
                }
                else if (type == typeof(Int64))
                {
                    return(System.Convert.ToInt64(cell.ToString()));
                }
                if (type == typeof(byte))
                {
                    return(System.Convert.ToByte(cell.ToString()));
                }
                else if (type == typeof(UInt16))
                {
                    return(System.Convert.ToUInt16(cell.ToString()));
                }
                else if (type == typeof(UInt32))
                {
                    return(System.Convert.ToUInt32(cell.ToString()));
                }
                else if (type == typeof(UInt64))
                {
                    return(System.Convert.ToUInt64(cell.ToString()));
                }
                else if (type == typeof(double))
                {
                    return(System.Convert.ToDouble(cell.ToString()));
                }
                else if (type == typeof(float))
                {
                    return(System.Convert.ToSingle(cell.ToString()));
                }
                else if (type == typeof(string))
                {
                    return(cell.StringCellValue);
                }
                else if (type == typeof(bool))
                {
                    return(cell.BooleanCellValue);
                }
                else if (type == typeof(DateTime))
                {
                    return(System.Convert.ToDateTime(cell.ToString()));
                }
                doSet = false;
            }
            return(null);
        }
예제 #30
0
 public HSSFEvaluationCell(NPOI.SS.UserModel.ICell cell, IEvaluationSheet evalSheet)
 {
     _cell = cell;
     _evalSheet = evalSheet;
 }
예제 #31
0
        public static void CreateExcelColorFile(string fileName)
        {
            System.IO.FileInfo fileInfo = new System.IO.FileInfo(fileName);

            // 创建Workbook。
            NPOI.SS.UserModel.IWorkbook workbook = null;// new NPOI.XSSF.UserModel.XSSFWorkbook();
            if (fileInfo.Extension == ".xlsx")
            {
                workbook = new NPOI.XSSF.UserModel.XSSFWorkbook();
            }
            else if (fileInfo.Extension == ".xls")
            {
                workbook = new NPOI.XSSF.UserModel.XSSFWorkbook();
            }
            else
            {
                return;
            }
            // 创建Sheet
            NPOI.SS.UserModel.ISheet sheet = workbook.CreateSheet("ExcelColor");
            // 设置列宽。
            sheet.SetColumnWidth(0, 15 * 256);
            sheet.SetColumnWidth(1, 15 * 256);
            sheet.SetColumnWidth(2, 20 * 256);
            sheet.SetColumnWidth(3, 20 * 256);
            sheet.SetColumnWidth(4, 15 * 256);
            // 创建标题。
            int rowIndex = 0;

            NPOI.SS.UserModel.ICell cell = sheet.CreateRow(rowIndex).CreateCell(0);
            cell.SetCellValue("Excel颜色");
            cell.CellStyle = NPOIExtension.GetCellStyle(workbook, ExcelColor.None.IndexNPOI, ExcelColor.Black.IndexNPOI, new System.Drawing.Font("Arial", 16, System.Drawing.FontStyle.Bold));
            // 空一行
            rowIndex++;
            // 创建标题行
            rowIndex++;
            NPOI.SS.UserModel.IRow row = sheet.CreateRow(rowIndex);
            row.Height = 30 * 20;
            NPOI.SS.UserModel.ICellStyle columnHeadCellStyle = NPOIExtension.GetCellStyle(workbook, ExcelColor.None.IndexNPOI, ExcelColor.Black.IndexNPOI, new System.Drawing.Font("Consolas", 11, System.Drawing.FontStyle.Regular), NPOI.SS.UserModel.HorizontalAlignment.Center, NPOI.SS.UserModel.VerticalAlignment.Center);
            cell = row.CreateCell(0);
            cell.SetCellValue("索引");
            cell.CellStyle = columnHeadCellStyle;

            cell = row.CreateCell(1);
            cell.SetCellValue("索引(NPOI)");
            cell.CellStyle = columnHeadCellStyle;

            cell = row.CreateCell(2);
            cell.SetCellValue("名称");
            cell.CellStyle = columnHeadCellStyle;
            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(rowIndex, rowIndex, 2, 3));

            cell = row.CreateCell(4);
            cell.SetCellValue("十六进制代码");
            cell.CellStyle = columnHeadCellStyle;

            ExcelColor.KnownColors.ForEach(x =>
            {
                rowIndex++;
                NPOI.SS.UserModel.IRow contentRow = sheet.CreateRow(rowIndex);
                contentRow.Height = 30 * 20;
                NPOI.SS.UserModel.ICellStyle contentCellStyle = NPOIExtension.GetCellStyle(workbook, x.IndexNPOI, (short)(x.IsDarkColor ? 9 : 8), new System.Drawing.Font("Consolas", 11, System.Drawing.FontStyle.Regular), NPOI.SS.UserModel.HorizontalAlignment.Center, NPOI.SS.UserModel.VerticalAlignment.Center);
                NPOI.SS.UserModel.ICell contentCell           = contentRow.CreateCell(0);
                contentCell.SetCellValue(x.Index);
                contentCell.CellStyle = contentCellStyle;

                contentCell = contentRow.CreateCell(1);
                contentCell.SetCellValue(x.IndexNPOI + "(NPOI)");
                contentCell.CellStyle = contentCellStyle;

                contentCell = contentRow.CreateCell(2);
                contentCell.SetCellValue(x.Name);
                contentCell.CellStyle = NPOIExtension.GetCellStyle(workbook, x.IndexNPOI, (short)(x.IsDarkColor ? 9 : 8), new System.Drawing.Font("Consolas", 11, System.Drawing.FontStyle.Regular), NPOI.SS.UserModel.HorizontalAlignment.Right, NPOI.SS.UserModel.VerticalAlignment.Center);

                contentCell = contentRow.CreateCell(3);
                contentCell.SetCellValue(x.Description);
                contentCell.CellStyle = NPOIExtension.GetCellStyle(workbook, x.IndexNPOI, (short)(x.IsDarkColor ? 9 : 8), new System.Drawing.Font("Consolas", 11, System.Drawing.FontStyle.Regular), NPOI.SS.UserModel.HorizontalAlignment.Left, NPOI.SS.UserModel.VerticalAlignment.Center);

                contentCell = contentRow.CreateCell(4);
                contentCell.SetCellValue(x.HexString);
                contentCell.CellStyle = contentCellStyle;
            });
            // 保存到文件。
            System.IO.FileStream fileStream = new System.IO.FileStream(fileInfo.FullName, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite);
            workbook.Write(fileStream);
            fileStream.Close();
            workbook.Close();
        }
예제 #32
0
 public HSSFEvaluationCell(NPOI.SS.UserModel.ICell cell)
 {
     _cell = cell;
     _evalSheet = new HSSFEvaluationSheet((HSSFSheet)cell.Sheet);
 }