zoukankan      html  css  js  c++  java
  • c# 后台 导出EXCEL方法

    ------先上代码------

    /// <summary>
            /// 生成excel文件流
            /// </summary>
            /// <param name="dt"></param>
            /// <param name="filePath"></param>
            /// <param name="styleType">样式格式</param>
            /// <param name="sheetIndex"></param>
            public static void DataTableToExcel(DataTable dt, string filePath, HorizontalAlignment styleType, int sheetIndex = 0)
            {
                IWorkbook workbook = null;
                try
                {
                    using (FileStream file = new FileStream(filePath, FileMode.Open, FileAccess.Read))
                    {
                        workbook = new XSSFWorkbook(file);
                        ISheet sheet = workbook.GetSheetAt(sheetIndex);
                        ICellStyle headerCellStyle = workbook.CreateCellStyle();
                        headerCellStyle.BorderBottom = BorderStyle.Thin;
                        headerCellStyle.BorderLeft = BorderStyle.Thin;
                        headerCellStyle.BorderRight = BorderStyle.Thin;
                        headerCellStyle.BorderTop = BorderStyle.Thin;
    
                        headerCellStyle.Alignment = styleType;//设置title样式(居中,靠右)
                        IFont headerFont = workbook.CreateFont();
                        headerFont.FontHeightInPoints = 11;
                        headerFont.Boldweight = (short)FontBoldWeight.Bold;
                        headerCellStyle.SetFont(headerFont);
    
                        int colIndex = 0;
                        IRow headerRow = sheet.CreateRow(0);
                        foreach (DataColumn dc in dt.Columns)
                        {
                            ICell cell = headerRow.CreateCell(colIndex);
                            cell.SetCellValue(dc.ColumnName);
                            cell.CellStyle = headerCellStyle;
                            colIndex++;
                        }
                        IFont cellFont = workbook.CreateFont();
                        cellFont.FontHeightInPoints = 11;
                        cellFont.Boldweight = (short)FontBoldWeight.Normal;
    
                        ICellStyle cellStyleNumber = workbook.CreateCellStyle();
                        cellStyleNumber.BorderBottom = BorderStyle.Thin;
                        cellStyleNumber.BorderLeft = BorderStyle.Thin;
                        cellStyleNumber.BorderRight = BorderStyle.Thin;
                        cellStyleNumber.BorderTop = BorderStyle.Thin;
                        cellStyleNumber.SetFont(cellFont);
                        IDataFormat dataFormatNumber = workbook.CreateDataFormat();
                        cellStyleNumber.DataFormat = dataFormatNumber.GetFormat("0");
    
                        ICellStyle cellStyleNumberic = workbook.CreateCellStyle();
                        cellStyleNumberic.BorderBottom = BorderStyle.Thin;
                        cellStyleNumberic.BorderLeft = BorderStyle.Thin;
                        cellStyleNumberic.BorderRight = BorderStyle.Thin;
                        cellStyleNumberic.BorderTop = BorderStyle.Thin;
                        cellStyleNumberic.SetFont(cellFont);
                        IDataFormat dataFormatNumberic = workbook.CreateDataFormat();
                        cellStyleNumberic.DataFormat = dataFormatNumberic.GetFormat("0.00");
    
                        ICellStyle cellStyleDateTime = workbook.CreateCellStyle();
                        cellStyleDateTime.BorderBottom = BorderStyle.Thin;
                        cellStyleDateTime.BorderLeft = BorderStyle.Thin;
                        cellStyleDateTime.BorderRight = BorderStyle.Thin;
                        cellStyleDateTime.BorderTop = BorderStyle.Thin;
                        cellStyleDateTime.SetFont(cellFont);
                        IDataFormat dataFormatDateTime = workbook.CreateDataFormat();
                        cellStyleDateTime.DataFormat = dataFormatDateTime.GetFormat("MM/dd/yyyy");
    
                        ICellStyle cellStyleText = workbook.CreateCellStyle();
                        cellStyleText.BorderBottom = BorderStyle.Thin;
                        cellStyleText.BorderLeft = BorderStyle.Thin;
                        cellStyleText.BorderRight = BorderStyle.Thin;
                        cellStyleText.BorderTop = BorderStyle.Thin;
                        cellStyleText.SetFont(cellFont);
                        IDataFormat dataFormatText = workbook.CreateDataFormat();
                        //cellStyleText.DataFormat = dataFormatText.GetFormat("@");
    
                        int rowIndex = 1;
                        int cellIndex = 0;
                        foreach (DataRow dr in dt.Rows)
                        {
                            IRow dataRow = sheet.CreateRow(rowIndex);
                            foreach (DataColumn dc in dt.Columns)
                            {
                                ICell cell = dataRow.CreateCell(cellIndex);
                                Int64 number = 0;
                                double numberic = 0;
                                DateTime dateTime = new DateTime();
    
                                string columnValue = dr[dc].ToString();
                                if (Int64.TryParse(columnValue, out number))
                                {
                                    cell.SetCellValue(number);
                                    cellStyleNumber.Alignment = styleType;
                                    cell.CellStyle = cellStyleNumber;
                                }
                                else if (double.TryParse(columnValue, out numberic) && columnValue.Contains('.'))
                                {
                                    cell.SetCellValue(numberic);
                                    cellStyleNumber.Alignment = styleType;
                                    cell.CellStyle = cellStyleNumberic;
                                }
                                else if (DateTime.TryParse(columnValue, out dateTime))
                                {
                                    if (dc.ToString().Trim().ToLower()== "createtime")
                                    {
                                        if (dateTime.ToString("yyyy-MM-dd") == "0001-01-01")
                                        {
                                            cell.SetCellValue("");
                                        }
                                        else
                                        {
                                            cell.SetCellValue(dateTime.ToString("MM/dd/yyyy HH:mm:ss"));
                                        }
                                    }
                                    else
                                    {
                                        if (dateTime.ToString("yyyy-MM-dd") == "0001-01-01")
                                        {
                                            cell.SetCellValue("");
                                        }
                                        else
                                        {
                                            cell.SetCellValue(dateTime.ToString("MM/dd/yyyy"));
                                        }
                                    }
                                    cellStyleDateTime.Alignment = styleType;
                                    cell.CellStyle = cellStyleDateTime;
                                }
                                else
                                {
                                    cell.SetCellValue(columnValue);
                                    cellStyleText.Alignment = styleType;
                                    cell.CellStyle = cellStyleText;
                                }
                                cellIndex++;
                            }
                            cellIndex = 0;
                            rowIndex++;
                        }
                        //for (int i = 0; i < colIndex; i++)
                        //{
                        //    sheet.AutoSizeColumn(i);
                        //}
                        MemoryStream ms = new MemoryStream();
                        workbook.Write(ms);
                        ms.Flush();
                        using (FileStream saveFile = new FileStream(filePath, FileMode.Create, FileAccess.Write))
                        {
                            byte[] data = ms.ToArray();
                            saveFile.Write(data, 0, data.Length);
                            saveFile.Flush();
                            data = null;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    workbook = null;
                }
            }

    ------------对上面方法调用---------------
    /// <summary> /// 下载文件 /// </summary> /// <param name="dt"></param> /// <param name="fileName"></param> /// <param name="sheetName"></param> public static string DownLoadExcel(DataTable dt, string fileName, string styleType = "") { //当前日文件夹 string dateString = System.DateTime.Now.ToString("yyyyMMdd"); //删除其他日期文件夹 DirectoryInfo dir = new DirectoryInfo(HostingEnvironment.MapPath("~/TemparyFile")); FileSystemInfo[] fileinfo = dir.GetFileSystemInfos(); //返回目录中所有文件和子目录 foreach (FileSystemInfo i in fileinfo) { if (i is DirectoryInfo && !i.Name.Equals(dateString) && !i.Name.ToLower().Equals("userfile")) //判断是否文件夹 { DirectoryInfo subdir = new DirectoryInfo(i.FullName); subdir.Delete(true); //删除子目录和文件 } } //无当天文件夹时创建文件夹 if (!Directory.Exists(HostingEnvironment.MapPath("~/TemparyFile/" + dateString))) { Directory.CreateDirectory(HostingEnvironment.MapPath("~/TemparyFile/" + dateString)); } string sourceFile = HostingEnvironment.MapPath("~/TemparyFile/ExcelTemplate.xlsx"); var date = DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + DateTime.Now.Day.ToString() + DateTime.Now.Hour.ToString() + DateTime.Now.Minute.ToString() + DateTime.Now.Second.ToString(); //string destFileName = fileName+"-" + Guid.NewGuid() + ".xlsx"; string destFileName = fileName + "_" + date + ".xlsx"; string destFilePath = HostingEnvironment.MapPath("~/TemparyFile/" + dateString) + "/" + destFileName; File.Copy(sourceFile, destFilePath); switch (styleType.ToLower()) { case "center": ExcelHandle.DataTableToExcel(dt, destFilePath, NPOI.SS.UserModel.HorizontalAlignment.Center); break; case "right": ExcelHandle.DataTableToExcel(dt, destFilePath, NPOI.SS.UserModel.HorizontalAlignment.Right); break; default: ExcelHandle.DataTableToExcel(dt, destFilePath); break; } return "/TemparyFile/" + dateString + "/" + destFileName; }
  • 相关阅读:
    第30节:Java基础-内部类
    第30节:Java基础-内部类
    gridview无数据源实现更新数据库(即断开更新数据库)
    net8:文本文件的创建及其读写
    智勇之家网页颜色代码自动生成
    对象数据源objectdatasource的使用,类的编写实现查询增删改的方法
    清清月儿.net学习技术资料网站
    可移植的数据库
    net3:文件上传与图片显示以及HiddenField隐藏字段值的使用
    C#.net磁盘管理以及文件操作
  • 原文地址:https://www.cnblogs.com/victor-huang/p/13263138.html
Copyright © 2011-2022 走看看