C#导出模板Excel

根据指定的模板来导出Excel内容.

第一步

先要引用NPOI ,右键项目名称管理nuget程序包,从这里加就行,不用从网上下载,当初搞了半天一直报错,这个东西很好用 C#导出模板Excel_第1张图片

第二步

我是先把需要统计的存到List里了.bool ReportExcelForTemplate(List selist, string filepath, string template) 其中filepath是想到导出的路径template是模板的路径

标题 具体方法,其中很多没用的代码,技术水平有限基本上都是拷贝的

            try
            {
                Stream fs = new FileStream(template, FileMode.Open, FileAccess.Read);

                NPOI.XSSF.UserModel.XSSFWorkbook book = new NPOI.XSSF.UserModel.XSSFWorkbook(fs);

                //默认只取第一个sheet
                NPOI.SS.UserModel.ISheet sheet = book.GetSheetAt(0);
                //最后一行
                int LastRowNum = sheet.LastRowNum;
                //最后一行 行对象
                IRow LastRow = sheet.GetRow(LastRowNum);
                //行对象
                NPOI.SS.UserModel.IRow row = null;
                ICellStyle cellsytle = book.CreateCellStyle();

                //导出数据的总行数     
                NPOI.SS.UserModel.ICell cell1 = null;
                for (int i = 0; i < selist.Count; i++)
                {
                    row = sheet.CreateRow(i + LastRowNum);
                    if (i == 0)
                    {
                        cell1 = row.CreateCell(0);

                    }

                    cell1 = (XSSFCell)sheet.GetRow(1).GetCell(1);

                    cell1.SetCellValue(SysStruct.SysPar.JCZName);

                    列对象
                    //NPOI.SS.UserModel.ICell cell = row.CreateCell(j);
                    列数据类型
                    //cell.SetCellType(NPOI.SS.UserModel.CellType.STRING);
                    列对应样式                        
                    //cell.CellStyle = GetHeadStyle(book, false);
                    //导出数据 行对应的列数

                    for (int j = 0; j < LastRow.Cells.Count; j++)
                    {
                        //列对象
                        NPOI.SS.UserModel.ICell cell = row.CreateCell(j);
                        //报表上的名字第一行用#报表自己输入的内容#
                        string strCellValue = LastRow.Cells[j].StringCellValue.Replace("#", "");
                        string strSetCellValue = "" + i + 1;//初始化为序号
                        if (strCellValue != "{i}")
                        {
                            //若当前列不是序号列对应填充
                            if (strCellValue == "报表自己输入的内容1")
                            {
                                strSetCellValue = selist[i].内容1;
                            }
                            else if (strCellValue == "报表自己输入的内容2")
                            {
                                strSetCellValue = selist[i].内容2;
                            }
                            else if (strCellValue == "报表自己输入的内容3")
                            {
                                strSetCellValue = selist[i].内容3;
                            }
                            else if (strCellValue == "报表自己输入的内容4")
                            {
                                strSetCellValue = selist[i].内容4;
                            }
                        }
                        //列对应值
                        cell.SetCellValue(strSetCellValue);
                    }
                }
                //写入到指定位置
                System.IO.MemoryStream ms = new System.IO.MemoryStream();
                book.Write(ms);
                book = null;
                //新建一个,将刚才的报告单复制进来
                using (FileStream fs1 = new FileStream(filepath, FileMode.Create, FileAccess.Write))
                {
                    byte[] data = ms.ToArray();
                    fs1.Write(data, 0, data.Length);
                    fs1.Flush();
                }
                ms.Close();
                ms.Dispose();
                return true;
            }
            catch (Exception ex)
            {
                MessageBox.Show("错误信息:" + ex.Message);
                return false;
            }
            return true;

小白一枚,大佬勿喷.

你可能感兴趣的:(C#导出报表)