protected String BuildStyle(IWorkbook workbook, ICellStyle cellStyle) { StringBuilder style = new StringBuilder(); if (workbook is HSSFWorkbook) { HSSFPalette palette = ((HSSFWorkbook)workbook).GetCustomPalette(); style.Append("white-space: pre-wrap; "); ExcelToHtmlUtils.AppendAlign(style, cellStyle.Alignment); if (cellStyle.FillPattern == FillPattern.NoFill) { // no fill } else if (cellStyle.FillPattern == FillPattern.SolidForeground) { //cellStyle. //HSSFColor. HSSFColor foregroundColor = palette.GetColor(cellStyle.FillForegroundColor); if (foregroundColor != null) { style.AppendFormat("background-color:{0}; ", ExcelToHtmlUtils.GetColor(foregroundColor)); } } else { HSSFColor backgroundColor = palette.GetColor(cellStyle.FillBackgroundColor); if (backgroundColor != null) { style.AppendFormat("background-color:{0}; ", ExcelToHtmlUtils.GetColor(backgroundColor)); } } } else { style.Append("white-space: pre-wrap; "); ExcelToHtmlUtils.AppendAlign(style, cellStyle.Alignment); StylesTable st = ((XSSFWorkbook)workbook).GetStylesSource(); ThemesTable tt = st.GetTheme(); if (cellStyle.FillPattern == FillPattern.NoFill) { // no fill } else if (cellStyle.FillPattern == FillPattern.SolidForeground) { //cellStyle IndexedColors clr = IndexedColors.ValueOf(cellStyle.FillForegroundColor); string hexstring = null; if (clr != null) { hexstring = clr.HexString; } else { XSSFColor foregroundColor = (XSSFColor)cellStyle.FillForegroundColorColor; if (foregroundColor != null) { hexstring = ExcelToHtmlUtils.GetColor(foregroundColor); } } if (hexstring != null) { style.AppendFormat("background-color:{0}; ", hexstring); } } else { IndexedColors clr = IndexedColors.ValueOf(cellStyle.FillBackgroundColor); string hexstring = null; if (clr != null) { hexstring = clr.HexString; } else { XSSFColor backgroundColor = (XSSFColor)cellStyle.FillBackgroundColorColor; if (backgroundColor != null) { hexstring = ExcelToHtmlUtils.GetColor(backgroundColor); } } if (hexstring != null) { style.AppendFormat("background-color:{0}; ", hexstring); } } } BuildStyle_Border(workbook, style, "top", cellStyle.BorderTop, cellStyle.TopBorderColor); BuildStyle_Border(workbook, style, "right", cellStyle.BorderRight, cellStyle.RightBorderColor); BuildStyle_Border(workbook, style, "bottom", cellStyle.BorderBottom, cellStyle.BottomBorderColor); BuildStyle_Border(workbook, style, "left", cellStyle.BorderLeft, cellStyle.LeftBorderColor); IFont font = cellStyle.GetFont(workbook); BuildStyle_Font(workbook, style, font); return(style.ToString()); }
protected bool ProcessCell(ICell cell, XElement tableCellElement, int normalWidthPx, int maxSpannedWidthPx, float normalHeightPt) { ICellStyle cellStyle = cell.CellStyle as ICellStyle; string value; switch (cell.CellType) { case CellType.String: // XXX: enrich value = cell.RichStringCellValue.String; break; case CellType.Formula: switch (cell.CachedFormulaResultType) { case CellType.String: IRichTextString str = cell.RichStringCellValue; if (str != null && str.Length > 0) { value = (str.String); } else { value = string.Empty; } break; case CellType.Numeric: ICellStyle style = cellStyle; if (style == null) { value = cell.NumericCellValue.ToString(); } else { value = (_formatter.FormatRawCellContents(cell.NumericCellValue, style.DataFormat, style.GetDataFormatString())); } break; case CellType.Boolean: value = cell.BooleanCellValue.ToString(); break; case CellType.Error: value = ErrorEval.GetText(cell.ErrorCellValue); break; default: logger.Log(POILogger.WARN, "Unexpected cell cachedFormulaResultType (" + cell.CachedFormulaResultType.ToString() + ")"); value = string.Empty; break; } break; case CellType.Blank: value = string.Empty; break; case CellType.Numeric: value = _formatter.FormatCellValue(cell); break; case CellType.Boolean: value = cell.BooleanCellValue.ToString(); break; case CellType.Error: value = ErrorEval.GetText(cell.ErrorCellValue); break; default: logger.Log(POILogger.WARN, "Unexpected cell type (" + cell.CellType.ToString() + ")"); return(true); } bool noText = string.IsNullOrEmpty(value); bool wrapInDivs = !noText && UseDivsToSpan && !cellStyle.WrapText; short cellStyleIndex = cellStyle.Index; if (cellStyleIndex != 0) { IWorkbook workbook = cell.Row.Sheet.Workbook as IWorkbook; string mainCssClass = GetStyleClassName(workbook, cellStyle); if (wrapInDivs) { tableCellElement.SetAttributeValue("class", mainCssClass + " " + cssClassContainerCell); } else { tableCellElement.SetAttributeValue("class", mainCssClass); } if (noText) { /* * if cell style is defined (like borders, etc.) but cell text * is empty, add " " to output, so browser won't collapse * and ignore cell */ value = "\u00A0"; //“ ”全角空格 } } if (OutputLeadingSpacesAsNonBreaking && value.StartsWith(" ")) { StringBuilder builder = new StringBuilder(); for (int c = 0; c < value.Length; c++) { if (value[c] != ' ') { break; } builder.Append('\u00a0'); } if (value.Length != builder.Length) { builder.Append(value.Substring(builder.Length)); } value = builder.ToString(); } XText text = htmlDocumentFacade.CreateText(value); if (wrapInDivs) { XElement outerDiv = htmlDocumentFacade.CreateBlock(); outerDiv.SetAttributeValue("class", this.cssClassContainerDiv); XElement innerDiv = htmlDocumentFacade.CreateBlock(); StringBuilder innerDivStyle = new StringBuilder(); innerDivStyle.Append("position:absolute;min-width:"); innerDivStyle.Append(normalWidthPx); innerDivStyle.Append("px;"); if (maxSpannedWidthPx != int.MaxValue) { innerDivStyle.Append("max-width:"); innerDivStyle.Append(maxSpannedWidthPx); innerDivStyle.Append("px;"); } innerDivStyle.Append("overflow:hidden;max-height:"); innerDivStyle.Append(normalHeightPt); innerDivStyle.Append("pt;white-space:nowrap;"); ExcelToHtmlUtils.AppendAlign(innerDivStyle, cellStyle.Alignment); htmlDocumentFacade.AddStyleClass(outerDiv, "d", innerDivStyle.ToString()); innerDiv.AppendChild(text); outerDiv.AppendChild(innerDiv); tableCellElement.AppendChild(outerDiv); } else { tableCellElement.AppendChild(text); } return(string.IsNullOrEmpty(value) && cellStyleIndex == 0); }