Exemplo n.º 1
0
        private void Write()
        {
            IWorkbook workbook = ModelFilePath.OpenExcel();

            if (workbook != null)
            {
                ISheet sheet = workbook.GetSheetAt(0);
                if (sheet != null)
                {
                    IRow  modelRow = sheet.GetRow(CollectTable.StartIndex);
                    IRow  row      = null;
                    ICell cell     = null;
                    var   index    = CollectTable.StartIndex;
                    var   all      = new List <FieldValue>();
                    var   sumA     = 0;
                    sheet.ShiftRows(index + 1, index + 5, CollectXZQ.Count + CollectXZQ.Sum(e => e.Children.Count) - 1);
                    foreach (var shi in CollectXZQ)
                    {
                        row        = sheet.GetRow(index) ?? sheet.CreateRow(index);
                        row.Height = modelRow.Height;
                        cell       = ExcelClass.GetCell(row, 0, modelRow);
                        cell.SetCellValue(shi.XZQDM);
                        ExcelClass.GetCell(row, 1, modelRow).SetCellValue(shi.XZQMC);
                        //sheet.ShiftRows(index + 1, index + 5, 1);
                        if (shi.Children != null)
                        {
                            var i = index;
                            //sheet.ShiftRows(index + 2, index + 6, shi.Children.Count);
                            var sumList = new List <FieldValue>();
                            var sum1    = 0;
                            #region 写入市下面的区县信息数据
                            foreach (var quxian in shi.Children)
                            {
                                row        = sheet.GetRow(index) ?? sheet.CreateRow(index);
                                row.Height = modelRow.Height;
                                cell       = ExcelClass.GetCell(row, 2, modelRow);
                                #region  边框
                                ExcelClass.GetCell(row, 0, modelRow);
                                ExcelClass.GetCell(row, 1, modelRow);
                                #endregion


                                cell.SetCellValue(quxian.XZCDM);
                                ExcelClass.GetCell(row, 3, modelRow).SetCellValue(quxian.XZCMC);
                                var entry = Result.FirstOrDefault(e => e.XZQDM.ToLower() == quxian.XZCDM.ToLower() && e.XZQMC.ToLower() == quxian.XZCMC.ToLower());
                                if (entry != null)
                                {
                                    cell = ExcelClass.GetCell(row, 4, modelRow);
                                    cell.SetCellValue(entry.Count);
                                    sum1 += entry.Count;
                                    foreach (var field in entry.Values)
                                    {
                                        cell = ExcelClass.GetCell(row, CollectTable.CollectIndex + field.Index, modelRow);
                                        cell.SetCellValue(field.Value);
                                    }
                                    sumList.AddRange(entry.Values);
                                }
                                index++;
                            }
                            #endregion
                            row        = sheet.GetRow(index) ?? sheet.CreateRow(index);
                            row.Height = modelRow.Height;
                            cell       = ExcelClass.GetCell(row, 4, modelRow);
                            cell.SetCellValue(sum1);

                            ExcelClass.GetCell(row, 0, modelRow);
                            ExcelClass.GetCell(row, 1, modelRow);


                            ExcelClass.GetCell(row, 2, modelRow).SetCellValue("小计");
                            ExcelClass.GetCell(row, 3, modelRow);
                            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(index, index, 2, 3));
                            foreach (var field in Fields)
                            {
                                cell = ExcelClass.GetCell(row, field.Index + CollectTable.CollectIndex, modelRow);
                                var list = sumList.Where(e => e.Index == field.Index).ToList();
                                #region 写入市 小计值
                                if (field.Type == ExcelType.Double)
                                {
                                    var a   = .0;
                                    var sum = .0;
                                    foreach (var item in list)
                                    {
                                        if (double.TryParse(item.Value, out a))
                                        {
                                            sum += Math.Round(a, 4);
                                        }
                                    }
                                    cell.SetCellValue(sum);
                                }
                                else if (field.Type == ExcelType.Int)
                                {
                                    var b   = 0;
                                    var sum = 0;
                                    foreach (var item in list)
                                    {
                                        if (int.TryParse(item.Value, out b))
                                        {
                                            sum += b;
                                        }
                                    }
                                    cell.SetCellValue(sum);
                                }
                                #endregion
                            }

                            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(i, index, 0, 0));
                            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(i, index, 1, 1));
                            all.AddRange(sumList);
                            sumA += sum1;
                        }
                        index++;
                    }

                    #region 写合计
                    row        = sheet.GetRow(index) ?? sheet.CreateRow(index);
                    row.Height = modelRow.Height;
                    ExcelClass.GetCell(row, 4, modelRow).SetCellValue(sumA);
                    foreach (var field in Fields)
                    {
                        cell = ExcelClass.GetCell(row, field.Index + CollectTable.CollectIndex, modelRow);
                        var list = all.Where(e => e.Index == field.Index).ToList();
                        if (field.Type == ExcelType.Double)
                        {
                            var a   = .0;
                            var sum = .0;
                            foreach (var item in list)
                            {
                                if (double.TryParse(item.Value, out a))
                                {
                                    sum += Math.Round(a, 4);
                                }
                            }
                            cell.SetCellValue(sum);
                        }
                        else if (field.Type == ExcelType.Int)
                        {
                            var b   = 0;
                            var sum = 0;
                            foreach (var item in list)
                            {
                                if (int.TryParse(item.Value, out b))
                                {
                                    sum += b;
                                }
                            }
                            cell.SetCellValue(sum);
                        }
                    }
                    #endregion
                }
            }

            using (var fs = new FileStream(SaveFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                workbook.Write(fs);
            }
        }
        private void Write1()
        {
            IWorkbook workbook = ModelFilePath.OpenExcel();

            if (workbook != null)
            {
                ISheet sheet = workbook.GetSheetAt(0);
                if (sheet != null)
                {
                    IRow modelRow = sheet.GetRow(CollectTable.StartIndex);
                    var  header   = sheet.GetRow(0);
                    ExcelClass.GetCell(header, 0).SetCellValue(CollectTable.Title);
                    IRow  row   = null;
                    ICell cell  = null;
                    var   index = CollectTable.StartIndex;
                    var   all   = new List <FieldValue>();
                    var   sumA  = 0;
                    sheet.ShiftRows(index + 1, index + 5, CollectXZQ.Count + CollectXZQ.Sum(e => e.Children.Count) - 1);
                    foreach (var shi in CollectXZQ)
                    {
                        row        = sheet.GetRow(index) ?? sheet.CreateRow(index);
                        row.Height = modelRow.Height;
                        cell       = ExcelClass.GetCell(row, 0, modelRow);
                        cell.SetCellValue(shi.XZQDM);                                 //地市代码
                        ExcelClass.GetCell(row, 1, modelRow).SetCellValue(shi.XZQMC); //地市名称
                        if (shi.Children != null)
                        {
                            var start = index;
                            #region 写入每个县区数值
                            var sumList = new List <FieldValue>();
                            var sum1    = 0;
                            foreach (var quxian in shi.Children)
                            {
                                row        = sheet.GetRow(index) ?? sheet.CreateRow(index);
                                row.Height = modelRow.Height;

                                ExcelClass.GetCell(row, 0, modelRow);
                                ExcelClass.GetCell(row, 1, modelRow);

                                cell = ExcelClass.GetCell(row, 2, modelRow);
                                cell.SetCellValue(quxian.XZCDM);                                 //县(区)(市)代码
                                ExcelClass.GetCell(row, 3, modelRow).SetCellValue(quxian.XZCMC); //县(区)(市)名称

                                var values = Search(quxian.XZCDM, quxian.XZCMC);
                                if (values != null)
                                {
                                    if (Flag)
                                    {
                                        cell = ExcelClass.GetCell(row, 4, modelRow);
                                        cell.SetCellValue(values.Count);
                                        sum1 += values.Count;
                                    }

                                    foreach (var field in Fields)
                                    {
                                        cell = ExcelClass.GetCell(row, Flag? CollectTable.CollectIndex + field.Index:field.Index, modelRow);
                                        var list = values.Where(e => e.Index == field.Index).ToList();
                                        #region 合计字段值 并写入值
                                        if (field.Type == ExcelType.Double)
                                        {
                                            var a   = .0;
                                            var sum = .0;
                                            foreach (var item in list)
                                            {
                                                if (double.TryParse(item.Value, out a))
                                                {
                                                    sum += Math.Round(a, 4);
                                                }
                                            }
                                            cell.SetCellValue(sum);
                                        }
                                        else if (field.Type == ExcelType.Int)
                                        {
                                            var b   = 0;
                                            var sum = 0;
                                            foreach (var item in list)
                                            {
                                                if (int.TryParse(item.Value, out b))
                                                {
                                                    sum += b;
                                                }
                                            }
                                            cell.SetCellValue(sum);
                                        }
                                        #endregion
                                    }
                                    sumList.AddRange(values);
                                }
                                index++;
                            }
                            row        = sheet.GetRow(index) ?? sheet.CreateRow(index);
                            row.Height = modelRow.Height;
                            #region 写入地市小计
                            ExcelClass.GetCell(row, 2, modelRow).SetCellValue("小计");

                            ExcelClass.GetCell(row, 0, modelRow);
                            ExcelClass.GetCell(row, 1, modelRow);

                            if (Flag)
                            {
                                cell = ExcelClass.GetCell(row, 4, modelRow);
                                cell.SetCellValue(sum1);
                            }

                            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(index, index, 2, 3));
                            foreach (var field in Fields)
                            {
                                cell = ExcelClass.GetCell(row, Flag? field.Index + CollectTable.CollectIndex:field.Index, modelRow);
                                var list = sumList.Where(e => e.Index == field.Index).ToList();
                                #region 合计字段值 并写入值
                                if (field.Type == ExcelType.Double)
                                {
                                    var a   = .0;
                                    var sum = .0;
                                    foreach (var item in list)
                                    {
                                        if (double.TryParse(item.Value, out a))
                                        {
                                            sum += Math.Round(a, 4);
                                        }
                                    }
                                    cell.SetCellValue(sum);
                                }
                                else if (field.Type == ExcelType.Int)
                                {
                                    var b   = 0;
                                    var sum = 0;
                                    foreach (var item in list)
                                    {
                                        if (int.TryParse(item.Value, out b))
                                        {
                                            sum += b;
                                        }
                                    }
                                    cell.SetCellValue(sum);
                                }
                                #endregion
                            }
                            #endregion

                            all.AddRange(sumList);
                            sumA += sum1;


                            #endregion
                            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(start, index, 0, 0));
                            sheet.AddMergedRegion(new NPOI.SS.Util.CellRangeAddress(start, index, 1, 1));
                        }
                        index++;
                    }

                    #region 合计
                    row        = sheet.GetRow(index) ?? sheet.CreateRow(index);
                    row.Height = modelRow.Height;
                    if (Flag)
                    {
                        ExcelClass.GetCell(row, 4, modelRow).SetCellValue(sumA);
                    }

                    foreach (var field in Fields)
                    {
                        cell = ExcelClass.GetCell(row, Flag? field.Index + CollectTable.CollectIndex:field.Index, modelRow);
                        var list = all.Where(e => e.Index == field.Index).ToList();
                        if (field.Type == ExcelType.Double)
                        {
                            var a   = .0;
                            var sum = .0;
                            foreach (var item in list)
                            {
                                if (double.TryParse(item.Value, out a))
                                {
                                    sum += Math.Round(a, 4);
                                }
                            }
                            cell.SetCellValue(sum);
                        }
                        else if (field.Type == ExcelType.Int)
                        {
                            var b   = 0;
                            var sum = 0;
                            foreach (var item in list)
                            {
                                if (int.TryParse(item.Value, out b))
                                {
                                    sum += b;
                                }
                            }
                            cell.SetCellValue(sum);
                        }
                    }


                    #endregion
                }
            }
            using (var fs = new FileStream(SaveFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
            {
                workbook.Write(fs);
            }
        }