Ejemplo n.º 1
0
        /// <summary>
        /// MyXls导出
        /// </summary>
        /// <returns></returns>
        public byte[] GenerateExcel()
        {
            XlsDocument xls = new XlsDocument();

            Worksheet sheet = xls.Workbook.Worksheets.Add("Sheet1");//状态栏标题名称
            Cells     cells = sheet.Cells;

            MakeExcelHeader(ListColumns, cells, 1, 1);

            int rowIndex = ListColumns.Max(x => x.MaxLevel);
            int colIndex = 0;
            //List<Color> allcolors = new List<Color>();
            //allcolors.Add(Colors.Default08);
            //allcolors.Add(Colors.Default09);
            //allcolors.Add(Colors.Default0A);
            //allcolors.Add(Colors.Default0B);
            //allcolors.Add(Colors.Default0C);
            //allcolors.Add(Colors.Default0D);
            //allcolors.Add(Colors.Default0E);
            //allcolors.Add(Colors.Default0F);
            //allcolors.Add(Colors.Default10);
            //allcolors.Add(Colors.Default11);
            //allcolors.Add(Colors.Default12);
            //allcolors.Add(Colors.Default13);
            //allcolors.Add(Colors.Default14);
            //allcolors.Add(Colors.Default15);
            //allcolors.Add(Colors.Default16);
            //allcolors.Add(Colors.Default17);
            //allcolors.Add(Colors.Default18);
            //allcolors.Add(Colors.Default19);
            //allcolors.Add(Colors.Default20);
            //allcolors.Add(Colors.Default1A);
            //allcolors.Add(Colors.Default1B);
            //allcolors.Add(Colors.Default1C);
            //allcolors.Add(Colors.Default1D);
            //allcolors.Add(Colors.Default1E);
            //allcolors.Add(Colors.Default1F);
            //allcolors.Add(Colors.Default20);
            //allcolors.Add(Colors.Default21);
            //allcolors.Add(Colors.Default22);
            //allcolors.Add(Colors.Default23);
            //allcolors.Add(Colors.Default24);
            //allcolors.Add(Colors.Default25);
            //allcolors.Add(Colors.Default26);
            //allcolors.Add(Colors.Default27);
            //allcolors.Add(Colors.Default28);
            //allcolors.Add(Colors.Default29);
            //allcolors.Add(Colors.Default2A);
            //allcolors.Add(Colors.Default2B);
            //allcolors.Add(Colors.Default2C);
            //allcolors.Add(Colors.Default2D);
            //allcolors.Add(Colors.Default2E);
            //allcolors.Add(Colors.Default2F);
            //allcolors.Add(Colors.Default30);
            //allcolors.Add(Colors.Default31);
            //allcolors.Add(Colors.Default32);
            //allcolors.Add(Colors.Default33);
            //allcolors.Add(Colors.Default34);
            //allcolors.Add(Colors.Default35);
            //allcolors.Add(Colors.Default36);
            //allcolors.Add(Colors.Default37);
            //allcolors.Add(Colors.Default38);
            //allcolors.Add(Colors.Default39);
            //allcolors.Add(Colors.Default3A);
            //allcolors.Add(Colors.Default3B);
            //allcolors.Add(Colors.Default3C);
            //allcolors.Add(Colors.Default3D);
            //allcolors.Add(Colors.Default3E);
            //allcolors.Add(Colors.Default3F);
            //int xx = 0;
            Dictionary <IGridColumn <TModel>, int> sameCount = new Dictionary <IGridColumn <TModel>, int>();

            foreach (var baseCol in ListColumns)
            {
                foreach (var col in baseCol.BottomChildren)
                {
                    sameCount.Add(col, 0);
                }
            }
            int i = 0;

            foreach (var row in EntityList)
            {
                rowIndex++;
                colIndex = 0;
                foreach (var baseCol in ListColumns)
                {
                    foreach (var col in baseCol.BottomChildren)
                    {
                        colIndex++;
                        //sheet.Cells.AddValueCell(rowIndex, colIndex, row[col.ColumnName].ToString());//将数据添加到xls表格里
                        //Cell cell= cells.AddValueCell(rowIndex, colIndex, Convert.ToDouble(row[col.ColumnName].ToString()));//转换为数字型
                        string  cellValue = col.GetText(row).ToHtmlString();
                        object  cv        = cellValue;
                        int     testInt;
                        decimal testFloat;
                        int     floatRound = 0;
                        if (!cellValue.StartsWith("0"))
                        {
                            if (int.TryParse(cellValue, out testInt))
                            {
                                if (testInt <= 100000)
                                {
                                    cv = testInt;
                                }
                            }
                            else if (decimal.TryParse(cellValue, out testFloat))
                            {
                                if (testFloat <= 100000)
                                {
                                    cv = testFloat;
                                    if (cellValue.Split('.').Count() > 1)
                                    {
                                        floatRound = cellValue.Split('.')[1].ToArray().Count(); //获取小数位数
                                    }
                                }
                            }
                        }
                        else if (decimal.TryParse(cellValue, out testFloat))
                        {
                            if (testFloat == 0)//为0时
                            {
                                cv         = 0;
                                floatRound = 0;
                            }
                            else if (testFloat < 1)//modify by yecs 2015-02-26 LSTC税收报表: 小数点的项目被显示为文本格式(小于1的小数)
                            {
                                cv         = testFloat;
                                floatRound = cellValue.Split('.')[1].ToArray().Count();
                            }
                        }
                        Cell cell = cells.Add(rowIndex, colIndex, cv);
                        if (floatRound > 0)
                        {
                            cell.Format = "0.";
                            for (int x = 1; x <= floatRound; x++)
                            {
                                cell.Format += "0";
                            }
                        }
                        cell.TopLineStyle      = 1;
                        cell.BottomLineStyle   = 1;
                        cell.LeftLineStyle     = 1;
                        cell.RightLineStyle    = 1;
                        cell.UseBorder         = true;
                        cell.VerticalAlignment = VerticalAlignments.Centered;
                        System.Drawing.Color backColor = col.GetBackGroundColor(row);
                        System.Drawing.Color foreColor = col.GetForeGroundColor(row);
                        if (backColor != System.Drawing.Color.Empty)
                        {
                            cell.Pattern      = 1;
                            cell.PatternColor = UtilsTool.GetExcelColor(backColor);
                        }

                        if (col.NeedGroup == true && sameCount[col] == i)
                        {
                            sameCount[col] = sameCount[col] + 1;
                            string lastValue = col.GetText(row).ToHtmlString();
                            for (int j = i + 1; j < EntityList.Count; j++)
                            {
                                if (col.GetText(EntityList[j]).ToHtmlString() == lastValue)
                                {
                                    sameCount[col] = sameCount[col] + 1;
                                }
                                else
                                {
                                    break;
                                }
                            }
                            cells.Merge(rowIndex, rowIndex + sameCount[col] - i - 1, colIndex, colIndex);
                        }
                    }
                }
                i++;
            }

            return(xls.Bytes.ByteArray);
        }