/// <summary> /// 创建单个Sheet /// </summary> /// <returns></returns> private void CreateSingleSheet(IWorkbook workbook, MaterialCategoryDTO category, string locale, string sheetName, ExportTemplate template, PageResult <IDictionary <string, object> > result) { ISheet sheet = workbook.CreateSheet(sheetName); var row = sheet.CreateRow(0); var exportFields = template.Headers.Select(y => y.Field).ToList(); int k = 0; int columnIndex = 0; for (int i = 0; i < exportFields.Count; i++) { if (exportFields[i].Equals("Configs")) //配置参数 { for (k = 0; k < category.Configs.Count; k++) { var cell = row.CreateCell(columnIndex + k, CellType.String); cell.SetCellValue("en-us".EqualsIgnoreCase(locale) ? category.Configs[k].ConfigKey : category.Configs[k].ConfigKeyDesc); //表头 columnIndex++; } } else { if (IsSheetColumnShow(category, exportFields[i])) { var cell = row.CreateCell(columnIndex + (k > 0 ? k - 1 : k), CellType.String); var header = template.Headers.FirstOrDefault(x => x.Field.Equals(exportFields[i])); cell.SetCellValue("en-us".EqualsIgnoreCase(locale) ? header.EnHeaderText : header.CnHeaderText); //表头 columnIndex++; } } } for (int i = 1; i < result.Items.Count() + 1; i++) { k = 0; row = sheet.CreateRow(i); columnIndex = 0; for (int j = 0; j < exportFields.Count; j++) { if (exportFields[j].Equals("Configs")) //配置参数 { for (k = 0; k < category.Configs.Count; k++) { var cell = row.CreateCell(columnIndex + k, CellType.String); cell.SetCellValue(result.Items.ElementAt(i - 1)[category.Configs[k].ConfigKey]?.ToString()); columnIndex++; } } else { if (IsSheetColumnShow(category, exportFields[j])) { var cell = row.CreateCell(columnIndex + (k > 0 ? k - 1 : k), CellType.String); cell.SetCellValue(result.Items.ElementAt(i - 1)[exportFields[j]]?.ToString()); columnIndex++; } } } } }
/// <summary> /// 过滤掉有些sheet 不需要显示的列 /// </summary> /// <param name="category"></param> /// <param name="field"></param> /// <returns></returns> private bool IsSheetColumnShow(MaterialCategoryDTO category, string field) { if (field == "ContainerPartNumber" && true != category.RequireContainer) //有可能是null { return(false); } if (field == "RackPn" && true != category.RequireRack)//有可能是null { return(false); } return(true); }