Esempio n. 1
0
        /// <summary>
        /// 设置列样式,默认带边框
        /// </summary>
        /// <param name="sheet"></param>
        /// <param name="columnIndex"></param>
        /// <param name="columnName"></param>
        /// <param name="columnType"></param>
        public void SetColumnDefaultStyle(ISheet sheet, int columnIndex, Type columnType = null, HorizontalAlignment?align = null)
        {
            if (sheet == null)
            {
                throw new ArgumentNullException("sheet");
            }
            if (columnIndex < 0)
            {
                throw new IndexOutOfRangeException("columnIndex");
            }
            var previousColumnStyle = sheet.GetColumnStyle(columnIndex);

            var        styleKey = Tuple.Create(columnType, align);
            ICellStyle defaultColumnStyle;

            if (!styles.TryGetValue(styleKey, out defaultColumnStyle))
            {
                defaultColumnStyle = CreateCellStyle();
                defaultColumnStyle.CloneStyleFrom(defaultCellStyle);
                if (columnType != null && columnType.IsValueType)
                {
                    if (columnType == typeof(DateTime))
                    {
                        defaultColumnStyle.DataFormat = (short)Workbook.CreateFormat("yyyy-MM-dd");
                    }
                    defaultColumnStyle.Alignment = HorizontalAlignment.Right;
                }
                else if (columnType == typeof(string))
                {
                    defaultColumnStyle.DataFormat = HSSFDataFormat.GetBuiltinFormat("@");
                }
                if (align.HasValue)
                {
                    switch (align)
                    {
                    case HorizontalAlignment.Center:
                        defaultColumnStyle.Alignment = HorizontalAlignment.Center;
                        break;

                    case HorizontalAlignment.Left:
                        defaultColumnStyle.Alignment = HorizontalAlignment.Left;
                        break;

                    case HorizontalAlignment.Right:
                        defaultColumnStyle.Alignment = HorizontalAlignment.Right;
                        break;
                    }
                }
                styles[styleKey] = defaultColumnStyle;
            }

            sheet.SetDefaultColumnStyle(columnIndex, defaultColumnStyle);

            // 刷新已知样式
            if (previousColumnStyle != null)
            {
                for (int i = sheet.FirstRowNum; i <= sheet.LastRowNum; i++)
                {
                    var cell = sheet.GetRow(i).GetCell(columnIndex);
                    if (cell != null && Equals(cell.CellStyle, previousColumnStyle))
                    {
                        cell.CellStyle = defaultColumnStyle;
                    }
                }
            }
        }