/// <summary> /// 列因为其下的所有子列都是隐藏的而被隐藏 /// </summary> /// <param name="pColumns"></param> protected void HideColumnBecauseAllChildrenIsHidden(JIT.Utility.Web.ComponentModel.ExtJS.Grid.Column.Column pColumn) { var needHidden = false; if (pColumn.Children != null && pColumn.Children.Count > 0) { //递归隐藏 foreach (var child in pColumn.Children) { this.HideColumnBecauseAllChildrenIsHidden(child); } //判断当前子列是否都为隐藏 bool isAllHidden = true; foreach (var child in pColumn.Children) { if (child.IsHidden.HasValue == false || child.IsHidden.Value == false) { isAllHidden = false; break; } } if (isAllHidden) //如果所有的子列都为隐藏的,则自身也隐藏 { needHidden = true; } } if (needHidden) { pColumn.IsHidden = true; } }
/// <summary> /// 递归将Ext的表格列中的所有列抓取出来 /// </summary> /// <param name="pColumn">表格列</param> /// <param name="pCurrentDepth">当前的深度</param> /// <param name="pColumns">按层级深度组织的表格列</param> /// <param name="pCurrentColSpan">当前列的列合并</param> /// <param name="pCurrentColumnStartIndex">当前列的开始索引</param> private void RetrieveColumns(JIT.Utility.Web.ComponentModel.ExtJS.Grid.Column.Column pColumn, int pCurrentDepth, Dictionary <int, List <InnerExcelColumn> > pColumns, out int pCurrentColSpan, int pCurrentColumnStartIndex) { pCurrentColSpan = 0; if (this.IsShowColumn(pColumn)) { pCurrentColSpan = 1; //列需要显示,因此占一个Excel列 //获得当前深度的表格列列表 List <InnerExcelColumn> depthList = null; if (pColumns.ContainsKey(pCurrentDepth)) { depthList = pColumns[pCurrentDepth]; } else { depthList = new List <InnerExcelColumn>(); pColumns.Add(pCurrentDepth, depthList); } InnerExcelColumn col = new InnerExcelColumn(); col.Column = pColumn; col.ColSpan = pCurrentColSpan; col.RowSpan = 1; col.StartColumnIndex = pCurrentColumnStartIndex; depthList.Add(col); //处理子列 if (pColumn.Children != null && pColumn.Children.Count > 0) { bool hasChildren = false; foreach (var item in pColumn.Children) { if (this.IsShowColumn(item)) { int childrenColSpan; if (hasChildren) { pCurrentColumnStartIndex++; } else { ++pCurrentDepth; //在第一个子节点的时候,将节点的深度+1,从而获得子节点的深度 hasChildren = true; } this.RetrieveColumns(item, pCurrentDepth, pColumns, out childrenColSpan, pCurrentColumnStartIndex); pCurrentColSpan += childrenColSpan; col.ColSpan = pCurrentColSpan; } } if (hasChildren) //列合并的起始值是从1开始,根据子列对父列进行列合并时,最后要减一 { pCurrentColSpan--; col.ColSpan -= 1; } } } }
/// <summary> /// 往导出后的容器中写数据 /// </summary> /// <param name="pContainer">导出后的容器,如果导出为Excel,则为WookSheet</param> /// <param name="pData">数据值</param> /// <param name="pRowIndex">行</param> /// <param name="pColumnIndex">列</param> /// <param name="pColumnType">表格列的列类型</param> /// <param name="pGridColumn">ExtJS的表格列</param> public void WriteData(object pContainer, object pData, int pRowIndex, int pColumnIndex, ColumnTypes pColumnType, JIT.Utility.Web.ComponentModel.ExtJS.Grid.Column.Column pGridColumn) { var sheet = pContainer as Worksheet; if (sheet != null) { //初始化 Cell contentCell = sheet.Cells[pRowIndex, pColumnIndex]; Style style = contentCell.GetStyle(); style.HorizontalAlignment = TextAlignmentType.Right; // string cellVal = string.Empty; switch (pColumnType) { case ColumnTypes.Int: { if (pData == null || string.IsNullOrWhiteSpace(pData.ToString())) { cellVal = "0"; } else { cellVal = Convert.ToInt32(pData).ToString(); } style.HorizontalAlignment = TextAlignmentType.Right; } break; case ColumnTypes.Decimal: { if (pData == null || string.IsNullOrWhiteSpace(pData.ToString())) { cellVal = "0.00"; } else { cellVal = Convert.ToDecimal(pData).ToString("f2"); } style.HorizontalAlignment = TextAlignmentType.Right; } break; case ColumnTypes.Boolean: { if (pData == null || string.IsNullOrWhiteSpace(pData.ToString())) { cellVal = ""; } else { cellVal = Convert.ToBoolean(pData).ToString(); } style.HorizontalAlignment = TextAlignmentType.Center; } break; case ColumnTypes.String: { if (pData == null) { cellVal = ""; } else { cellVal = pData.ToString(); } style.HorizontalAlignment = TextAlignmentType.Left; } break; case ColumnTypes.Date: { if (pData == null || string.IsNullOrWhiteSpace(pData.ToString())) { cellVal = ""; } else { cellVal = Convert.ToDateTime(pData).ToString("yyyy-MM-dd"); } style.HorizontalAlignment = TextAlignmentType.Center; } break; case ColumnTypes.DateTime: { if (pData == null || string.IsNullOrWhiteSpace(pData.ToString())) { cellVal = ""; } else { cellVal = Convert.ToDateTime(pData).ToString("yyyy-MM-dd HH:mm:ss"); } style.HorizontalAlignment = TextAlignmentType.Center; } break; case ColumnTypes.Time: { if (pData == null || string.IsNullOrWhiteSpace(pData.ToString())) { cellVal = ""; } else { cellVal = Convert.ToDateTime(pData).ToString("HH:mm:ss"); } style.HorizontalAlignment = TextAlignmentType.Center; } break; case ColumnTypes.Timespan: { if (pData == null || string.IsNullOrWhiteSpace(pData.ToString())) { cellVal = ""; } else { cellVal = string.Empty; TimeSpan tsTemp = new TimeSpan(0, 0, Convert.ToInt32(pData)); int iLevel = 0; if (tsTemp.Days > 0) { iLevel = 4; } else if (tsTemp.Hours > 0) { iLevel = 3; } else if (tsTemp.Minutes > 0) { iLevel = 2; } else { iLevel = 1; } switch (iLevel) { case 1: cellVal = tsTemp.Seconds.ToString() + "秒"; break; case 2: cellVal = tsTemp.Minutes.ToString() + "分" + tsTemp.Seconds.ToString() + "秒"; break; case 3: cellVal = tsTemp.Hours.ToString() + "小时" + tsTemp.Minutes.ToString() + "分" + tsTemp.Seconds.ToString() + "秒"; break; case 4: cellVal = tsTemp.Days + "天" + tsTemp.Hours.ToString() + "小时" + tsTemp.Minutes.ToString() + "分" + tsTemp.Seconds.ToString() + "秒"; break; } } } break; case ColumnTypes.Percent: { if (pData == null) { cellVal = ""; } else { var val = Convert.ToDecimal(pData); var accuracy = pGridColumn.Accuracy; if (accuracy.HasValue == false) { accuracy = 0; } cellVal = (val * 100).ToString("f" + accuracy.Value.ToString()) + "%"; } } break; default: { if (pData == null) { cellVal = ""; } else { cellVal = pData.ToString(); } } break; } // contentCell.PutValue(cellVal); } else { throw new ArgumentNullException("pContainer", "pContainer为null或不是Aspose.Cells.Worksheet对象."); } }