/// <summary> /// 获取模版结构 /// </summary> /// <param name="fileId"></param> /// <returns></returns> public ImportTemplateStructure GetStructure() { ImportTemplateStructure struc = new ImportTemplateStructure(); // 解析列节点 foreach (ExcelCell tec in ExcelCellList) { ImportTemplateColumnNodeConfigProcessor tproc = new ImportTemplateColumnNodeConfigProcessor(); ImportTemplateColumnNode tnode = tproc.GetObject(tec.Comment); if (tnode != null) { if (!tnode.ValueColumnIndex.HasValue) { tnode.ValueColumnIndex = tec.ColumnIndex; } if (!tnode.ValueRowIndex.HasValue) { tnode.ValueRowIndex = tec.RowIndex; } if (struc.DefaultGroup.ColumnNodeList.Count(tent => tent.ColumnName == tnode.ColumnName) <= 0) { struc.DefaultGroup.ColumnNodeList.Add(tnode); } else { throw new Exception("不合法模版:模版中存在同名数据列“" + tnode.ColumnName + "”。"); } } } // 解析命令节点 foreach (ExcelCell tec in ExcelCellList) { ImportTemplateCommandNodeConfigProcessor tproc = new ImportTemplateCommandNodeConfigProcessor(); ImportTemplateCommandNode tnode = tproc.GetObject(tec.Comment); if (tnode != null) { tnode.ColumnIndex = tec.ColumnIndex; tnode.RowIndex = tec.RowIndex; struc.DefaultGroup.CommandNodeList.Add(tnode); } } // 解析属性节点 foreach (ExcelCell tec in ExcelCellList) { ImportTemplatePropertyNodeConfigProcessor tproc = new ImportTemplatePropertyNodeConfigProcessor(); ImportTemplatePropertyNode tnode = tproc.GetObject(tec.Comment); if (tnode != null) { struc.DefaultGroup.PropertyNodeList.Add(tnode); } } return(struc); }
/// <summary> /// 获取根据blockSize获取DataTable列表 /// </summary> /// <param name="struc">模版结构</param> /// <param name="filePath">文件路径</param> /// <param name="blockSize">每个DataTable最大大小</param> /// <returns></returns> public static IList <DataTable> GetDataTableList(ImportTemplateStructure struc, string filePath, int blockSize) { if (blockSize <= 0) { blockSize = 1000; // 默认一次性处理1000行 } ImportTemplateCommandNode itcnBegin = struc.DefaultGroup.CommandNodeList.First(tent => tent.CommandCode == ImportTemplateCommandCode.Begin); ImportTemplateCommandNode itcnEnd = struc.DefaultGroup.CommandNodeList.First(tent => tent.CommandCode == ImportTemplateCommandCode.End); IList <DataTable> dtList = new List <DataTable>(); DataSet ds = new DataSet(); using (ExcelProcessor processor = ExcelService.GetProcessor(filePath)) { ds = processor.GetDataSet(); } DataTable dt = ds.Tables[0]; IList <ImportTemplateColumnNode> ccnodes = struc.DefaultGroup.GetCommonColumnNodeList(); // 设置公用数据列默认值 foreach (ImportTemplateColumnNode tnode in ccnodes) { // 行第一个“-1”DataSet从第二行开始,行第二个“-1”,列第一个“-1”数组从0开始 tnode.DefaultValue = dt.Rows[tnode.ValueRowIndex.Value - 2][tnode.ValueColumnIndex.Value - 1]; } IList <ImportTemplateColumnNode> ocnodes = struc.DefaultGroup.GetOrdinaireColumnNodeList(); int startRowIndex = itcnBegin.RowIndex; int endRowIndex = itcnEnd.RowIndex; int startColumnIndex = itcnBegin.ColumnIndex; int endColumnIndex = itcnEnd.ColumnIndex; if (itcnBegin.RowIndex == itcnEnd.RowIndex) { // DataSet从第二行开始这里需要+1 endRowIndex = dt.Rows.Count + 1; } DataTable tdt = null; for (int i = startRowIndex; i <= endRowIndex; i++) { if ((i - startRowIndex) % blockSize == 0) { tdt = struc.DefaultGroup.GetDataTableSchema(); dtList.Add(tdt); } DataRow drow = tdt.NewRow(); bool emptyflag = true; for (int j = startColumnIndex; j <= endColumnIndex; j++) { ImportTemplateColumnNode tnode = ocnodes.First(tent => (tent.ValueColumnIndex) == j); if (tnode != null) { object tval = dt.Rows[(i - 2)][(j - 1)]; if (tval != null && tval.ToString().Trim() != String.Empty) { emptyflag = false; } tval = (tval != null ? tval : tnode.DefaultValue); drow[tnode.ColumnName] = tval; } } // 当前行为空行,这跳过执行 if (emptyflag == true) { continue; } // 设置公共列值 foreach (ImportTemplateColumnNode tnode in ccnodes) { drow[tnode.ColumnName] = tnode.DefaultValue; } tdt.Rows.Add(drow); } return(dtList); }