Export data to Excel

1. Create a class and write the following code (which has been encapsulated) into it.
2. Call the
effect diagram directly when using it .
Insert picture description here
Insert picture description here
Here are some of the following 内联代码片.
Can be directly copied for past use, already packaged

 public class ExcelHelper
  {
    
    
 	/// <summary>   
        /// DataTable导出到Excel的MemoryStream   
        /// </summary>   
        /// <param name="dtSource">源DataTable</param>   
        /// <param name="strHeaderText">表头文本</param>   
   public static MemoryStream Export(DataTable dtSource, string strHeaderText)
        {
    
    
            HSSFWorkbook workbook = new HSSFWorkbook();
            HSSFSheet sheet = workbook.CreateSheet("Sheet1");
	#region 右击文件 属性信息
	     {
    
    
                DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
                dsi.Company = "";
                workbook.DocumentSummaryInformation = dsi;
SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
                si.Author = ""; //填加xls文件作者信息   
                si.ApplicationName = "NPOI测试程序"; //填加xls文件创建程序信息   
                si.LastAuthor = ""; //填加xls文件最后保存者信息   
                si.Comments = "说明信息"; //填加xls文件作者信息   
                si.Title = "NPOI测试"; //填加xls文件标题信息   
                si.Subject = "NPOI测试Demo";//填加文件主题信息   
                si.CreateDateTime = DateTime.Now;
                workbook.SummaryInformation = si;
              }
            #endregion
            HSSFCellStyle dateStyle = workbook.CreateCellStyle();
            HSSFDataFormat format = workbook.CreateDataFormat();
            dateStyle.DataFormat = format.GetFormat("yyyy-mm-dd");
//取得列宽   
            int[] arrColWidth = new int[dtSource.Columns.Count];
            foreach (DataColumn item in dtSource.Columns)
            {
    
    
                arrColWidth[item.Ordinal] = Encoding.GetEncoding(936).GetBytes(item.ColumnName.ToString()).Length;
            }
            for (int i = 0; i < dtSource.Rows.Count; i++)
            {
    
    
                for (int j = 0; j < dtSource.Columns.Count; j++)
                {
    
    
                int intTemp = Encoding.GetEncoding(936).GetBytes(dtSource.Rows[i][j].ToString()).Length;
                    if (intTemp > arrColWidth[j])
                    {
    
    
                        arrColWidth[j] = intTemp;
                    }
                }
            }
	int rowIndex = 0;
          foreach (DataRow row in dtSource.Rows)
            {
    
    
                #region 新建表,填充表头,填充列头,样式
                if (rowIndex == 65535 || rowIndex == 0)
              {
    
    
              if (rowIndex != 0)
                    {
    
    
                        sheet = workbook.CreateSheet();
                    }
	#region 表头及样式
                    {
    
    
                        HSSFRow headerRow = sheet.CreateRow(0);
                        headerRow.HeightInPoints = 25;
                        headerRow.CreateCell(0).SetCellValue(strHeaderText);
HSSFCellStyle headStyle = workbook.CreateCellStyle();
                        // headStyle.Alignment = CellHorizontalAlignment.CENTER;
                        HSSFFont font = workbook.CreateFont();
                        font.FontHeightInPoints = 20;
                        font.Boldweight = 700;
                        headStyle.SetFont(font);
		headerRow.GetCell(0).CellStyle = headStyle;
		sheet.AddMergedRegion(new Region(0, 0, 0, dtSource.Columns.Count - 1));
  // headerRow.Dispose();
                    }
                    #endregion
	#region 列头及样式
                    {
    
    
                        HSSFRow headerRow = sheet.CreateRow(1);
                        HSSFCellStyle headStyle = workbook.CreateCellStyle();
                        // headStyle.Alignment = CellHorizontalAlignment.CENTER;
                        HSSFFont font = workbook.CreateFont();
                        font.FontHeightInPoints = 10;
                        font.Boldweight = 700;
                        headStyle.SetFont(font);
                   foreach (DataColumn column in dtSource.Columns)
                     {
    
    
                           headerRow.CreateCell(column.Ordinal).SetCellValue(column.ColumnName);
                          headerRow.GetCell(column.Ordinal).CellStyle = headStyle;
                          //设置列宽   
                            sheet.SetColumnWidth(column.Ordinal, (arrColWidth[column.Ordinal] + 1) * 256);
                             }
                        //   headerRow.Dispose();
                    }
                    #endregion
                     rowIndex = 2;
                }
                #endregion
              #region 填充内容
                HSSFRow dataRow = sheet.CreateRow(rowIndex);
                foreach (DataColumn column in dtSource.Columns)
                {
    
    
                    HSSFCell newCell = dataRow.CreateCell(column.Ordinal);
		string drValue = row[column].ToString();
		switch (column.DataType.ToString())
                    {
    
    
                        case "System.String"://字符串类型   
                            newCell.SetCellValue(drValue);
                            break;
                        case "System.DateTime"://日期类型   
                            DateTime dateV;
                            DateTime.TryParse(drValue, out dateV);
                            newCell.SetCellValue(dateV);
                            newCell.CellStyle = dateStyle;//格式化显示   
                            break;
                        case "System.Boolean"://布尔型   
                            bool boolV = false;
                            bool.TryParse(drValue, out boolV);
                            newCell.SetCellValue(boolV);
                            break;
                        case "System.Int16"://整型   
                        case "System.Int32":
                        case "System.Int64":
                        case "System.Byte":
                        int intV = 0;
                            int.TryParse(drValue, out intV);
                            newCell.SetCellValue(intV);
                            break;
                             case "System.Decimal"://浮点型   
                        case "System.Double":
                            double doubV = 0;
                            double.TryParse(drValue, out doubV);
                            newCell.SetCellValue(doubV);
                            break;
                            case "System.DBNull"://空值处理   
                            newCell.SetCellValue("");
                            break;
                        default:
                            newCell.SetCellValue("");
                            break;
                             }
                    #endregion
                         rowIndex++;
            }

	using (MemoryStream ms = new MemoryStream())
            {
    
    
            workbook.Write(ms);
                ms.Flush();
                ms.Position = 0;
		// sheet.Dispose();
                //workbook.Dispose();//一般只用写这一个就OK了,他会遍历并释放所有资源,但当前版本有问题所以只释放sheet   
                return ms;
             }
        }


/// <summary>   
        /// 用于Web导出   
        /// </summary>   
        /// <param name="dtSource">源DataTable</param>   
        /// <param name="strHeaderText">表头文本</param>   
        /// <param name="strFileName">文件名</param> 
        public static void ExportByWeb(DataTable dtSource, string strHeaderText, string strFileName)
        {
    
    
        HttpContext curContext = HttpContext.Current;
                 // 设置编码和附件格式   
            curContext.Response.ContentType = "application/vnd.ms-excel";
            curContext.Response.ContentEncoding = Encoding.UTF8;
            curContext.Response.Charset = "";
            curContext.Response.AppendHeader("Content-Disposition",
	    "attachment;filename=" + HttpUtility.UrlEncode(strFileName, Encoding.UTF8));
	    curContext.Response.BinaryWrite(Export(dtSource, strHeaderText).GetBuffer());
	    curContext.Response.End();
	
        }
/// <summary>读取excel   
        /// 默认第一行为标头   
        /// </summary>   
        /// <param name="strFileName">excel文档路径</param>   
        /// <returns></returns> 
        public static DataTable Import(string strFileName)
        {
    
    
            DataTable dt = new DataTable();
             HSSFWorkbook hssfworkbook;
            using (FileStream file = new FileStream(strFileName, FileMode.Open, FileAccess.Read))
            {
    
    
                hssfworkbook = new HSSFWorkbook(file);
            }
            HSSFSheet sheet = hssfworkbook.GetSheetAt(0);
            System.Collections.IEnumerator rows = sheet.GetRowEnumerator();
            HSSFRow headerRow = sheet.GetRow(0);
            int cellCount = headerRow.LastCellNum;
            for (int j = 0; j < cellCount; j++)
            {
    
    
                HSSFCell cell = headerRow.GetCell(j);
                dt.Columns.Add(cell.ToString());
            }
            for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
            {
    
    
            HSSFRow row = sheet.GetRow(i);
            DataRow dataRow = dt.NewRow();
          for (int j = row.FirstCellNum; j < cellCount; j++)
                {
    
    
                    if (row.GetCell(j) != null)
                        dataRow[j] = row.GetCell(j).ToString();
                }
                dt.Rows.Add(dataRow);
            }
            return dt;
        }
     }

Call attention format
Insert picture description here

If you have any questions, you can say in the comments!
If you think it's good, pay attention to it and collect it!

Guess you like

Origin blog.csdn.net/d1332508051/article/details/107312421